Browse Source

Latest upstream commits

Scott Lahteine 9 years ago
parent
commit
ffe0df4b36
67 changed files with 2825 additions and 1238 deletions
  1. 145
    0
      Documentation/LCDLanguageFont.md
  2. 1
    1
      Marlin/Conditionals.h
  3. 14
    8
      Marlin/Configuration.h
  4. 35
    21
      Marlin/ConfigurationStore.cpp
  5. 0
    393
      Marlin/LiquidCrystalRus.cpp
  6. 0
    129
      Marlin/LiquidCrystalRus.h
  7. 3
    1
      Marlin/Marlin.h
  8. 167
    166
      Marlin/Marlin_main.cpp
  9. 4
    4
      Marlin/SanityCheck.h
  10. 5
    3
      Marlin/configurator/config/Configuration.h
  11. 157
    0
      Marlin/dogm_font_data_6x9_marlin.h
  12. 171
    0
      Marlin/dogm_font_data_HD44780_C.h
  13. 169
    0
      Marlin/dogm_font_data_HD44780_J.h
  14. 203
    0
      Marlin/dogm_font_data_HD44780_W.h
  15. 14
    14
      Marlin/dogm_font_data_ISO10646_1.h
  16. 174
    0
      Marlin/dogm_font_data_ISO10646_5_Cyrillic.h
  17. 173
    0
      Marlin/dogm_font_data_ISO10646_Kana.h
  18. 22
    0
      Marlin/dogm_font_data_Marlin_symbols.h
  19. 178
    98
      Marlin/dogm_lcd_implementation.h
  20. 5
    3
      Marlin/example_configurations/Felix/Configuration.h
  21. 5
    3
      Marlin/example_configurations/Felix/Configuration_DUAL.h
  22. 5
    3
      Marlin/example_configurations/Hephestos/Configuration.h
  23. 5
    3
      Marlin/example_configurations/K8200/Configuration.h
  24. 5
    3
      Marlin/example_configurations/SCARA/Configuration.h
  25. 5
    3
      Marlin/example_configurations/WITBOX/Configuration.h
  26. 14
    9
      Marlin/example_configurations/delta/generic/Configuration.h
  27. 14
    9
      Marlin/example_configurations/delta/kossel_mini/Configuration.h
  28. 5
    3
      Marlin/example_configurations/makibox/Configuration.h
  29. 5
    3
      Marlin/example_configurations/tvrrug/Round2/Configuration.h
  30. BIN
      Marlin/fonts/HD44780_C.fon
  31. BIN
      Marlin/fonts/HD44780_J.fon
  32. BIN
      Marlin/fonts/HD44780_W.fon
  33. BIN
      Marlin/fonts/ISO10646-1-Marlin.fon
  34. BIN
      Marlin/fonts/ISO10646-5_Cyrillic.fon
  35. BIN
      Marlin/fonts/ISO10646_Kana.fon
  36. 6
    0
      Marlin/fonts/README.fonts
  37. BIN
      Marlin/fonts/bdf2u8g.exe
  38. 0
    1
      Marlin/fonts/make_fonts.bat
  39. 19
    72
      Marlin/language.h
  40. 9
    4
      Marlin/language_an.h
  41. 11
    5
      Marlin/language_ca.h
  42. 20
    15
      Marlin/language_de.h
  43. 15
    5
      Marlin/language_en.h
  44. 9
    4
      Marlin/language_es.h
  45. 9
    4
      Marlin/language_eu.h
  46. 31
    26
      Marlin/language_fi.h
  47. 11
    5
      Marlin/language_fr.h
  48. 9
    4
      Marlin/language_it.h
  49. 147
    0
      Marlin/language_kana.h
  50. 142
    0
      Marlin/language_kana_utf8.h
  51. 9
    4
      Marlin/language_nl.h
  52. 10
    5
      Marlin/language_pl.h
  53. 21
    16
      Marlin/language_pt-br.h
  54. 21
    16
      Marlin/language_pt.h
  55. 5
    2
      Marlin/language_ru.h
  56. 215
    0
      Marlin/language_test.h
  57. 9
    13
      Marlin/mesh_bed_leveling.cpp
  58. 29
    33
      Marlin/mesh_bed_leveling.h
  59. 1
    1
      Marlin/stepper.cpp
  60. 6
    5
      Marlin/temperature.cpp
  61. 3
    3
      Marlin/temperature.h
  62. 28
    3
      Marlin/ultralcd.cpp
  63. 41
    55
      Marlin/ultralcd_implementation_hitachi_HD44780.h
  64. 252
    0
      Marlin/utf_mapper.h
  65. 31
    55
      Marlin/vector_3.cpp
  66. 2
    2
      Marlin/vector_3.h
  67. 1
    0
      README.md

+ 145
- 0
Documentation/LCDLanguageFont.md View File

@@ -0,0 +1,145 @@
1
+# LCD Language Font System
2
+
3
+We deal with a variety of different displays.
4
+And we try to display a lot of different languages in different scripts on them.
5
+This system is ought to solve some of the related problems.
6
+
7
+## The Displays
8
+We have two different technologies for the displays:
9
+
10
+* Character based displays:
11
+  Have a fixed set of symbols (charset - font) in their ROM.
12
+  All of them have a similar but not identical symbol set at the positions 0 to 127 similar to US-ASCII.
13
+  On the other hand symbols at places higher than 127 have mayor differences.
14
+  Until now we know of (and support):
15
+  * 1.) HD44780 and similar with Kana charset A00 https://www.sparkfun.com/datasheets/LCD/HD44780.pdf Page 17
16
+      These are very common, but sadly not very useful when writing in European languages.
17
+  * 2.) HD44780 and similar with Western charset A02 https://www.sparkfun.com/datasheets/LCD/HD44780.pdf Page 18
18
+      These are rare, but fairly useful for European languages. Also a limited number of Cyrillic symbols is available.
19
+  * 3.) HD44780 and similar with Cyrillic charset http://store.comet.bg/download-file.php?id=466 Page 14
20
+      Some of our Russian friends use them.
21
+
22
+  At all of them you can define 8 different symbols by yourself. In Marlin they are used for the Feedrate-, Thermometer-, ... symbols
23
+
24
+* Full graphic displays:
25
+  Where we have the full freedom to display whatever we want, when we can make a program for it.
26
+  Currently we deal with 128x64 Pixel Displays and divide this area in about 5 Lines with about 22 columns.
27
+  Therefore we need fonts with a bounding box of about 6x10.
28
+  Until now we used a
29
+  * 1.) Marlin-font similar to ISO10646-1 but with special Symbols at the end, what made 'ü' and 'ä' inaccessible, in the size 6x10.
30
+  * 2.) Because these letters where to big for some locations on the info-screen we use a full ISO10646-1 font in the size of 6x9.(3200 byte)
31
+  * 3.) When we define USE_BIG_EDIT_FONT we use an additional ISO10646-1 font with 9x18, eating up another 3120 bytes of progmem - but readable without glasses.
32
+
33
+## The Languages
34
+  For the moment Marlin wants to support a lot of languages:
35
+  * en    English
36
+  * pl    Polish
37
+  * fr    French
38
+  * de    German
39
+  * es    Spanish
40
+  * ru    Russian
41
+  * it    Italian
42
+  * pt    Portuguese
43
+  * pt-br Portuguese (Brazil)
44
+  * fi    Finnish
45
+  * an    Aragonese
46
+  * nl    Dutch
47
+  * ca    Catalan
48
+  * eu    Basque-Euskera
49
+
50
+  and recently on [Thingiverse](http://www.thingiverse.com/) a new port to
51
+  * jp    [Japanese](http://www.thingiverse.com/thing:664397)
52
+
53
+ appeared.
54
+
55
+## The Problem
56
+  All of this languages, except the English, normally use extended symbol sets, not contained in US-ASCII.
57
+  Even the English translation uses some Symbols not in US-ASCII. ( '\002' for Thermometer, STR_h3 for '³')
58
+  And worse, in the code itself symbols are used, not taking in account, on what display they are written. [(This is true only for Displays with Japanese charset](https://github.com/MarlinFirmware/Marlin/blob/Development/Marlin/ultralcd_implementation_hitachi_HD44780.h#L218) on Western displays you'll see a '~' and on Cyrillic an 'arrow coming from top - pointing to left', what is quite the opposite of what the programmer wanted.)
59
+  The Germans want to use "ÄäÖöÜüß" the Finnish at least "äö". Other European languages want to see their accents on their letters.
60
+  For other scripts like Cyrillic, Japanese, Greek, Hebrew, ... you have to find totally different symbol sets.
61
+
62
+  Until now the problems where ignored widely.
63
+  The German translation used utf8 'ä' and 'ö' and did not care about showing garbage on ALL displays.
64
+  The Russian translators new that their system only works on the Cyrillic character displays and relied on special LCD routines (LiquidCrystalRus.cpp) to handle UTF8 but missed to implement a proper strlen().
65
+  The Japanese translator dealed with to scripts. He introduced a very special font for the full graphic displays and made use of the Japanese version of the character displays. Therefore he ended up with two pretty unreadable language.h files full of '\xxx' definitions.
66
+  Other languages ether tried to avoid wording with their special symbols or ignored the problem at all and used the basic symbols without the accents, dots, ... whatever.
67
+
68
+## The (partial) Solution
69
+  On a 'perfect' system like Windows or Linux we'd dig out unifont.ttf and some code from the libraries and they'd do what we want. But we are on a embedded system with very limited resources. So we had to find ways to limit the used space (Alone unifont.ttf is about 12MB) and have to make some compromise.
70
+
71
+### Aims:
72
+  * 1.) Make the input for translators as convenient as possible. (Unicode UTF8)
73
+  * 2.) Make the displays show the scripts as good as they can. (fonts, mapping tables)
74
+  * 3.) Don't destroy the existing language files.
75
+  * 3.) Don't loose to much speed
76
+  * 4.) Don't loose to much memory.
77
+
78
+### Actions:
79
+  * a.) Declare the display hardware we use. (Configuration.h)
80
+  * b.) Declare the language ore script we use. (Configuration.h)
81
+  * c.) Declare the kind of input we use. Ether direct pointers to the font (\xxx) or UTF8 and the font to use on graphic displays. (language_xx.h)
82
+  * d.) Declare the needed translations. (language_xx.h)
83
+  * e.) Make strlen() work with UTF8. (ultralcd.cpp)
84
+  * f.) Seperate the Marlin Symbols to their own font. (dogm_font_data_Marlin_symbols.h)
85
+  * g.) Make the fontswitch function remember the last used font. (dogm_lcd_implementation.h)
86
+  * h.) Make output functions that count the number of written chars and switch the font to Marlin symbols and back when needed. (dogm_lcd_implementation.h) (ultralcd_implementation_hitachi_HD44780.h)
87
+  * i.) Make three fonts to simulate the HD44780 charsets on dogm-displays. With this fonts the translator can check how his translation will look on the character based displays.
88
+  * j.) Make ISO fonts for Cyrillic and Katakana because they do not need a mapping table and are faster to deal with and have a better charset (less compromises) than the HD44780 fonts.
89
+  * k.) Make mapping functions and tables to convert from UTF8 to the fonts and integrate in the new output functions. (utf_mapper.h)
90
+  * l.) Delete the not needed any more 'LiquidCrystalRus.xxx' files and their calls in 'ultralcd_implementation_hitachi_HD44780.h'.
91
+  * m.) Split 'dogm_font_data_Marlin.h' into separate fonts and delete. (+dogm_font_data_6x9_marlin.h , +dogm_font_data_Marlin_symbols.h, -dogm_font_data_Marlin.h)
92
+  * n.) Do a bit of preprocessor magic to match displays - fonts and mappers in 'utf_mapper.h'.
93
+
94
+## Translators handbook
95
+  * a.) Check is there already is a language_xx.h file for your language (-> b.) or not (-> e.)
96
+  * b.) Ether their is declared MAPPER_NON (-> c.) or an other mapper (-> d.)
97
+  * c.) Symbols outside the normal ASCII-range (32-128) are written as "\xxx" and point directly into the font of the hardware you declared in 'Configuration.h'
98
+      This is one of the three fonts of the character based Hitachi displays (DISPLAY_CHARSET_HD44780_JAPAN, DISPLAY_CHARSET_HD44780_WEST, DISPLAY_CHARSET_HD44780_CYRILIC).
99
+      Even on the full graphic displays one of these will be used when SIMULATE_ROMFONT is defined.
100
+      If you don't make use of the extended character set your file will look like 'language_en.h' and your language file will work on all the displays. 
101
+      If you make intensive use, your file will look like 'language_kana.h' and your language file will only work on one of displays. (in this case DISPLAY_CHARSET_HD44780_JAPAN)
102
+      Be careful with the characters 0x5c = '\', and 0x7b - 0x7f. "{|}"These are not the same on all variants.
103
+      MAPPER_NON is the fastest an least memory consuming variant.
104
+      If you want to make use of more than a view symbols outside standard ASCII or want to improve the portability to more different types of displays use UTF8 input. That means define an other mapper.
105
+  * d.) With a mapper different to MAPPER_NON UTF8 input is used. Instead of "\xe1" (on a display with Japanese font) or STR_ae simply use "ä". When the string is read byte by byte , the "ä" will expand to "\0xc3\0xa4" or "Я" will expand to "0xd0\0xaf" or "ホ" will expand to "\0xe3\0x83\0x9b"
106
+      To limit the used memory we can't use all the possibilities UTF8 gives at the same time. We define a subset matching to the language or script we use.
107
+      * MAPPER_C2C3 correspondents good with west European languages the possible symbols are listed at (http://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block))
108
+      * MAPPER_D0D1 correspondents well with the Cyrillic languages. See (http://en.wikipedia.org/wiki/Cyrillic_(Unicode_block))
109
+      * MAPPER_E382E383 works with the Japanese Katakana script. See (http://en.wikipedia.org/wiki/Katakana_(Unicode_block))
110
+
111
+      The mapper functions will only catch the 'lead in' described in the mappers name. If the input they get does not match they'll put out a '?' or garbage.
112
+      The last byte in the sequence ether points directly into a matching ISO10646 font or via a mapper_table into one of the HD44780 fonts.
113
+      The mapper_tables do their best to find a similar symbol in the HD44780_fonts. For example replacing small letters with the matching capital letters. But they may fail to find something matching and will output a '?'. There are combinations of language and display what simply have no corresponding symbols - like Cyrillic on a Japanese display or visa versa - than the compiler will throw an error.
114
+      In short: Chose a Mapper working with the symbols you want to use. Use only symbols matching the mapper. On FULL graphic displays all will be fine, but check for daring replacements or question-marks in the output of character based displays by defining SIMULATE_ROMFONT and trying the different variants.
115
+      If you get a lot of question-marks on the Hitachi based displays with your new translation, maybe creating an additional language file with the format 'language_xx_utf8.h' is the way to go.
116
+      * MAPPER_NON is the fastest and least memory consuming variant.
117
+      * Mappers together with a ISO10646_font are the second best choice regarding speed and memory consumption. Only a few more decisions are mad per character.
118
+      * Mappers together with the HD44780_fonts use about additional 128 bytes for the mapping_table.
119
+  * e.) Creating a new language file is not a big thing. Just make a new file with the format 'language_xx.h' or maybe 'language.xx.utf8.h', define a mapper and a font in there and translate some of the strings defined in language_en.h. You can drop the surrounding  #ifndef #endif. You don't have to translate all the stings - the missing one will be added by language_en.h - in English - of cause.
120
+  * f.) If you cant find a matching mapper things will be a bit more complex. With the Hitachi based displays you will not have big chance to make something useful unless you have one with a matching charset. For a full graphic display - lets explain with - let's say Greece.
121
+      Find a matching charset. (http://en.wikipedia.org/wiki/Greek_and_Coptic)
122
+      Provide a font containing the symbols in the right size. Normal ASCII in the lower 127 places, the upper with your selection.
123
+      Write a mapper catching, in this case, 0xcd to 0xcf and add it to 'utf_mapper.h'.
124
+      In case of a ISO10646 font we have a MAPPER_ONE_TO_ONE and don't have to make a table.
125
+  * g.) If you discover enough useful symbols in one of the HD44780 fonts you can provide a mapping table. For example HD44780_WEST contains 'alpha', 'beta', 'pi', 'Sigma', 'omega' 'My' - what is not enough to make USEFUL table - I think.
126
+  * h.) If you want to integrate an entirely new variant of a Hitachi based display.
127
+      Add it in 'Configuration.h'. Define mapper tables in 'utf_mapper.h'. Maybe you need a new mapper function. 
128
+
129
+  The length of the strings is limited. '17 chars' was crude rule of thumb. Obviously 17 is to long for the 16x2 displays. A more exact rule would be max_strlen = Displaywidth - 2 - strlen(value to display behind). This is a bit complicated. So try and count is my rule of thumb. 
130
+
131
+  On the 16x2 displays the strings are cut at the end to fit on the display. So it's a good idea to make them differ early. ('Somverylongoptionname x' -> 'x Somverylongoptionname')
132
+
133
+  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.
134
+
135
+## User Instructions
136
+   Define your hardware and the wanted language in 'Configuration.h'.
137
+   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.
138
+   * DISPLAY_CHARSET_HD44780_JAPAN   locks like "バパヒビピフブプヘベペホボポマミ"
139
+   * DISPLAY_CHARSET_HD44780_WESTERN locks like "ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß"
140
+   * DISPLAY_CHARSET_HD44780_CYRILIC locks like "РСТУФХЦЧШЩЪЫЬЭЮЯ"
141
+
142
+   If you get an error about missing mappers during compilation - lie about your displays hardware font to see at lest some garbage, or select an other language.
143
+   
144
+   English works on all hardware.
145
+

+ 1
- 1
Marlin/Conditionals.h View File

@@ -362,7 +362,7 @@
362 362
   #define HAS_AUTO_FAN_1 (defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN >= 0)
363 363
   #define HAS_AUTO_FAN_2 (defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN >= 0)
364 364
   #define HAS_AUTO_FAN_3 (defined(EXTRUDER_3_AUTO_FAN_PIN) && EXTRUDER_3_AUTO_FAN_PIN >= 0)
365
-  #define HAS_AUTO_FAN HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3
365
+  #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
366 366
   #define HAS_FAN (defined(FAN_PIN) && FAN_PIN >= 0)
367 367
 
368 368
   /**

+ 14
- 8
Marlin/Configuration.h View File

@@ -532,9 +532,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
532 532
 // Custom M code points
533 533
 #define CUSTOM_M_CODES
534 534
 #ifdef CUSTOM_M_CODES
535
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
536
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
537
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
535
+  #ifdef ENABLE_AUTO_BED_LEVELING
536
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
537
+    #define Z_PROBE_OFFSET_RANGE_MIN -20
538
+    #define Z_PROBE_OFFSET_RANGE_MAX 20
539
+  #endif
538 540
 #endif
539 541
 
540 542
 
@@ -561,13 +563,16 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
561 563
 //==============================LCD and SD support=============================
562 564
 
563 565
 // Define your display language below. Replace (en) with your language code and uncomment.
564
-// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu
566
+// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
565 567
 // See also language.h
566
-//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
568
+#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
567 569
 
568
-// Character based displays can have different extended charsets.
569
-#define DISPLAY_CHARSET_HD44780_JAPAN     // "ääööüüß23°"
570
-//#define DISPLAY_CHARSET_HD44780_WESTERN // "ÄäÖöÜüß²³°" if you see a '~' instead of a 'arrow_right' at the right of submenuitems - this is the right one.
570
+// Chose ONE of the next three charsets. This has to match your hardware. In case of a full graphic display this information is not important.
571
+// To find out what type you have - compile with (test) - upload - click to get the menu. You'll see two typical lines from the upper half of the charset.
572
+// See also documentation/LCDLanguageFont.md
573
+  #define DISPLAY_CHARSET_HD44780_JAPAN        // this is the most common hardware
574
+  //#define DISPLAY_CHARSET_HD44780_WESTERN
575
+  //#define DISPLAY_CHARSET_HD44780_CYRILLIC
571 576
 
572 577
 //#define ULTRA_LCD  //general LCD support, also 16x2
573 578
 //#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
@@ -580,6 +585,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
580 585
 //#define ULTIPANEL  //the UltiPanel as on Thingiverse
581 586
 //#define LCD_FEEDBACK_FREQUENCY_HZ 1000	// this is the tone frequency the buzzer plays when on UI feedback. ie Screen Click
582 587
 //#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100 // the duration the buzzer plays the UI feedback sound. ie Screen Click
588
+                                               // 0 to disable buzzer feedback  
583 589
 
584 590
 // PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
585 591
 // http://reprap.org/wiki/PanelOne

+ 35
- 21
Marlin/ConfigurationStore.cpp View File

@@ -11,7 +11,7 @@
11 11
  *  max_acceleration_units_per_sq_second (x4)
12 12
  *  acceleration
13 13
  *  retract_acceleration
14
- *  travel_aceeleration
14
+ *  travel_acceleration
15 15
  *  minimumfeedrate
16 16
  *  mintravelfeedrate
17 17
  *  minsegmenttime
@@ -25,6 +25,7 @@
25 25
  *  mesh_num_x
26 26
  *  mesh_num_y
27 27
  *  z_values[][]
28
+ *  zprobe_zoffset
28 29
  *
29 30
  * DELTA:
30 31
  *  endstop_adj (x3)
@@ -39,7 +40,6 @@
39 40
  *  absPreheatHotendTemp
40 41
  *  absPreheatHPBTemp
41 42
  *  absPreheatFanSpeed
42
- *  zprobe_zoffset
43 43
  *
44 44
  * PIDTEMP:
45 45
  *  Kp[0], Ki[0], Kd[0], Kc[0]
@@ -118,7 +118,7 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) {
118 118
 // wrong data being written to the variables.
119 119
 // ALSO:  always make sure the variables in the Store and retrieve sections are in the same order.
120 120
 
121
-#define EEPROM_VERSION "V17"
121
+#define EEPROM_VERSION "V18"
122 122
 
123 123
 #ifdef EEPROM_SETTINGS
124 124
 
@@ -143,7 +143,7 @@ void Config_StoreSettings()  {
143 143
 
144 144
   uint8_t mesh_num_x = 3;
145 145
   uint8_t mesh_num_y = 3;
146
-  #if defined(MESH_BED_LEVELING)
146
+  #ifdef MESH_BED_LEVELING
147 147
     // Compile time test that sizeof(mbl.z_values) is as expected
148 148
     typedef char c_assert[(sizeof(mbl.z_values) == MESH_NUM_X_POINTS*MESH_NUM_Y_POINTS*sizeof(dummy)) ? 1 : -1];
149 149
     mesh_num_x = MESH_NUM_X_POINTS;
@@ -161,7 +161,12 @@ void Config_StoreSettings()  {
161 161
     for (int q=0; q<mesh_num_x*mesh_num_y; q++) {
162 162
       EEPROM_WRITE_VAR(i, dummy);
163 163
     }
164
-  #endif  // MESH_BED_LEVELING
164
+  #endif // MESH_BED_LEVELING
165
+
166
+  #ifndef ENABLE_AUTO_BED_LEVELING
167
+    float zprobe_zoffset = 0;
168
+  #endif
169
+  EEPROM_WRITE_VAR(i, zprobe_zoffset);
165 170
 
166 171
   #ifdef DELTA
167 172
     EEPROM_WRITE_VAR(i, endstop_adj);               // 3 floats
@@ -188,7 +193,7 @@ void Config_StoreSettings()  {
188 193
   EEPROM_WRITE_VAR(i, absPreheatHotendTemp);
189 194
   EEPROM_WRITE_VAR(i, absPreheatHPBTemp);
190 195
   EEPROM_WRITE_VAR(i, absPreheatFanSpeed);
191
-  EEPROM_WRITE_VAR(i, zprobe_zoffset);
196
+
192 197
 
193 198
   for (int e = 0; e < 4; e++) {
194 199
 
@@ -328,6 +333,11 @@ void Config_RetrieveSettings() {
328 333
       }
329 334
     #endif  // MESH_BED_LEVELING
330 335
 
336
+    #ifndef ENABLE_AUTO_BED_LEVELING
337
+      float zprobe_zoffset = 0;
338
+    #endif
339
+    EEPROM_READ_VAR(i, zprobe_zoffset);
340
+
331 341
     #ifdef DELTA
332 342
       EEPROM_READ_VAR(i, endstop_adj);                // 3 floats
333 343
       EEPROM_READ_VAR(i, delta_radius);               // 1 float
@@ -353,7 +363,6 @@ void Config_RetrieveSettings() {
353 363
     EEPROM_READ_VAR(i, absPreheatHotendTemp);
354 364
     EEPROM_READ_VAR(i, absPreheatHPBTemp);
355 365
     EEPROM_READ_VAR(i, absPreheatFanSpeed);
356
-    EEPROM_READ_VAR(i, zprobe_zoffset);
357 366
 
358 367
     #ifdef PIDTEMP
359 368
       for (int e = 0; e < 4; e++) { // 4 = max extruders currently supported by Marlin
@@ -461,9 +470,13 @@ void Config_ResetDefault() {
461 470
   max_e_jerk = DEFAULT_EJERK;
462 471
   home_offset[X_AXIS] = home_offset[Y_AXIS] = home_offset[Z_AXIS] = 0;
463 472
 
464
-  #if defined(MESH_BED_LEVELING)
473
+  #ifdef MESH_BED_LEVELING
465 474
     mbl.active = 0;
466
-  #endif  // MESH_BED_LEVELING
475
+  #endif
476
+
477
+  #ifdef ENABLE_AUTO_BED_LEVELING
478
+    zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER;
479
+  #endif
467 480
 
468 481
   #ifdef DELTA
469 482
     endstop_adj[X_AXIS] = endstop_adj[Y_AXIS] = endstop_adj[Z_AXIS] = 0;
@@ -484,10 +497,6 @@ void Config_ResetDefault() {
484 497
     absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
485 498
   #endif
486 499
 
487
-  #ifdef ENABLE_AUTO_BED_LEVELING
488
-    zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER;
489
-  #endif
490
-
491 500
   #ifdef DOGLCD
492 501
     lcd_contrast = DEFAULT_LCD_CONTRAST;
493 502
   #endif
@@ -738,15 +747,20 @@ void Config_PrintSettings(bool forReplay) {
738 747
     }
739 748
   }
740 749
 
741
-  #ifdef CUSTOM_M_CODES
750
+  #ifdef ENABLE_AUTO_BED_LEVELING
742 751
     SERIAL_ECHO_START;
743
-    if (!forReplay) {
744
-      SERIAL_ECHOLNPGM("Z-Probe Offset (mm):");
745
-      SERIAL_ECHO_START;
746
-    }
747
-    SERIAL_ECHO("   M");
748
-    SERIAL_ECHO(CUSTOM_M_CODE_SET_Z_PROBE_OFFSET);
749
-    SERIAL_ECHOPAIR(" Z", -zprobe_zoffset);
752
+    #ifdef CUSTOM_M_CODES
753
+      if (!forReplay) {
754
+        SERIAL_ECHOLNPGM("Z-Probe Offset (mm):");
755
+        SERIAL_ECHO_START;
756
+      }
757
+      SERIAL_ECHOPAIR("   M", (unsigned long)CUSTOM_M_CODE_SET_Z_PROBE_OFFSET);
758
+      SERIAL_ECHOPAIR(" Z", -zprobe_zoffset);
759
+    #else
760
+      if (!forReplay) {
761
+        SERIAL_ECHOPAIR("Z-Probe Offset (mm):", -zprobe_zoffset);
762
+      }
763
+    #endif
750 764
     SERIAL_EOL;
751 765
   #endif
752 766
 }

+ 0
- 393
Marlin/LiquidCrystalRus.cpp View File

@@ -1,393 +0,0 @@
1
-#include "LiquidCrystalRus.h"
2
-
3
-#include <stdio.h>
4
-#include <string.h>
5
-#include <inttypes.h>
6
-#include <avr/pgmspace.h>
7
-
8
-#if defined(ARDUINO) && ARDUINO >= 100
9
-  #include "Arduino.h"
10
-#else
11
-  #include "WProgram.h"
12
-#endif
13
-
14
-// it is a Russian alphabet translation
15
-// except 0401 --> 0xa2 = ╗, 0451 --> 0xb5
16
-const PROGMEM uint8_t utf_recode[] = 
17
-       { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,
18
-         0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8,
19
-         0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,
20
-         0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1,
21
-         0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,
22
-         0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe,
23
-         0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,
24
-         0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7
25
-        };     
26
-
27
-// When the display powers up, it is configured as follows:
28
-//
29
-// 1. Display clear
30
-// 2. Function set: 
31
-//    DL = 1; 8-bit interface data 
32
-//    N = 0; 1-line display 
33
-//    F = 0; 5x8 dot character font 
34
-// 3. Display on/off control: 
35
-//    D = 0; Display off 
36
-//    C = 0; Cursor off 
37
-//    B = 0; Blinking off 
38
-// 4. Entry mode set: 
39
-//    I/D = 1; Increment by 1 
40
-//    S = 0; No shift 
41
-//
42
-// Note, however, that resetting the Arduino doesn't reset the LCD, so we
43
-// can't assume that it's in that state when a sketch starts (and the
44
-// LiquidCrystal constructor is called).
45
-// 
46
-// modified 27 Jul 2011
47
-// by Ilya V. Danilov http://mk90.ru/
48
-
49
-
50
-LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable,
51
-			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
52
-			     uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
53
-{
54
-  init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
55
-}
56
-
57
-LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t enable,
58
-			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
59
-			     uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
60
-{
61
-  init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
62
-}
63
-
64
-LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable,
65
-			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
66
-{
67
-  init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
68
-}
69
-
70
-LiquidCrystalRus::LiquidCrystalRus(uint8_t rs,  uint8_t enable,
71
-			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
72
-{
73
-  init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
74
-}
75
-
76
-void LiquidCrystalRus::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
77
-			 uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
78
-			 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
79
-{
80
-  _rs_pin = rs;
81
-  _rw_pin = rw;
82
-  _enable_pin = enable;
83
-  
84
-  _data_pins[0] = d0;
85
-  _data_pins[1] = d1;
86
-  _data_pins[2] = d2;
87
-  _data_pins[3] = d3; 
88
-  _data_pins[4] = d4;
89
-  _data_pins[5] = d5;
90
-  _data_pins[6] = d6;
91
-  _data_pins[7] = d7; 
92
-
93
-  pinMode(_rs_pin, OUTPUT);
94
-  // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
95
-  if (_rw_pin != 255) { 
96
-    pinMode(_rw_pin, OUTPUT);
97
-  }
98
-  pinMode(_enable_pin, OUTPUT);
99
-  
100
-  if (fourbitmode)
101
-    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
102
-  else 
103
-    _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
104
-  
105
-  begin(16, 1);  
106
-}
107
-
108
-void LiquidCrystalRus::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
109
-  if (lines > 1) {
110
-    _displayfunction |= LCD_2LINE;
111
-  }
112
-  _numlines = lines;
113
-  _currline = 0;
114
-
115
-  // for some 1 line displays you can select a 10 pixel high font
116
-  if ((dotsize != 0) && (lines == 1)) {
117
-    _displayfunction |= LCD_5x10DOTS;
118
-  }
119
-
120
-  // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
121
-  // according to datasheet, we need at least 40ms after power rises above 2.7V
122
-  // before sending commands. Arduino can turn on way before 4.5V so we'll wait 50
123
-  delayMicroseconds(50000); 
124
-  // Now we pull both RS and R/W low to begin commands
125
-  digitalWrite(_rs_pin, LOW);
126
-  digitalWrite(_enable_pin, LOW);
127
-  if (_rw_pin != 255) { 
128
-    digitalWrite(_rw_pin, LOW);
129
-  }
130
-  
131
-  //put the LCD into 4 bit or 8 bit mode
132
-  if (! (_displayfunction & LCD_8BITMODE)) {
133
-    // this is according to the Hitachi HD44780 datasheet
134
-    // figure 24, pg 46
135
-
136
-    // we start in 8bit mode, try to set 4 bit mode
137
-    writeNbits(0x03,4);
138
-    delayMicroseconds(4500); // wait min 4.1ms
139
-
140
-    // second try
141
-    writeNbits(0x03,4);
142
-    delayMicroseconds(4500); // wait min 4.1ms
143
-    
144
-    // third go!
145
-    writeNbits(0x03,4); 
146
-    delayMicroseconds(150);
147
-
148
-    // finally, set to 8-bit interface
149
-    writeNbits(0x02,4); 
150
-  } else {
151
-    // this is according to the Hitachi HD44780 datasheet
152
-    // page 45 figure 23
153
-
154
-    // Send function set command sequence
155
-    command(LCD_FUNCTIONSET | _displayfunction);
156
-    delayMicroseconds(4500);  // wait more than 4.1ms
157
-
158
-    // second try
159
-    command(LCD_FUNCTIONSET | _displayfunction);
160
-    delayMicroseconds(150);
161
-
162
-    // third go
163
-    command(LCD_FUNCTIONSET | _displayfunction);
164
-  }
165
-
166
-  // finally, set # lines, font size, etc.
167
-  command(LCD_FUNCTIONSET | _displayfunction);  
168
-
169
-  // turn the display on with no cursor or blinking default
170
-  _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;  
171
-  display();
172
-
173
-  // clear it off
174
-  clear();
175
-
176
-  // Initialize to default text direction (for romance languages)
177
-  _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
178
-  // set the entry mode
179
-  command(LCD_ENTRYMODESET | _displaymode);
180
-
181
-}
182
-
183
-void LiquidCrystalRus::setDRAMModel(uint8_t model) {
184
-  _dram_model = model;
185
-}
186
-
187
-/********** high level commands, for the user! */
188
-void LiquidCrystalRus::clear()
189
-{
190
-  command(LCD_CLEARDISPLAY);  // clear display, set cursor position to zero
191
-  delayMicroseconds(2000);  // this command takes a long time!
192
-}
193
-
194
-void LiquidCrystalRus::home()
195
-{
196
-  command(LCD_RETURNHOME);  // set cursor position to zero
197
-  delayMicroseconds(2000);  // this command takes a long time!
198
-}
199
-
200
-void LiquidCrystalRus::setCursor(uint8_t col, uint8_t row)
201
-{
202
-  int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
203
-  if ( row >= _numlines ) {
204
-    row = _numlines-1;    // we count rows starting w/0
205
-  }
206
-  
207
-  command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
208
-}
209
-
210
-// Turn the display on/off (quickly)
211
-void LiquidCrystalRus::noDisplay() {
212
-  _displaycontrol &= ~LCD_DISPLAYON;
213
-  command(LCD_DISPLAYCONTROL | _displaycontrol);
214
-}
215
-void LiquidCrystalRus::display() {
216
-  _displaycontrol |= LCD_DISPLAYON;
217
-  command(LCD_DISPLAYCONTROL | _displaycontrol);
218
-}
219
-
220
-// Turns the underline cursor on/off
221
-void LiquidCrystalRus::noCursor() {
222
-  _displaycontrol &= ~LCD_CURSORON;
223
-  command(LCD_DISPLAYCONTROL | _displaycontrol);
224
-}
225
-void LiquidCrystalRus::cursor() {
226
-  _displaycontrol |= LCD_CURSORON;
227
-  command(LCD_DISPLAYCONTROL | _displaycontrol);
228
-}
229
-
230
-// Turn on and off the blinking cursor
231
-void LiquidCrystalRus::noBlink() {
232
-  _displaycontrol &= ~LCD_BLINKON;
233
-  command(LCD_DISPLAYCONTROL | _displaycontrol);
234
-}
235
-void LiquidCrystalRus::blink() {
236
-  _displaycontrol |= LCD_BLINKON;
237
-  command(LCD_DISPLAYCONTROL | _displaycontrol);
238
-}
239
-
240
-// These commands scroll the display without changing the RAM
241
-void LiquidCrystalRus::scrollDisplayLeft(void) {
242
-  command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT);
243
-}
244
-void LiquidCrystalRus::scrollDisplayRight(void) {
245
-  command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT);
246
-}
247
-
248
-// This is for text that flows Left to Right
249
-void LiquidCrystalRus::leftToRight(void) {
250
-  _displaymode |= LCD_ENTRYLEFT;
251
-  command(LCD_ENTRYMODESET | _displaymode);
252
-}
253
-
254
-// This is for text that flows Right to Left
255
-void LiquidCrystalRus::rightToLeft(void) {
256
-  _displaymode &= ~LCD_ENTRYLEFT;
257
-  command(LCD_ENTRYMODESET | _displaymode);
258
-}
259
-
260
-// This will 'right justify' text from the cursor
261
-void LiquidCrystalRus::autoscroll(void) {
262
-  _displaymode |= LCD_ENTRYSHIFTINCREMENT;
263
-  command(LCD_ENTRYMODESET | _displaymode);
264
-}
265
-
266
-// This will 'left justify' text from the cursor
267
-void LiquidCrystalRus::noAutoscroll(void) {
268
-  _displaymode &= ~LCD_ENTRYSHIFTINCREMENT;
269
-  command(LCD_ENTRYMODESET | _displaymode);
270
-}
271
-
272
-// Allows us to fill the first 8 CGRAM locations
273
-// with custom characters
274
-void LiquidCrystalRus::createChar(uint8_t location, uint8_t charmap[]) {
275
-  location &= 0x7; // we only have 8 locations 0-7
276
-  command(LCD_SETCGRAMADDR | (location << 3));
277
-  for (int i=0; i<8; i++) {
278
-    write(charmap[i]);
279
-  }
280
-}
281
-
282
-/*********** mid level commands, for sending data/cmds */
283
-
284
-inline void LiquidCrystalRus::command(uint8_t value) {
285
-  send(value, LOW);
286
-}
287
-
288
-#if defined(ARDUINO) && ARDUINO >= 100
289
-  size_t LiquidCrystalRus::write(uint8_t value)
290
-#else
291
-  void   LiquidCrystalRus::write(uint8_t value)
292
-#endif
293
-{
294
-  uint8_t out_char=value;
295
-
296
-  if (_dram_model == LCD_DRAM_WH1601) {  
297
-    uint8_t ac=recv(LOW) & 0x7f;
298
-    if (ac>7 && ac<0x14) command(LCD_SETDDRAMADDR | (0x40+ac-8));
299
-  }
300
-
301
-  if (value>=0x80) { // UTF-8 handling
302
-    if (value >= 0xc0) {
303
-      utf_hi_char = value - 0xd0;
304
-    } else {
305
-      value &= 0x3f;
306
-      if (!utf_hi_char && (value == 1)) 
307
-        send(0xa2,HIGH); // ╗
308
-      else if ((utf_hi_char == 1) && (value == 0x11)) 
309
-        send(0xb5,HIGH); // ╦
310
-      else 
311
-        send(pgm_read_byte_near(utf_recode + value + (utf_hi_char<<6) - 0x10), HIGH);
312
-    }    
313
-  } else send(out_char, HIGH);
314
-#if defined(ARDUINO) && ARDUINO >= 100
315
-  return 1; // assume success 
316
-#endif
317
-}
318
-
319
-/************ low level data pushing commands **********/
320
-
321
-// write either command or data, with automatic 4/8-bit selection
322
-void LiquidCrystalRus::send(uint8_t value, uint8_t mode) {
323
-  digitalWrite(_rs_pin, mode);
324
-
325
-  // if there is a RW pin indicated, set it low to Write
326
-  if (_rw_pin != 255) { 
327
-    digitalWrite(_rw_pin, LOW);
328
-  }
329
-  
330
-  if (_displayfunction & LCD_8BITMODE) {
331
-    writeNbits(value,8); 
332
-  } else {
333
-    writeNbits(value>>4,4);
334
-    writeNbits(value,4);
335
-  }
336
-}
337
-
338
-// read  data, with automatic 4/8-bit selection
339
-uint8_t LiquidCrystalRus::recv(uint8_t mode) {
340
-  uint8_t retval;
341
-  digitalWrite(_rs_pin, mode);
342
-
343
-  // if there is a RW pin indicated, set it low to Write
344
-  if (_rw_pin != 255) { 
345
-    digitalWrite(_rw_pin, HIGH);
346
-  }
347
-  
348
-  if (_displayfunction & LCD_8BITMODE) {
349
-    retval = readNbits(8); 
350
-  } else {
351
-    retval = readNbits(4) << 4;
352
-    retval |= readNbits(4);
353
-  }
354
-  return retval;
355
-}
356
-void LiquidCrystalRus::pulseEnable() {
357
-  digitalWrite(_enable_pin, LOW);
358
-  delayMicroseconds(1);    
359
-  digitalWrite(_enable_pin, HIGH);
360
-  delayMicroseconds(1);    // enable pulse must be >450ns
361
-  digitalWrite(_enable_pin, LOW);
362
-  delayMicroseconds(100);   // commands need > 37us to settle
363
-}
364
-
365
-void LiquidCrystalRus::writeNbits(uint8_t value, uint8_t n) {
366
-  for (int i = 0; i < n; i++) {
367
-    pinMode(_data_pins[i], OUTPUT);
368
-    digitalWrite(_data_pins[i], (value >> i) & 0x01);
369
-  }
370
-
371
-  pulseEnable();
372
-}
373
-
374
-uint8_t LiquidCrystalRus::readNbits(uint8_t n) {
375
-  uint8_t retval=0;
376
-  for (int i = 0; i < n; i++) {
377
-    pinMode(_data_pins[i], INPUT);
378
-  }
379
-
380
-  digitalWrite(_enable_pin, LOW);
381
-  delayMicroseconds(1);    
382
-  digitalWrite(_enable_pin, HIGH);
383
-  delayMicroseconds(1);    // enable pulse must be >450ns
384
-  
385
-  for (int i = 0; i < n; i++) {
386
-    retval |= (digitalRead(_data_pins[i]) == HIGH)?(1 << i):0;
387
-  }
388
-
389
-  digitalWrite(_enable_pin, LOW);
390
-
391
-  return retval;
392
-}
393
-

+ 0
- 129
Marlin/LiquidCrystalRus.h View File

@@ -1,129 +0,0 @@
1
-//
2
-// based on LiquidCrystal library from ArduinoIDE, see http://arduino.cc
3
-//  modified 27 Jul 2011
4
-// by Ilya V. Danilov http://mk90.ru/
5
-// 
6
-
7
-#ifndef LiquidCrystalRus_h
8
-#define LiquidCrystalRus_h
9
-
10
-#include <inttypes.h>
11
-#include "Print.h"
12
-
13
-// commands
14
-#define LCD_CLEARDISPLAY 0x01
15
-#define LCD_RETURNHOME 0x02
16
-#define LCD_ENTRYMODESET 0x04
17
-#define LCD_DISPLAYCONTROL 0x08
18
-#define LCD_CURSORSHIFT 0x10
19
-#define LCD_FUNCTIONSET 0x20
20
-#define LCD_SETCGRAMADDR 0x40
21
-#define LCD_SETDDRAMADDR 0x80
22
-
23
-// flags for display entry mode
24
-#define LCD_ENTRYRIGHT 0x00
25
-#define LCD_ENTRYLEFT 0x02
26
-#define LCD_ENTRYSHIFTINCREMENT 0x01
27
-#define LCD_ENTRYSHIFTDECREMENT 0x00
28
-
29
-// flags for display on/off control
30
-#define LCD_DISPLAYON 0x04
31
-#define LCD_DISPLAYOFF 0x00
32
-#define LCD_CURSORON 0x02
33
-#define LCD_CURSOROFF 0x00
34
-#define LCD_BLINKON 0x01
35
-#define LCD_BLINKOFF 0x00
36
-
37
-// flags for display/cursor shift
38
-#define LCD_DISPLAYMOVE 0x08
39
-#define LCD_CURSORMOVE 0x00
40
-#define LCD_MOVERIGHT 0x04
41
-#define LCD_MOVELEFT 0x00
42
-
43
-// flags for function set
44
-#define LCD_8BITMODE 0x10
45
-#define LCD_4BITMODE 0x00
46
-#define LCD_2LINE 0x08
47
-#define LCD_1LINE 0x00
48
-#define LCD_5x10DOTS 0x04
49
-#define LCD_5x8DOTS 0x00
50
-
51
-// enum for 
52
-#define LCD_DRAM_Normal 0x00
53
-#define LCD_DRAM_WH1601 0x01
54
-
55
-
56
-class LiquidCrystalRus : public Print {
57
-public:
58
-  LiquidCrystalRus(uint8_t rs, uint8_t enable,
59
-		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
60
-		uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
61
-  LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable,
62
-		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
63
-		uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
64
-  LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable,
65
-		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
66
-  LiquidCrystalRus(uint8_t rs, uint8_t enable,
67
-		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
68
-
69
-  void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
70
-	    uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
71
-	    uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
72
-    
73
-  void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
74
-
75
-  void clear();
76
-  void home();
77
-
78
-  void noDisplay();
79
-  void display();
80
-  void noBlink();
81
-  void blink();
82
-  void noCursor();
83
-  void cursor();
84
-  void scrollDisplayLeft();
85
-  void scrollDisplayRight();
86
-  void leftToRight();
87
-  void rightToLeft();
88
-  void autoscroll();
89
-  void noAutoscroll();
90
-
91
-  void createChar(uint8_t, uint8_t[]);
92
-  void setCursor(uint8_t, uint8_t);
93
- 
94
-#if defined(ARDUINO) && ARDUINO >= 100
95
-  virtual size_t write(uint8_t);
96
-  using Print::write;
97
-#else
98
-  virtual void write(uint8_t);
99
-#endif
100
-
101
-  void command(uint8_t);
102
-
103
-  void setDRAMModel(uint8_t);
104
-
105
-private:
106
-  void send(uint8_t, uint8_t);
107
-  void writeNbits(uint8_t, uint8_t);
108
-  uint8_t recv(uint8_t);
109
-  uint8_t readNbits(uint8_t); 
110
-  void pulseEnable();
111
-
112
-  uint8_t _rs_pin; // LOW: command.  HIGH: character.
113
-  uint8_t _rw_pin; // LOW: write to LCD.  HIGH: read from LCD.
114
-  uint8_t _enable_pin; // activated by a HIGH pulse.
115
-  uint8_t _data_pins[8];
116
-
117
-  uint8_t _displayfunction;
118
-  uint8_t _displaycontrol;
119
-  uint8_t _displaymode;
120
-
121
-  uint8_t _initialized;
122
-
123
-  uint8_t _numlines,_currline;
124
-
125
-  uint8_t _dram_model;
126
-  uint8_t utf_hi_char; // UTF-8 high part
127
-};
128
-
129
-#endif

+ 3
- 1
Marlin/Marlin.h View File

@@ -251,7 +251,9 @@ extern float z_endstop_adj;
251 251
 extern float min_pos[3];
252 252
 extern float max_pos[3];
253 253
 extern bool axis_known_position[3];
254
-extern float zprobe_zoffset;
254
+#ifdef ENABLE_AUTO_BED_LEVELING
255
+  extern float zprobe_zoffset;
256
+#endif
255 257
 extern int fanSpeed;
256 258
 #ifdef BARICUDA
257 259
   extern int ValvePressure;

+ 167
- 166
Marlin/Marlin_main.cpp View File

@@ -203,7 +203,8 @@
203 203
 
204 204
 float homing_feedrate[] = HOMING_FEEDRATE;
205 205
 #ifdef ENABLE_AUTO_BED_LEVELING
206
-int xy_travel_speed = XY_TRAVEL_SPEED;
206
+  int xy_travel_speed = XY_TRAVEL_SPEED;
207
+  float zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER;
207 208
 #endif
208 209
 int homing_bump_divisor[] = HOMING_BUMP_DIVISOR;
209 210
 bool axis_relative_modes[] = AXIS_RELATIVE_MODES;
@@ -255,7 +256,6 @@ float home_offset[3] = { 0, 0, 0 };
255 256
 float min_pos[3] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS };
256 257
 float max_pos[3] = { X_MAX_POS, Y_MAX_POS, Z_MAX_POS };
257 258
 bool axis_known_position[3] = { false, false, false };
258
-float zprobe_zoffset;
259 259
 
260 260
 // Extruder offset
261 261
 #if EXTRUDERS > 1
@@ -1101,9 +1101,6 @@ static void set_bed_level_equation_lsq(double *plane_equation_coefficients)
1101 1101
     current_position[Y_AXIS] = corrected_position.y;
1102 1102
     current_position[Z_AXIS] = corrected_position.z;
1103 1103
 
1104
-    // put the bed at 0 so we don't go below it.
1105
-    current_position[Z_AXIS] = zprobe_zoffset; // in the lsq we reach here after raising the extruder due to the loop structure
1106
-
1107 1104
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1108 1105
 }
1109 1106
 #endif
@@ -1117,11 +1114,13 @@ static void set_bed_level_equation_3pts(float z_at_pt_1, float z_at_pt_2, float
1117 1114
     vector_3 pt1 = vector_3(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, z_at_pt_1);
1118 1115
     vector_3 pt2 = vector_3(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, z_at_pt_2);
1119 1116
     vector_3 pt3 = vector_3(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, z_at_pt_3);
1117
+    vector_3 planeNormal = vector_3::cross(pt1 - pt2, pt3 - pt2).get_normal();
1120 1118
 
1121
-    vector_3 from_2_to_1 = (pt1 - pt2).get_normal();
1122
-    vector_3 from_2_to_3 = (pt3 - pt2).get_normal();
1123
-    vector_3 planeNormal = vector_3::cross(from_2_to_1, from_2_to_3).get_normal();
1124
-    planeNormal = vector_3(planeNormal.x, planeNormal.y, abs(planeNormal.z));
1119
+    if (planeNormal.z < 0) {
1120
+      planeNormal.x = -planeNormal.x;
1121
+      planeNormal.y = -planeNormal.y;
1122
+      planeNormal.z = -planeNormal.z;
1123
+    }
1125 1124
 
1126 1125
     plan_bed_level_matrix = matrix_3x3::create_look_at(planeNormal);
1127 1126
 
@@ -1130,11 +1129,7 @@ static void set_bed_level_equation_3pts(float z_at_pt_1, float z_at_pt_2, float
1130 1129
     current_position[Y_AXIS] = corrected_position.y;
1131 1130
     current_position[Z_AXIS] = corrected_position.z;
1132 1131
 
1133
-    // put the bed at 0 so we don't go below it.
1134
-    current_position[Z_AXIS] = zprobe_zoffset;
1135
-
1136 1132
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1137
-
1138 1133
 }
1139 1134
 
1140 1135
 #endif // AUTO_BED_LEVELING_GRID
@@ -2017,8 +2012,19 @@ inline void gcode_G28() {
2017 2012
   endstops_hit_on_purpose();
2018 2013
 }
2019 2014
 
2020
-#if defined(MESH_BED_LEVELING)
2015
+#ifdef MESH_BED_LEVELING
2021 2016
 
2017
+  /**
2018
+   * G29: Mesh-based Z-Probe, probes a grid and produces a
2019
+   *      mesh to compensate for variable bed height
2020
+   *
2021
+   * Parameters With MESH_BED_LEVELING:
2022
+   *
2023
+   *  S0 Produce a mesh report
2024
+   *  S1 Start probing mesh points
2025
+   *  S2 Probe the next mesh point
2026
+   *
2027
+   */
2022 2028
   inline void gcode_G29() {
2023 2029
     static int probe_point = -1;
2024 2030
     int state = 0;
@@ -2060,7 +2066,7 @@ inline void gcode_G28() {
2060 2066
     } else if (state == 2) { // Goto next point
2061 2067
 
2062 2068
       if (probe_point < 0) {
2063
-        SERIAL_PROTOCOLPGM("Mesh probing not started.\n");
2069
+        SERIAL_PROTOCOLPGM("Start mesh probing with \"G29 S1\" first.\n");
2064 2070
         return;
2065 2071
       }
2066 2072
       int ix, iy;
@@ -2070,16 +2076,14 @@ inline void gcode_G28() {
2070 2076
       } else {
2071 2077
         ix = (probe_point-1) % MESH_NUM_X_POINTS;
2072 2078
         iy = (probe_point-1) / MESH_NUM_X_POINTS;
2073
-        if (iy&1) { // Zig zag
2074
-          ix = (MESH_NUM_X_POINTS - 1) - ix;
2075
-        }
2079
+        if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // zig-zag
2076 2080
         mbl.set_z(ix, iy, current_position[Z_AXIS]);
2077 2081
         current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
2078 2082
         plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[X_AXIS]/60, active_extruder);
2079 2083
         st_synchronize();
2080 2084
       }
2081
-      if (probe_point == MESH_NUM_X_POINTS*MESH_NUM_Y_POINTS) {
2082
-        SERIAL_PROTOCOLPGM("Mesh done.\n");
2085
+      if (probe_point == MESH_NUM_X_POINTS * MESH_NUM_Y_POINTS) {
2086
+        SERIAL_PROTOCOLPGM("Mesh probing done.\n");
2083 2087
         probe_point = -1;
2084 2088
         mbl.active = 1;
2085 2089
         enquecommands_P(PSTR("G28"));
@@ -2087,9 +2091,7 @@ inline void gcode_G28() {
2087 2091
       }
2088 2092
       ix = probe_point % MESH_NUM_X_POINTS;
2089 2093
       iy = probe_point / MESH_NUM_X_POINTS;
2090
-      if (iy&1) { // Zig zag
2091
-        ix = (MESH_NUM_X_POINTS - 1) - ix;
2092
-      }
2094
+      if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // zig-zag
2093 2095
       current_position[X_AXIS] = mbl.get_x(ix);
2094 2096
       current_position[Y_AXIS] = mbl.get_y(iy);
2095 2097
       plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], homing_feedrate[X_AXIS]/60, active_extruder);
@@ -2098,9 +2100,7 @@ inline void gcode_G28() {
2098 2100
     }
2099 2101
   }
2100 2102
 
2101
-#endif
2102
-
2103
-#ifdef ENABLE_AUTO_BED_LEVELING
2103
+#elif defined(ENABLE_AUTO_BED_LEVELING)
2104 2104
 
2105 2105
   /**
2106 2106
    * G29: Detailed Z-Probe, probes the bed at 3 or more points.
@@ -2116,8 +2116,9 @@ inline void gcode_G28() {
2116 2116
    *
2117 2117
    *  S  Set the XY travel speed between probe points (in mm/min)
2118 2118
    *
2119
-   *  D  Dry-Run mode. Just evaluate the bed Topology - It does not apply or clean the rotation Matrix
2120
-   *     Useful to check the topology after a first run of G29.
2119
+   *  D  Dry-Run mode. Just evaluate the bed Topology - Don't apply
2120
+   *     or clean the rotation Matrix. Useful to check the topology
2121
+   *     after a first run of G29.
2121 2122
    *
2122 2123
    *  V  Set the verbose level (0-4). Example: "G29 V3"
2123 2124
    *
@@ -2164,9 +2165,9 @@ inline void gcode_G28() {
2164 2165
 
2165 2166
     #ifdef AUTO_BED_LEVELING_GRID
2166 2167
 
2167
-    #ifndef DELTA
2168
-      bool do_topography_map = verbose_level > 2 || code_seen('T') || code_seen('t');
2169
-    #endif
2168
+      #ifndef DELTA
2169
+        bool do_topography_map = verbose_level > 2 || code_seen('T') || code_seen('t');
2170
+      #endif
2170 2171
 
2171 2172
       if (verbose_level > 0)
2172 2173
       {
@@ -2223,7 +2224,7 @@ inline void gcode_G28() {
2223 2224
 
2224 2225
     #ifdef Z_PROBE_SLED
2225 2226
       dock_sled(false); // engage (un-dock) the probe
2226
-    #elif defined(Z_PROBE_ALLEN_KEY)
2227
+    #elif defined(Z_PROBE_ALLEN_KEY) //|| defined(SERVO_LEVELING)
2227 2228
       engage_z_probe();
2228 2229
     #endif
2229 2230
 
@@ -2233,19 +2234,18 @@ inline void gcode_G28() {
2233 2234
     {
2234 2235
       #ifdef DELTA
2235 2236
         reset_bed_level();
2236
-      #else
2237
-
2238
-      // make sure the bed_level_rotation_matrix is identity or the planner will get it incorectly
2239
-      //vector_3 corrected_position = plan_get_position_mm();
2240
-      //corrected_position.debug("position before G29");
2241
-      plan_bed_level_matrix.set_to_identity();
2242
-      vector_3 uncorrected_position = plan_get_position();
2243
-//    uncorrected_position.debug("position during G29");
2244
-
2245
-      current_position[X_AXIS] = uncorrected_position.x;
2246
-      current_position[Y_AXIS] = uncorrected_position.y;
2247
-      current_position[Z_AXIS] = uncorrected_position.z;
2248
-      plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2237
+      #else //!DELTA
2238
+
2239
+        // make sure the bed_level_rotation_matrix is identity or the planner will get it incorectly
2240
+        //vector_3 corrected_position = plan_get_position_mm();
2241
+        //corrected_position.debug("position before G29");
2242
+        plan_bed_level_matrix.set_to_identity();
2243
+        vector_3 uncorrected_position = plan_get_position();
2244
+        //uncorrected_position.debug("position during G29");
2245
+        current_position[X_AXIS] = uncorrected_position.x;
2246
+        current_position[Y_AXIS] = uncorrected_position.y;
2247
+        current_position[Z_AXIS] = uncorrected_position.z;
2248
+        plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2249 2249
 
2250 2250
       #endif
2251 2251
     }
@@ -2260,26 +2260,24 @@ inline void gcode_G28() {
2260 2260
       const int xGridSpacing = (right_probe_bed_position - left_probe_bed_position) / (auto_bed_leveling_grid_points-1);
2261 2261
       const int yGridSpacing = (back_probe_bed_position - front_probe_bed_position) / (auto_bed_leveling_grid_points-1);
2262 2262
 
2263
-    #ifndef DELTA
2264
-      // solve the plane equation ax + by + d = z
2265
-      // A is the matrix with rows [x y 1] for all the probed points
2266
-      // B is the vector of the Z positions
2267
-      // the normal vector to the plane is formed by the coefficients of the plane equation in the standard form, which is Vx*x+Vy*y+Vz*z+d = 0
2268
-      // so Vx = -a Vy = -b Vz = 1 (we want the vector facing towards positive Z
2269
-
2270
-      int abl2 = auto_bed_leveling_grid_points * auto_bed_leveling_grid_points;
2271
-
2272
-      double eqnAMatrix[abl2 * 3], // "A" matrix of the linear system of equations
2273
-             eqnBVector[abl2],     // "B" vector of Z points
2274
-             mean = 0.0;
2275
-
2276
-    #else
2277
-      delta_grid_spacing[0] = xGridSpacing;
2278
-      delta_grid_spacing[1] = yGridSpacing;
2279
-
2280
-      float z_offset = Z_PROBE_OFFSET_FROM_EXTRUDER;
2281
-      if (code_seen(axis_codes[Z_AXIS])) z_offset += code_value();
2282
-    #endif
2263
+      #ifdef DELTA
2264
+        delta_grid_spacing[0] = xGridSpacing;
2265
+        delta_grid_spacing[1] = yGridSpacing;
2266
+        float z_offset = Z_PROBE_OFFSET_FROM_EXTRUDER;
2267
+        if (code_seen(axis_codes[Z_AXIS])) z_offset += code_value();
2268
+      #else // !DELTA
2269
+        // solve the plane equation ax + by + d = z
2270
+        // A is the matrix with rows [x y 1] for all the probed points
2271
+        // B is the vector of the Z positions
2272
+        // the normal vector to the plane is formed by the coefficients of the plane equation in the standard form, which is Vx*x+Vy*y+Vz*z+d = 0
2273
+        // so Vx = -a Vy = -b Vz = 1 (we want the vector facing towards positive Z
2274
+
2275
+        int abl2 = auto_bed_leveling_grid_points * auto_bed_leveling_grid_points;
2276
+
2277
+        double eqnAMatrix[abl2 * 3], // "A" matrix of the linear system of equations
2278
+               eqnBVector[abl2],     // "B" vector of Z points
2279
+               mean = 0.0;
2280
+      #endif // !DELTA
2283 2281
 
2284 2282
       int probePointCounter = 0;
2285 2283
       bool zig = true;
@@ -2312,12 +2310,12 @@ inline void gcode_G28() {
2312 2310
           float measured_z,
2313 2311
                 z_before = probePointCounter == 0 ? Z_RAISE_BEFORE_PROBING : current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS;
2314 2312
 
2315
-        #ifdef DELTA
2316
-          // Avoid probing the corners (outside the round or hexagon print surface) on a delta printer.
2317
-          float distance_from_center = sqrt(xProbe*xProbe + yProbe*yProbe);
2318
-          if (distance_from_center > DELTA_PROBABLE_RADIUS)
2319
-            continue;
2320
-        #endif //DELTA
2313
+          #ifdef DELTA
2314
+            // Avoid probing the corners (outside the round or hexagon print surface) on a delta printer.
2315
+            float distance_from_center = sqrt(xProbe*xProbe + yProbe*yProbe);
2316
+            if (distance_from_center > DELTA_PROBABLE_RADIUS)
2317
+              continue;
2318
+          #endif //DELTA
2321 2319
 
2322 2320
           // Enhanced G29 - Do not retract servo between probes
2323 2321
           ProbeAction act;
@@ -2334,16 +2332,16 @@ inline void gcode_G28() {
2334 2332
 
2335 2333
           measured_z = probe_pt(xProbe, yProbe, z_before, act, verbose_level);
2336 2334
 
2337
-        #ifndef DELTA
2338
-          mean += measured_z;
2335
+          #ifndef DELTA
2336
+            mean += measured_z;
2339 2337
 
2340
-          eqnBVector[probePointCounter] = measured_z;
2341
-          eqnAMatrix[probePointCounter + 0 * abl2] = xProbe;
2342
-          eqnAMatrix[probePointCounter + 1 * abl2] = yProbe;
2343
-          eqnAMatrix[probePointCounter + 2 * abl2] = 1;
2344
-        #else
2345
-          bed_level[xCount][yCount] = measured_z + z_offset;
2346
-        #endif
2338
+            eqnBVector[probePointCounter] = measured_z;
2339
+            eqnAMatrix[probePointCounter + 0 * abl2] = xProbe;
2340
+            eqnAMatrix[probePointCounter + 1 * abl2] = yProbe;
2341
+            eqnAMatrix[probePointCounter + 2 * abl2] = 1;
2342
+          #else
2343
+            bed_level[xCount][yCount] = measured_z + z_offset;
2344
+          #endif
2347 2345
 
2348 2346
           probePointCounter++;
2349 2347
         } //xProbe
@@ -2351,60 +2349,64 @@ inline void gcode_G28() {
2351 2349
 
2352 2350
       clean_up_after_endstop_move();
2353 2351
 
2354
-    #ifndef DELTA
2355
-      // solve lsq problem
2356
-      double *plane_equation_coefficients = qr_solve(abl2, 3, eqnAMatrix, eqnBVector);
2357
-
2358
-      mean /= abl2;
2359
-
2360
-      if (verbose_level) {
2361
-        SERIAL_PROTOCOLPGM("Eqn coefficients: a: ");
2362
-        SERIAL_PROTOCOL_F(plane_equation_coefficients[0], 8);
2363
-        SERIAL_PROTOCOLPGM(" b: ");
2364
-        SERIAL_PROTOCOL_F(plane_equation_coefficients[1], 8);
2365
-        SERIAL_PROTOCOLPGM(" d: ");
2366
-        SERIAL_PROTOCOL_F(plane_equation_coefficients[2], 8);
2367
-        SERIAL_EOL;
2368
-        if (verbose_level > 2) {
2369
-          SERIAL_PROTOCOLPGM("Mean of sampled points: ");
2370
-          SERIAL_PROTOCOL_F(mean, 8);
2352
+      #ifdef DELTA
2353
+
2354
+        if (!dryrun) extrapolate_unprobed_bed_level();
2355
+        print_bed_level();
2356
+
2357
+      #else // !DELTA
2358
+
2359
+        // solve lsq problem
2360
+        double *plane_equation_coefficients = qr_solve(abl2, 3, eqnAMatrix, eqnBVector);
2361
+
2362
+        mean /= abl2;
2363
+
2364
+        if (verbose_level) {
2365
+          SERIAL_PROTOCOLPGM("Eqn coefficients: a: ");
2366
+          SERIAL_PROTOCOL_F(plane_equation_coefficients[0], 8);
2367
+          SERIAL_PROTOCOLPGM(" b: ");
2368
+          SERIAL_PROTOCOL_F(plane_equation_coefficients[1], 8);
2369
+          SERIAL_PROTOCOLPGM(" d: ");
2370
+          SERIAL_PROTOCOL_F(plane_equation_coefficients[2], 8);
2371 2371
           SERIAL_EOL;
2372
+          if (verbose_level > 2) {
2373
+            SERIAL_PROTOCOLPGM("Mean of sampled points: ");
2374
+            SERIAL_PROTOCOL_F(mean, 8);
2375
+            SERIAL_EOL;
2376
+          }
2372 2377
         }
2373
-      }
2374 2378
 
2375
-      // Show the Topography map if enabled
2376
-      if (do_topography_map) {
2377
-
2378
-        SERIAL_PROTOCOLPGM(" \nBed Height Topography: \n");
2379
-        SERIAL_PROTOCOLPGM("+-----------+\n");
2380
-        SERIAL_PROTOCOLPGM("|...Back....|\n");
2381
-        SERIAL_PROTOCOLPGM("|Left..Right|\n");
2382
-        SERIAL_PROTOCOLPGM("|...Front...|\n");
2383
-        SERIAL_PROTOCOLPGM("+-----------+\n");
2384
-
2385
-        for (int yy = auto_bed_leveling_grid_points - 1; yy >= 0; yy--) {
2386
-          for (int xx = 0; xx < auto_bed_leveling_grid_points; xx++) {
2387
-            int ind = yy * auto_bed_leveling_grid_points + xx;
2388
-            float diff = eqnBVector[ind] - mean;
2389
-            if (diff >= 0.0)
2390
-              SERIAL_PROTOCOLPGM(" +");   // Include + for column alignment
2391
-            else
2392
-              SERIAL_PROTOCOLPGM(" ");
2393
-            SERIAL_PROTOCOL_F(diff, 5);
2394
-          } // xx
2379
+        // Show the Topography map if enabled
2380
+        if (do_topography_map) {
2381
+
2382
+          SERIAL_PROTOCOLPGM(" \nBed Height Topography: \n");
2383
+          SERIAL_PROTOCOLPGM("+-----------+\n");
2384
+          SERIAL_PROTOCOLPGM("|...Back....|\n");
2385
+          SERIAL_PROTOCOLPGM("|Left..Right|\n");
2386
+          SERIAL_PROTOCOLPGM("|...Front...|\n");
2387
+          SERIAL_PROTOCOLPGM("+-----------+\n");
2388
+
2389
+          for (int yy = auto_bed_leveling_grid_points - 1; yy >= 0; yy--) {
2390
+            for (int xx = 0; xx < auto_bed_leveling_grid_points; xx++) {
2391
+              int ind = yy * auto_bed_leveling_grid_points + xx;
2392
+              float diff = eqnBVector[ind] - mean;
2393
+              if (diff >= 0.0)
2394
+                SERIAL_PROTOCOLPGM(" +");   // Include + for column alignment
2395
+              else
2396
+                SERIAL_PROTOCOLPGM(" ");
2397
+              SERIAL_PROTOCOL_F(diff, 5);
2398
+            } // xx
2399
+            SERIAL_EOL;
2400
+          } // yy
2395 2401
           SERIAL_EOL;
2396
-        } // yy
2397
-        SERIAL_EOL;
2398 2402
 
2399
-      } //do_topography_map
2403
+        } //do_topography_map
2400 2404
 
2401 2405
 
2402
-      if (!dryrun) set_bed_level_equation_lsq(plane_equation_coefficients);
2403
-      free(plane_equation_coefficients);
2404
-    #else //Delta
2405
-      if (!dryrun) extrapolate_unprobed_bed_level();
2406
-      print_bed_level();
2407
-    #endif //Delta
2406
+        if (!dryrun) set_bed_level_equation_lsq(plane_equation_coefficients);
2407
+        free(plane_equation_coefficients);
2408
+
2409
+      #endif //!DELTA
2408 2410
 
2409 2411
     #else // !AUTO_BED_LEVELING_GRID
2410 2412
 
@@ -2427,36 +2429,37 @@ inline void gcode_G28() {
2427 2429
 
2428 2430
     #endif // !AUTO_BED_LEVELING_GRID
2429 2431
 
2430
-  #ifndef DELTA
2431
-    if (verbose_level > 0) plan_bed_level_matrix.debug(" \n\nBed Level Correction Matrix:");
2432
+    #ifndef DELTA
2433
+      if (verbose_level > 0)
2434
+        plan_bed_level_matrix.debug(" \n\nBed Level Correction Matrix:");
2432 2435
 
2433
-    // Correct the Z height difference from z-probe position and hotend tip position.
2434
-    // The Z height on homing is measured by Z-Probe, but the probe is quite far from the hotend.
2435
-    // When the bed is uneven, this height must be corrected.
2436
-    if (!dryrun)
2437
-    {
2438
-      float x_tmp, y_tmp, z_tmp, real_z;
2439
-      real_z = float(st_get_position(Z_AXIS)) / axis_steps_per_unit[Z_AXIS];  //get the real Z (since the auto bed leveling is already correcting the plane)
2440
-      x_tmp = current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER;
2441
-      y_tmp = current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER;
2442
-      z_tmp = current_position[Z_AXIS];
2443
-
2444
-      apply_rotation_xyz(plan_bed_level_matrix, x_tmp, y_tmp, z_tmp);         //Apply the correction sending the probe offset
2445
-      current_position[Z_AXIS] = z_tmp - real_z + current_position[Z_AXIS];   //The difference is added to current position and sent to planner.
2446
-      plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2447
-    }
2448
-  #endif
2436
+      // Correct the Z height difference from z-probe position and hotend tip position.
2437
+      // The Z height on homing is measured by Z-Probe, but the probe is quite far from the hotend.
2438
+      // When the bed is uneven, this height must be corrected.
2439
+      if (!dryrun)
2440
+      {
2441
+        float x_tmp, y_tmp, z_tmp, real_z;
2442
+        real_z = float(st_get_position(Z_AXIS)) / axis_steps_per_unit[Z_AXIS];  //get the real Z (since the auto bed leveling is already correcting the plane)
2443
+        x_tmp = current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER;
2444
+        y_tmp = current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER;
2445
+        z_tmp = current_position[Z_AXIS];
2446
+
2447
+        apply_rotation_xyz(plan_bed_level_matrix, x_tmp, y_tmp, z_tmp);         //Apply the correction sending the probe offset
2448
+        current_position[Z_AXIS] = z_tmp - real_z + current_position[Z_AXIS];   //The difference is added to current position and sent to planner.
2449
+        plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2450
+      }
2451
+    #endif // !DELTA
2449 2452
 
2450
-  #ifdef Z_PROBE_SLED
2451
-    dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel
2452
-  #elif defined(Z_PROBE_ALLEN_KEY)
2453
-    retract_z_probe();
2454
-  #endif
2455
-    
2456
-  #ifdef Z_PROBE_END_SCRIPT
2457
-    enquecommands_P(PSTR(Z_PROBE_END_SCRIPT));
2458
-    st_synchronize();
2459
-  #endif
2453
+    #ifdef Z_PROBE_SLED
2454
+      dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel
2455
+    #elif defined(Z_PROBE_ALLEN_KEY) //|| defined(SERVO_LEVELING)
2456
+      retract_z_probe();
2457
+    #endif
2458
+
2459
+    #ifdef Z_PROBE_END_SCRIPT
2460
+      enquecommands_P(PSTR(Z_PROBE_END_SCRIPT));
2461
+      st_synchronize();
2462
+    #endif
2460 2463
   }
2461 2464
 
2462 2465
   #ifndef Z_PROBE_SLED
@@ -2919,7 +2922,7 @@ inline void gcode_M42() {
2919 2922
       do_blocking_move_to( X_probe_location, Y_probe_location, Z_start_location); // Make sure we are at the probe location
2920 2923
 
2921 2924
       if (n_legs) {
2922
-        double radius=0.0, theta=0.0, x_sweep, y_sweep;
2925
+        double radius=0.0, theta=0.0;
2923 2926
         int l;
2924 2927
         int rotational_direction = (unsigned long) millis() & 0x0001;     // clockwise or counter clockwise
2925 2928
         radius = (unsigned long)millis() % (long)(X_MAX_LENGTH / 4);      // limit how far out to go
@@ -5182,18 +5185,16 @@ void ClearToSend()
5182 5185
   SERIAL_PROTOCOLLNPGM(MSG_OK);
5183 5186
 }
5184 5187
 
5185
-void get_coordinates()
5186
-{
5187
-  for(int8_t i=0; i < NUM_AXIS; i++) {
5188
-    if(code_seen(axis_codes[i]))
5189
-    {
5190
-      destination[i] = (float)code_value() + (axis_relative_modes[i] || relative_mode)*current_position[i];
5191
-    }
5192
-    else destination[i] = current_position[i]; //Are these else lines really needed?
5188
+void get_coordinates() {
5189
+  for (int i = 0; i < NUM_AXIS; i++) {
5190
+    if (code_seen(axis_codes[i]))
5191
+      destination[i] = code_value() + (axis_relative_modes[i] || relative_mode ? current_position[i] : 0);
5192
+    else
5193
+      destination[i] = current_position[i];
5193 5194
   }
5194
-  if(code_seen('F')) {
5195
+  if (code_seen('F')) {
5195 5196
     next_feedrate = code_value();
5196
-    if(next_feedrate > 0.0) feedrate = next_feedrate;
5197
+    if (next_feedrate > 0.0) feedrate = next_feedrate;
5197 5198
   }
5198 5199
 }
5199 5200
 

+ 4
- 4
Marlin/SanityCheck.h View File

@@ -104,13 +104,13 @@
104 104
 
105 105
       // Make sure probing points are reachable
106 106
       #if LEFT_PROBE_BED_POSITION < MIN_PROBE_X
107
-        #error The given LEFT_PROBE_BED_POSITION can not be reached by the probe.
107
+        #error "The given LEFT_PROBE_BED_POSITION can't be reached by the probe."
108 108
       #elif RIGHT_PROBE_BED_POSITION > MAX_PROBE_X
109
-        #error The given RIGHT_PROBE_BED_POSITION can not be reached by the probe.
109
+        #error "The given RIGHT_PROBE_BED_POSITION can't be reached by the probe."
110 110
       #elif FRONT_PROBE_BED_POSITION < MIN_PROBE_Y
111
-        #error The given FRONT_PROBE_BED_POSITION can not be reached by the probe.
111
+        #error "The given FRONT_PROBE_BED_POSITION can't be reached by the probe."
112 112
       #elif BACK_PROBE_BED_POSITION > MAX_PROBE_Y
113
-        #error The given BACK_PROBE_BED_POSITION can not be reached by the probe.
113
+        #error "The given BACK_PROBE_BED_POSITION can't be reached by the probe."
114 114
       #endif
115 115
 
116 116
       #define PROBE_SIZE_X (X_PROBE_OFFSET_FROM_EXTRUDER * (AUTO_BED_LEVELING_GRID_POINTS-1))

+ 5
- 3
Marlin/configurator/config/Configuration.h View File

@@ -569,9 +569,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
569 569
 // Custom M code points
570 570
 #define CUSTOM_M_CODES
571 571
 #ifdef CUSTOM_M_CODES
572
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
573
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
574
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
572
+  #ifdef ENABLE_AUTO_BED_LEVELING
573
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
574
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
575
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
576
+  #endif
575 577
 #endif
576 578
 
577 579
 // @section extras

+ 157
- 0
Marlin/dogm_font_data_6x9_marlin.h View File

@@ -0,0 +1,157 @@
1
+/*
2
+  Fontname: -Misc-Fixed-Medium-R-Normal--9-90-75-75-C-60-ISO10646-1
3
+  Copyright: Public domain font.  Share and enjoy.
4
+  Capital A Height: 6, '1' Height: 6
5
+  Calculated Max Values w= 6 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 7 len= 9
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-2 dx= 0 dy= 0
8
+  Pure Font   ascent = 6 descent=-2
9
+  X Font      ascent = 6 descent=-2
10
+  Max Font    ascent = 7 descent=-2
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t u8g_font_6x9[2300] U8G_SECTION(".progmem.u8g_font_6x9") = {
14
+  0,6,9,0,254,6,1,137,2,254,32,255,254,7,254,6,
15
+  254,0,0,0,6,0,7,1,6,6,6,2,0,128,128,128,
16
+  128,0,128,3,3,3,6,1,3,160,160,160,5,7,7,6,
17
+  0,255,80,80,248,80,248,80,80,5,9,9,6,0,254,32,
18
+  112,168,160,112,40,168,112,32,6,8,8,6,0,255,64,168,
19
+  72,16,32,72,84,8,5,7,7,6,0,255,96,144,144,96,
20
+  152,144,104,1,3,3,6,2,3,128,128,128,2,7,7,6,
21
+  2,255,64,128,128,128,128,128,64,2,7,7,6,2,255,128,
22
+  64,64,64,64,64,128,5,5,5,6,0,0,136,80,248,80,
23
+  136,5,5,5,6,0,0,32,32,248,32,32,2,4,4,6,
24
+  2,254,192,64,64,128,5,1,1,6,0,2,248,2,2,2,
25
+  6,2,0,192,192,4,6,6,6,1,0,16,16,32,64,128,
26
+  128,4,6,6,6,1,0,96,144,144,144,144,96,3,6,6,
27
+  6,1,0,64,192,64,64,64,224,4,6,6,6,1,0,96,
28
+  144,16,32,64,240,4,6,6,6,1,0,240,32,96,16,16,
29
+  224,5,6,6,6,0,0,16,48,80,144,248,16,4,6,6,
30
+  6,1,0,240,128,224,16,16,224,4,6,6,6,1,0,96,
31
+  128,224,144,144,96,4,6,6,6,1,0,240,16,16,32,64,
32
+  64,4,6,6,6,1,0,96,144,96,144,144,96,4,6,6,
33
+  6,1,0,96,144,144,112,16,96,2,5,5,6,2,0,192,
34
+  192,0,192,192,2,7,7,6,2,254,192,192,0,192,64,64,
35
+  128,5,5,5,6,0,0,24,96,128,96,24,5,3,3,6,
36
+  0,1,248,0,248,5,5,5,6,0,0,192,48,8,48,192,
37
+  4,7,7,6,1,0,96,144,16,96,64,0,64,5,6,6,
38
+  6,0,0,112,144,168,176,128,112,5,6,6,6,0,0,32,
39
+  80,136,248,136,136,5,6,6,6,0,0,240,136,240,136,136,
40
+  240,4,6,6,6,1,0,96,144,128,128,144,96,4,6,6,
41
+  6,1,0,224,144,144,144,144,224,4,6,6,6,1,0,240,
42
+  128,224,128,128,240,4,6,6,6,1,0,240,128,224,128,128,
43
+  128,4,6,6,6,1,0,96,144,128,176,144,96,4,6,6,
44
+  6,1,0,144,144,240,144,144,144,3,6,6,6,1,0,224,
45
+  64,64,64,64,224,5,6,6,6,0,0,56,16,16,16,144,
46
+  96,4,6,6,6,1,0,144,160,192,160,144,144,4,6,6,
47
+  6,1,0,128,128,128,128,128,240,5,6,6,6,0,0,136,
48
+  216,168,168,136,136,4,6,6,6,1,0,144,208,176,144,144,
49
+  144,5,6,6,6,0,0,112,136,136,136,136,112,4,6,6,
50
+  6,1,0,224,144,144,224,128,128,4,7,7,6,1,255,96,
51
+  144,144,208,176,96,16,4,6,6,6,1,0,224,144,144,224,
52
+  144,144,4,6,6,6,1,0,96,144,64,32,144,96,5,6,
53
+  6,6,0,0,248,32,32,32,32,32,4,6,6,6,1,0,
54
+  144,144,144,144,144,96,4,6,6,6,1,0,144,144,144,240,
55
+  96,96,5,6,6,6,0,0,136,136,168,168,216,136,5,6,
56
+  6,6,0,0,136,80,32,32,80,136,5,6,6,6,0,0,
57
+  136,136,80,32,32,32,4,6,6,6,1,0,240,16,32,64,
58
+  128,240,3,6,6,6,1,0,224,128,128,128,128,224,4,6,
59
+  6,6,1,0,128,128,64,32,16,16,3,6,6,6,1,0,
60
+  224,32,32,32,32,224,5,3,3,6,0,3,32,80,136,5,
61
+  1,1,6,0,254,248,2,2,2,6,2,4,128,64,4,4,
62
+  4,6,1,0,112,144,144,112,4,6,6,6,1,0,128,128,
63
+  224,144,144,224,4,4,4,6,1,0,112,128,128,112,4,6,
64
+  6,6,1,0,16,16,112,144,144,112,4,4,4,6,1,0,
65
+  96,176,192,112,4,6,6,6,1,0,32,80,64,224,64,64,
66
+  4,6,6,6,1,254,96,144,144,112,16,96,4,6,6,6,
67
+  1,0,128,128,224,144,144,144,3,6,6,6,1,0,64,0,
68
+  192,64,64,224,3,8,8,6,1,254,32,0,96,32,32,32,
69
+  160,64,4,6,6,6,1,0,128,128,160,192,160,144,3,6,
70
+  6,6,1,0,192,64,64,64,64,224,5,4,4,6,0,0,
71
+  208,168,168,136,4,4,4,6,1,0,224,144,144,144,4,4,
72
+  4,6,1,0,96,144,144,96,4,6,6,6,1,254,224,144,
73
+  144,224,128,128,4,6,6,6,1,254,112,144,144,112,16,16,
74
+  4,4,4,6,1,0,160,208,128,128,4,4,4,6,1,0,
75
+  112,192,48,224,4,6,6,6,1,0,64,64,224,64,80,32,
76
+  4,4,4,6,1,0,144,144,144,112,4,4,4,6,1,0,
77
+  144,144,96,96,5,4,4,6,0,0,136,168,168,80,4,4,
78
+  4,6,1,0,144,96,96,144,4,6,6,6,1,254,144,144,
79
+  144,112,144,96,4,4,4,6,1,0,240,32,64,240,3,7,
80
+  7,6,1,0,32,64,64,128,64,64,32,1,7,7,6,2,
81
+  255,128,128,128,128,128,128,128,3,7,7,6,1,0,128,64,
82
+  64,32,64,64,128,4,2,2,6,1,3,80,160,255,255,255,
83
+  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
84
+  255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,
85
+  0,6,0,7,1,6,6,6,2,0,128,0,128,128,128,128,
86
+  4,6,6,6,1,255,32,112,160,160,112,32,5,7,7,6,
87
+  0,255,48,72,64,240,64,64,248,5,5,5,6,0,0,168,
88
+  80,136,80,168,5,6,6,6,0,0,136,80,248,32,248,32,
89
+  1,7,7,6,2,255,128,128,128,0,128,128,128,4,7,7,
90
+  6,1,255,112,128,96,144,96,16,224,3,1,1,6,1,5,
91
+  160,6,7,7,6,0,0,120,132,148,164,148,132,120,3,5,
92
+  5,6,1,1,96,160,96,0,224,5,5,5,6,0,0,40,
93
+  80,160,80,40,4,3,3,6,1,0,240,16,16,4,1,1,
94
+  6,1,2,240,6,7,7,6,0,0,120,132,180,164,164,132,
95
+  120,4,1,1,6,1,5,240,4,3,3,6,1,2,96,144,
96
+  96,5,7,7,6,0,255,32,32,248,32,32,0,248,3,5,
97
+  5,6,1,1,64,160,32,64,224,3,5,5,6,1,1,192,
98
+  32,64,32,192,2,2,2,6,2,4,64,128,4,5,5,6,
99
+  1,255,144,144,176,208,128,5,6,6,6,0,0,120,232,232,
100
+  104,40,40,1,1,1,6,2,2,128,2,2,2,6,2,254,
101
+  64,128,3,5,5,6,1,1,64,192,64,64,224,3,5,5,
102
+  6,1,1,64,160,64,0,224,5,5,5,6,0,0,160,80,
103
+  40,80,160,5,8,8,6,0,255,64,192,64,80,112,48,120,
104
+  16,5,8,8,6,0,255,64,192,64,80,104,8,16,56,5,
105
+  8,8,6,0,255,192,32,64,48,240,48,120,16,4,7,7,
106
+  6,1,0,32,0,32,96,128,144,96,5,7,7,6,0,0,
107
+  64,32,32,80,112,136,136,5,7,7,6,0,0,16,32,32,
108
+  80,112,136,136,5,7,7,6,0,0,32,80,32,80,112,136,
109
+  136,5,7,7,6,0,0,40,80,32,80,112,136,136,5,7,
110
+  7,6,0,0,80,0,32,80,112,136,136,5,7,7,6,0,
111
+  0,32,80,32,80,112,136,136,5,6,6,6,0,0,120,160,
112
+  240,160,160,184,4,8,8,6,1,254,96,144,128,128,144,96,
113
+  32,64,4,7,7,6,1,0,64,32,240,128,224,128,240,4,
114
+  7,7,6,1,0,32,64,240,128,224,128,240,4,7,7,6,
115
+  1,0,32,80,240,128,224,128,240,4,7,7,6,1,0,80,
116
+  0,240,128,224,128,240,3,7,7,6,1,0,128,64,224,64,
117
+  64,64,224,3,7,7,6,1,0,32,64,224,64,64,64,224,
118
+  3,7,7,6,1,0,64,160,224,64,64,64,224,3,7,7,
119
+  6,1,0,160,0,224,64,64,64,224,5,6,6,6,0,0,
120
+  112,72,232,72,72,112,4,7,7,6,1,0,80,160,144,208,
121
+  176,144,144,4,7,7,6,1,0,64,32,96,144,144,144,96,
122
+  4,7,7,6,1,0,32,64,96,144,144,144,96,4,7,7,
123
+  6,1,0,32,80,96,144,144,144,96,4,7,7,6,1,0,
124
+  80,160,96,144,144,144,96,4,7,7,6,1,0,80,0,96,
125
+  144,144,144,96,5,5,5,6,0,0,136,80,32,80,136,4,
126
+  8,8,6,1,255,16,112,176,176,208,208,224,128,4,7,7,
127
+  6,1,0,64,32,144,144,144,144,96,4,7,7,6,1,0,
128
+  32,64,144,144,144,144,96,4,7,7,6,1,0,32,80,144,
129
+  144,144,144,96,4,7,7,6,1,0,80,0,144,144,144,144,
130
+  96,5,7,7,6,0,0,16,32,136,80,32,32,32,4,6,
131
+  6,6,1,0,128,224,144,144,224,128,4,6,6,6,1,0,
132
+  96,144,160,160,144,160,4,7,7,6,1,0,64,32,0,112,
133
+  144,144,112,4,7,7,6,1,0,32,64,0,112,144,144,112,
134
+  4,7,7,6,1,0,32,80,0,112,144,144,112,4,7,7,
135
+  6,1,0,80,160,0,112,144,144,112,4,6,6,6,1,0,
136
+  80,0,112,144,144,112,4,7,7,6,1,0,32,80,32,112,
137
+  144,144,112,5,4,4,6,0,0,112,168,176,120,4,6,6,
138
+  6,1,254,112,128,128,112,32,64,4,7,7,6,1,0,64,
139
+  32,0,96,176,192,112,4,7,7,6,1,0,32,64,0,96,
140
+  176,192,112,4,7,7,6,1,0,32,80,0,96,176,192,112,
141
+  4,6,6,6,1,0,80,0,96,176,192,112,3,7,7,6,
142
+  1,0,128,64,0,192,64,64,224,3,7,7,6,1,0,32,
143
+  64,0,192,64,64,224,3,7,7,6,1,0,64,160,0,192,
144
+  64,64,224,3,6,6,6,1,0,160,0,192,64,64,224,4,
145
+  7,7,6,1,0,48,96,16,112,144,144,96,4,7,7,6,
146
+  1,0,80,160,0,224,144,144,144,4,7,7,6,1,0,64,
147
+  32,0,96,144,144,96,4,7,7,6,1,0,32,64,0,96,
148
+  144,144,96,4,7,7,6,1,0,32,80,0,96,144,144,96,
149
+  4,7,7,6,1,0,80,160,0,96,144,144,96,4,6,6,
150
+  6,1,0,80,0,96,144,144,96,5,5,5,6,0,0,32,
151
+  0,248,0,32,4,4,4,6,1,0,112,176,208,224,4,7,
152
+  7,6,1,0,64,32,0,144,144,144,112,4,7,7,6,1,
153
+  0,32,64,0,144,144,144,112,4,7,7,6,1,0,32,80,
154
+  0,144,144,144,112,4,6,6,6,1,0,80,0,144,144,144,
155
+  112,4,9,9,6,1,254,32,64,0,144,144,144,112,144,96,
156
+  4,8,8,6,1,254,128,128,224,144,144,224,128,128,4,8,
157
+  8,6,1,254,80,0,144,144,144,112,144,96};

+ 171
- 0
Marlin/dogm_font_data_HD44780_C.h View File

@@ -0,0 +1,171 @@
1
+/*
2
+  Fontname: HD44780_C v1.2
3
+  Copyright: A. Hardtung, public domain
4
+  Capital A Height: 7, '1' Height: 7
5
+  Calculated Max Values w= 5 h= 8 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 8
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-1 dx= 0 dy= 0
8
+  Pure Font   ascent = 7 descent=-1
9
+  X Font      ascent = 7 descent=-1
10
+  Max Font    ascent = 8 descent=-1
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t HD44780_C_5x7[2522] U8G_SECTION(".progmem.HD44780_C_5x7") = {
14
+  0,6,9,0,254,7,1,145,3,34,32,255,255,8,255,7,
15
+  255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
16
+  128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
17
+  0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
18
+  120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
19
+  64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
20
+  2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
21
+  64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
22
+  32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
23
+  5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
24
+  64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
25
+  192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
26
+  0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64,
27
+  192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
28
+  128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
29
+  5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
30
+  6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
31
+  48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
32
+  32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
33
+  112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5,
34
+  5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
35
+  192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
36
+  32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
37
+  0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
38
+  8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168,
39
+  112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7,
40
+  7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,
41
+  0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144,
42
+  136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128,
43
+  128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5,
44
+  7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6,
45
+  0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128,
46
+  128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16,
47
+  16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136,
48
+  5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7,
49
+  6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0,
50
+  136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136,
51
+  136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128,
52
+  128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7,
53
+  7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0,
54
+  0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32,
55
+  32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136,
56
+  136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5,
57
+  7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6,
58
+  0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136,
59
+  136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32,
60
+  64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224,
61
+  5,7,7,6,0,0,32,112,160,160,168,112,32,3,7,7,
62
+  6,1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,
63
+  32,80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,
64
+  128,64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,
65
+  6,0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,
66
+  112,128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,
67
+  136,120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,
68
+  6,0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,
69
+  112,136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,
70
+  136,136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,
71
+  3,8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,
72
+  7,6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,
73
+  0,192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,
74
+  168,168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,
75
+  5,6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,
76
+  136,136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,
77
+  8,5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,
78
+  0,0,112,128,112,8,240,5,7,7,6,0,0,64,64,224,
79
+  64,64,72,48,5,5,5,6,0,0,136,136,136,152,104,5,
80
+  5,5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,
81
+  136,136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,
82
+  5,6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,
83
+  0,0,248,16,32,64,248,5,5,5,6,0,2,184,168,168,
84
+  168,184,5,5,5,6,0,2,184,136,184,160,184,5,5,5,
85
+  6,0,2,184,160,184,136,184,5,6,6,6,0,1,8,40,
86
+  72,248,64,32,5,5,5,6,0,0,56,112,224,136,240,0,
87
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
88
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
89
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
90
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
91
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
92
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
93
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
94
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
95
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
96
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
97
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
98
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,5,
99
+  7,7,6,0,0,248,136,128,240,136,136,240,5,7,7,6,
100
+  0,0,248,136,128,128,128,128,128,5,7,7,6,0,0,80,
101
+  0,248,128,240,128,248,5,7,7,6,0,0,168,168,168,112,
102
+  168,168,168,5,7,7,6,0,0,240,8,8,112,8,8,240,
103
+  5,7,7,6,0,0,136,136,152,168,200,136,136,5,8,8,
104
+  6,0,0,80,32,136,152,168,168,200,136,5,7,7,6,0,
105
+  0,120,40,40,40,40,168,72,5,7,7,6,0,0,248,136,
106
+  136,136,136,136,136,5,7,7,6,0,0,136,136,136,80,32,
107
+  64,128,5,7,7,6,0,0,32,112,168,168,168,112,32,5,
108
+  7,7,6,0,0,136,136,136,120,8,8,8,5,7,7,6,
109
+  0,0,168,168,168,168,168,168,248,5,7,7,6,0,0,192,
110
+  64,64,112,72,72,112,5,7,7,6,0,0,136,136,136,200,
111
+  168,168,200,5,7,7,6,0,0,112,136,8,56,8,136,112,
112
+  5,7,7,6,0,0,144,168,168,232,168,168,144,5,7,7,
113
+  6,0,0,120,136,136,120,40,72,136,5,7,7,6,0,0,
114
+  24,96,128,240,136,136,112,4,5,5,6,0,0,224,144,224,
115
+  144,224,5,5,5,6,0,0,248,136,128,128,128,5,7,7,
116
+  6,0,0,80,0,112,136,248,128,112,5,5,5,6,0,0,
117
+  168,168,112,168,168,5,5,5,6,0,0,240,8,48,8,240,
118
+  5,5,5,6,0,0,136,152,168,200,136,5,7,7,6,0,
119
+  0,80,32,136,152,168,200,136,4,5,5,6,0,0,144,160,
120
+  192,160,144,5,5,5,6,0,0,248,40,40,168,72,5,5,
121
+  5,6,0,0,136,216,168,136,136,5,5,5,6,0,0,136,
122
+  136,248,136,136,5,5,5,6,0,0,248,136,136,136,136,5,
123
+  5,5,6,0,0,248,32,32,32,32,5,5,5,6,0,0,
124
+  136,136,120,8,8,5,5,5,6,0,0,168,168,168,168,248,
125
+  5,5,5,6,0,0,192,64,112,72,112,5,5,5,6,0,
126
+  0,136,136,200,168,200,4,5,5,6,0,0,128,128,224,144,
127
+  224,5,5,5,6,0,0,112,136,56,136,112,5,5,5,6,
128
+  0,0,144,168,232,168,144,5,5,5,6,0,0,120,136,120,
129
+  40,72,5,5,5,6,0,1,32,72,144,72,32,5,5,5,
130
+  6,0,1,32,144,72,144,32,5,3,3,6,0,0,72,144,
131
+  216,5,3,3,6,0,4,216,72,144,5,7,7,6,0,0,
132
+  144,208,176,144,56,40,56,5,7,7,6,0,0,32,0,32,
133
+  64,128,136,112,5,7,7,6,0,0,24,32,32,112,32,32,
134
+  192,5,7,7,6,0,0,32,80,64,240,64,64,120,1,2,
135
+  2,6,2,0,128,128,1,4,4,6,2,0,128,128,128,128,
136
+  3,5,5,6,1,0,160,160,160,0,224,3,5,5,6,1,
137
+  0,160,160,160,0,160,5,7,7,6,0,0,160,0,232,16,
138
+  32,64,128,5,5,5,6,0,1,216,112,32,112,216,5,7,
139
+  7,6,0,0,160,64,168,16,32,64,128,3,6,6,6,1,
140
+  1,224,64,64,64,64,224,5,6,6,6,0,1,248,80,80,
141
+  80,80,248,5,7,7,6,0,0,32,112,168,32,32,32,32,
142
+  5,7,7,6,0,0,32,32,32,32,168,112,32,5,7,7,
143
+  6,0,0,128,144,176,248,176,144,128,5,7,7,6,0,0,
144
+  8,72,104,248,104,72,8,5,7,7,6,0,0,128,136,168,
145
+  248,168,136,128,5,7,7,6,0,0,128,224,136,16,32,64,
146
+  128,2,2,2,6,2,2,192,192,5,8,8,6,0,255,120,
147
+  40,40,40,72,136,248,136,5,8,8,6,0,255,136,136,136,
148
+  136,136,136,248,8,5,8,8,6,0,255,168,168,168,168,168,
149
+  168,248,8,5,6,6,6,0,255,120,40,72,136,248,136,5,
150
+  7,7,6,0,255,32,32,112,168,168,112,32,5,6,6,6,
151
+  0,255,136,136,136,136,248,8,5,6,6,6,0,255,168,168,
152
+  168,168,248,8,2,2,2,6,2,6,64,128,3,1,1,6,
153
+  1,7,160,5,2,2,6,0,6,72,176,5,8,8,6,0,
154
+  0,16,32,0,112,136,248,128,112,5,6,6,6,0,255,112,
155
+  128,136,112,32,96,3,7,7,6,1,0,160,0,160,160,160,
156
+  32,192,5,6,6,6,0,1,32,112,112,112,248,32,5,5,
157
+  5,6,0,1,80,0,136,0,80,5,5,5,6,0,1,112,
158
+  136,136,136,112,5,7,7,6,0,0,136,144,168,88,184,8,
159
+  8,5,7,7,6,0,0,136,144,184,72,184,8,56,5,7,
160
+  7,6,0,0,136,144,184,72,152,32,56,5,8,8,6,0,
161
+  0,192,64,192,72,216,56,8,8,5,7,7,6,0,0,136,
162
+  248,136,248,136,248,136,4,5,5,6,0,2,192,0,48,0,
163
+  96,5,8,8,6,0,0,64,160,224,168,8,40,120,32,5,
164
+  8,8,6,0,0,64,112,64,120,64,112,64,224,5,8,8,
165
+  6,0,0,32,112,32,248,32,112,32,112,5,7,7,6,0,
166
+  0,104,0,232,0,104,16,56,5,8,8,6,0,0,16,112,
167
+  16,240,16,112,16,56,5,7,7,6,0,1,32,112,32,248,
168
+  32,112,32,5,8,8,6,0,0,16,144,80,48,80,144,16,
169
+  56,5,8,8,6,0,0,48,72,32,80,80,32,144,96,5,
170
+  7,7,6,0,0,120,168,168,120,40,40,40,5,8,8,6,
171
+  0,0,248,248,248,248,248,248,248,248};

+ 169
- 0
Marlin/dogm_font_data_HD44780_J.h View File

@@ -0,0 +1,169 @@
1
+/*
2
+  Fontname: HD44780_J
3
+  Copyright: A. Hardtung, public domain
4
+  Capital A Height: 7, '1' Height: 7
5
+  Calculated Max Values w= 6 h=10 x= 2 y= 8 dx= 6 dy= 0 ascent= 8 len= 8
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-2 dx= 0 dy= 0
8
+  Pure Font   ascent = 7 descent=-1
9
+  X Font      ascent = 7 descent=-1
10
+  Max Font    ascent = 8 descent=-2
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t HD44780_J_5x7[2491] U8G_SECTION(".progmem.HD44780_J_5x7") = {
14
+  0,6,9,0,254,7,1,145,3,34,32,255,255,8,254,7,
15
+  255,0,0,0,6,0,8,1,7,7,6,2,0,128,128,128,
16
+  128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
17
+  0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
18
+  120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
19
+  64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
20
+  2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
21
+  64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
22
+  32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
23
+  5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
24
+  64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
25
+  192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
26
+  0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64,
27
+  192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
28
+  128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
29
+  5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
30
+  6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
31
+  48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
32
+  32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
33
+  112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5,
34
+  5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
35
+  192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
36
+  32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
37
+  0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
38
+  8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168,
39
+  112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7,
40
+  7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,
41
+  0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144,
42
+  136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128,
43
+  128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5,
44
+  7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6,
45
+  0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128,
46
+  128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16,
47
+  16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136,
48
+  5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7,
49
+  6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0,
50
+  136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136,
51
+  136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128,
52
+  128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7,
53
+  7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0,
54
+  0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32,
55
+  32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136,
56
+  136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5,
57
+  7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6,
58
+  0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136,
59
+  136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32,
60
+  64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224,
61
+  5,7,7,6,0,0,136,80,248,32,248,32,32,3,7,7,
62
+  6,1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,
63
+  32,80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,
64
+  128,64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,
65
+  6,0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,
66
+  112,128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,
67
+  136,120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,
68
+  6,0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,
69
+  112,136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,
70
+  136,136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,
71
+  3,8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,
72
+  7,6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,
73
+  0,192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,
74
+  168,168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,
75
+  5,6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,
76
+  136,136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,
77
+  8,5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,
78
+  0,0,112,128,112,8,240,5,7,7,6,0,0,64,64,224,
79
+  64,64,72,48,5,5,5,6,0,0,136,136,136,152,104,5,
80
+  5,5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,
81
+  136,136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,
82
+  5,6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,
83
+  0,0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,
84
+  128,64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,
85
+  128,3,7,7,6,1,0,128,64,64,32,64,64,128,5,5,
86
+  5,6,0,1,32,16,248,16,32,5,5,5,6,0,1,32,
87
+  64,248,64,32,0,0,0,6,0,8,0,0,0,6,0,8,
88
+  0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6,
89
+  0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0,
90
+  0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8,
91
+  0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6,
92
+  0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0,
93
+  0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8,
94
+  0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6,
95
+  0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0,
96
+  0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8,
97
+  0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6,
98
+  0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0,
99
+  0,6,0,8,0,0,0,6,0,8,3,3,3,6,0,0,
100
+  224,160,224,3,4,4,6,2,3,224,128,128,128,3,4,4,
101
+  6,0,0,32,32,32,224,3,3,3,6,0,0,128,64,32,
102
+  2,2,2,6,1,2,192,192,5,6,6,6,0,0,248,8,
103
+  248,8,16,32,5,5,5,6,0,0,248,8,48,32,64,4,
104
+  5,5,6,0,0,16,32,96,160,32,5,5,5,6,0,0,
105
+  32,248,136,8,48,5,4,4,6,0,0,248,32,32,248,5,
106
+  5,5,6,0,0,16,248,48,80,144,5,5,5,6,0,0,
107
+  64,248,72,80,64,5,4,4,6,0,0,112,16,16,248,4,
108
+  5,5,6,0,0,240,16,240,16,240,5,4,4,6,0,0,
109
+  168,168,8,48,5,1,1,6,0,4,248,5,7,7,6,0,
110
+  0,248,8,40,48,32,32,64,5,7,7,6,0,0,8,16,
111
+  32,96,160,32,32,5,7,7,6,0,0,32,248,136,136,8,
112
+  16,32,5,6,6,6,0,0,248,32,32,32,32,248,5,7,
113
+  7,6,0,0,16,248,16,48,80,144,16,5,7,7,6,0,
114
+  0,64,248,72,72,72,72,144,5,7,7,6,0,0,32,248,
115
+  32,248,32,32,32,5,6,6,6,0,0,120,72,136,8,16,
116
+  96,5,7,7,6,0,0,64,120,144,16,16,16,32,5,6,
117
+  6,6,0,0,248,8,8,8,8,248,5,7,7,6,0,0,
118
+  80,248,80,80,16,32,64,5,6,6,6,0,0,192,8,200,
119
+  8,16,224,5,6,6,6,0,0,248,8,16,32,80,136,5,
120
+  7,7,6,0,0,64,248,72,80,64,64,56,5,6,6,6,
121
+  0,0,136,136,72,8,16,96,5,6,6,6,0,0,120,72,
122
+  168,24,16,96,5,7,7,6,0,0,16,224,32,248,32,32,
123
+  64,5,6,6,6,0,0,168,168,168,8,16,32,5,7,7,
124
+  6,0,0,112,0,248,32,32,32,64,3,7,7,6,1,0,
125
+  128,128,128,192,160,128,128,5,7,7,6,0,0,32,32,248,
126
+  32,32,64,128,5,6,6,6,0,0,112,0,0,0,0,248,
127
+  5,6,6,6,0,0,248,8,80,32,80,128,5,6,6,6,
128
+  0,1,32,248,16,32,112,168,3,7,7,6,1,0,32,32,
129
+  32,32,32,64,128,5,6,6,6,0,0,32,16,136,136,136,
130
+  136,5,7,7,6,0,0,128,128,248,128,128,128,120,5,6,
131
+  6,6,0,0,248,8,8,8,16,96,5,5,5,6,0,1,
132
+  64,160,16,8,8,5,7,7,6,0,0,32,248,32,32,168,
133
+  168,32,5,6,6,6,0,0,248,8,8,80,32,16,4,6,
134
+  6,6,1,0,224,0,224,0,224,16,5,6,6,6,0,0,
135
+  32,64,128,136,248,8,5,6,6,6,0,0,8,8,80,32,
136
+  80,128,5,6,6,6,0,0,248,64,248,64,64,56,5,7,
137
+  7,6,0,0,64,64,248,72,80,64,64,5,7,7,6,0,
138
+  0,112,16,16,16,16,16,248,5,6,6,6,0,0,248,8,
139
+  248,8,8,248,5,7,7,6,0,0,112,0,248,8,8,16,
140
+  32,4,7,7,6,0,0,144,144,144,144,16,32,64,5,6,
141
+  6,6,0,0,32,160,160,168,168,176,5,7,7,6,0,0,
142
+  128,128,128,136,144,160,192,5,6,6,6,0,0,248,136,136,
143
+  136,136,248,5,6,6,6,0,0,248,136,136,8,16,32,5,
144
+  6,6,6,0,0,192,0,8,8,16,224,4,3,3,6,0,
145
+  4,32,144,64,3,3,3,6,0,4,224,160,224,5,5,5,
146
+  6,0,1,72,168,144,144,104,5,7,7,6,0,0,80,0,
147
+  112,8,120,136,120,4,8,8,6,1,255,96,144,144,224,144,
148
+  144,224,128,5,5,5,6,0,0,112,128,96,136,112,5,6,
149
+  6,6,0,255,136,136,152,232,136,128,5,5,5,6,0,0,
150
+  120,160,144,136,112,5,7,7,6,0,254,48,72,136,136,240,
151
+  128,128,5,8,8,6,0,254,120,136,136,136,120,8,8,112,
152
+  5,5,5,6,0,1,56,32,32,160,64,4,3,3,6,0,
153
+  3,16,208,16,4,8,8,6,0,255,16,0,48,16,16,16,
154
+  144,96,3,3,3,6,0,4,160,64,160,5,7,7,6,0,
155
+  0,32,112,160,160,168,112,32,5,7,7,6,0,0,64,64,
156
+  224,64,224,64,120,5,7,7,6,0,0,112,0,176,200,136,
157
+  136,136,5,7,7,6,0,0,80,0,112,136,136,136,112,5,
158
+  7,7,6,0,255,176,200,136,136,240,128,128,5,7,7,6,
159
+  0,255,104,152,136,136,120,8,8,5,6,6,6,0,0,112,
160
+  136,248,136,136,112,5,3,3,6,0,2,88,168,208,5,5,
161
+  5,6,0,0,112,136,136,80,216,5,7,7,6,0,0,80,
162
+  0,136,136,136,152,104,5,7,7,6,0,0,248,128,64,32,
163
+  64,128,248,5,5,5,6,0,0,248,80,80,80,152,5,7,
164
+  7,6,0,0,248,0,136,80,32,80,136,5,7,7,6,0,
165
+  255,136,136,136,136,120,8,112,5,6,6,6,0,1,8,240,
166
+  32,248,32,32,5,5,5,6,0,0,248,64,120,72,136,5,
167
+  5,5,6,0,0,248,168,248,136,136,5,5,5,6,0,1,
168
+  32,0,248,0,32,0,0,0,6,0,8,6,10,10,6,0,
169
+  254,252,252,252,252,252,252,252,252,252,252};

+ 203
- 0
Marlin/dogm_font_data_HD44780_W.h View File

@@ -0,0 +1,203 @@
1
+/*
2
+  Fontname: HD44780_W
3
+  Copyright: A.Hardtung, public domain
4
+  Capital A Height: 7, '1' Height: 7
5
+  Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-1 dx= 0 dy= 0
8
+  Pure Font   ascent = 7 descent=-1
9
+  X Font      ascent = 7 descent=-1
10
+  Max Font    ascent = 8 descent=-1
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t HD44780_W_5x7[3034] U8G_SECTION(".progmem.HD44780_W_5x7") = {
14
+  0,6,9,0,254,7,2,79,3,222,16,255,255,8,255,7,
15
+  255,4,7,7,6,0,0,16,48,112,240,112,48,16,4,7,
16
+  7,6,1,0,128,192,224,240,224,192,128,5,3,3,6,0,
17
+  4,216,72,144,5,3,3,6,0,4,216,144,72,5,7,7,
18
+  6,0,0,32,112,248,0,32,112,248,5,7,7,6,0,0,
19
+  248,112,32,0,248,112,32,5,5,5,6,0,1,112,248,248,
20
+  248,112,5,7,7,6,0,0,8,8,40,72,248,64,32,5,
21
+  7,7,6,0,0,32,112,168,32,32,32,32,5,7,7,6,
22
+  0,0,32,32,32,32,168,112,32,5,5,5,6,0,1,32,
23
+  64,248,64,32,5,5,5,6,0,1,32,16,248,16,32,5,
24
+  7,7,6,0,0,16,32,64,32,16,0,248,5,7,7,6,
25
+  0,0,64,32,16,32,64,0,248,5,5,5,6,0,1,32,
26
+  32,112,112,248,5,5,5,6,0,0,248,112,112,32,32,0,
27
+  0,0,6,0,0,1,7,7,6,2,0,128,128,128,128,128,
28
+  0,128,3,2,2,6,1,5,160,160,5,7,7,6,0,0,
29
+  80,80,248,80,248,80,80,5,7,7,6,0,0,32,120,160,
30
+  112,40,240,32,5,7,7,6,0,0,192,200,16,32,64,152,
31
+  24,5,7,7,6,0,0,96,144,160,64,168,144,104,2,3,
32
+  3,6,1,4,192,64,128,3,7,7,6,1,0,32,64,128,
33
+  128,128,64,32,3,7,7,6,1,0,128,64,32,32,32,64,
34
+  128,5,5,5,6,0,1,32,168,112,168,32,5,5,5,6,
35
+  0,1,32,32,248,32,32,2,3,3,6,2,255,192,64,128,
36
+  5,1,1,6,0,3,248,2,2,2,6,2,0,192,192,5,
37
+  5,5,6,0,1,8,16,32,64,128,5,7,7,6,0,0,
38
+  112,136,152,168,200,136,112,3,7,7,6,1,0,64,192,64,
39
+  64,64,64,224,5,7,7,6,0,0,112,136,8,112,128,128,
40
+  248,5,7,7,6,0,0,248,16,32,16,8,8,240,5,7,
41
+  7,6,0,0,16,48,80,144,248,16,16,5,7,7,6,0,
42
+  0,248,128,240,8,8,136,112,5,7,7,6,0,0,48,64,
43
+  128,240,136,136,112,5,7,7,6,0,0,248,8,16,32,32,
44
+  32,32,5,7,7,6,0,0,112,136,136,112,136,136,112,5,
45
+  7,7,6,0,0,112,136,136,120,8,16,96,2,5,5,6,
46
+  2,0,192,192,0,192,192,2,6,6,6,2,255,192,192,0,
47
+  192,64,128,4,7,7,6,0,0,16,32,64,128,64,32,16,
48
+  5,3,3,6,0,2,248,0,248,4,7,7,6,1,0,128,
49
+  64,32,16,32,64,128,5,7,7,6,0,0,112,136,8,16,
50
+  32,0,32,5,6,6,6,0,0,112,136,8,104,168,112,5,
51
+  7,7,6,0,0,112,136,136,248,136,136,136,5,7,7,6,
52
+  0,0,240,136,136,240,136,136,240,5,7,7,6,0,0,112,
53
+  136,128,128,128,136,112,5,7,7,6,0,0,224,144,136,136,
54
+  136,144,224,5,7,7,6,0,0,248,128,128,240,128,128,248,
55
+  5,7,7,6,0,0,248,128,128,240,128,128,128,5,7,7,
56
+  6,0,0,112,136,128,184,136,136,112,5,7,7,6,0,0,
57
+  136,136,136,248,136,136,136,1,7,7,6,2,0,128,128,128,
58
+  128,128,128,128,5,7,7,6,0,0,56,16,16,16,16,144,
59
+  96,5,7,7,6,0,0,136,144,160,192,160,144,136,5,7,
60
+  7,6,0,0,128,128,128,128,128,128,248,5,7,7,6,0,
61
+  0,136,216,168,136,136,136,136,5,7,7,6,0,0,136,136,
62
+  200,168,152,136,136,5,7,7,6,0,0,112,136,136,136,136,
63
+  136,112,5,7,7,6,0,0,240,136,136,240,128,128,128,5,
64
+  7,7,6,0,0,112,136,136,136,168,144,104,5,7,7,6,
65
+  0,0,240,136,136,240,160,144,136,5,7,7,6,0,0,120,
66
+  128,128,112,8,8,240,5,7,7,6,0,0,248,32,32,32,
67
+  32,32,32,5,7,7,6,0,0,136,136,136,136,136,136,112,
68
+  5,7,7,6,0,0,136,136,136,136,136,80,32,5,7,7,
69
+  6,0,0,136,136,136,136,136,168,80,5,7,7,6,0,0,
70
+  136,136,80,32,80,136,136,5,7,7,6,0,0,136,136,136,
71
+  80,32,32,32,5,7,7,6,0,0,248,8,16,32,64,128,
72
+  248,3,7,7,6,1,0,224,128,128,128,128,128,224,5,5,
73
+  5,6,0,1,128,64,32,16,8,3,7,7,6,1,0,224,
74
+  32,32,32,32,32,224,5,3,3,6,0,4,32,80,136,5,
75
+  1,1,6,0,0,248,2,2,2,6,2,5,128,64,5,5,
76
+  5,6,0,0,112,8,120,136,120,5,7,7,6,0,0,128,
77
+  128,176,200,136,136,240,5,5,5,6,0,0,112,128,128,136,
78
+  112,5,7,7,6,0,0,8,8,104,152,136,136,120,5,5,
79
+  5,6,0,0,112,136,248,128,112,5,7,7,6,0,0,48,
80
+  72,224,64,64,64,64,5,6,6,6,0,255,112,136,136,120,
81
+  8,112,5,7,7,6,0,0,128,128,176,200,136,136,136,1,
82
+  7,7,6,2,0,128,0,128,128,128,128,128,3,8,8,6,
83
+  1,255,32,0,32,32,32,32,160,64,4,7,7,6,0,0,
84
+  128,128,144,160,192,160,144,3,7,7,6,1,0,192,64,64,
85
+  64,64,64,224,5,5,5,6,0,0,208,168,168,168,168,5,
86
+  5,5,6,0,0,176,200,136,136,136,5,5,5,6,0,0,
87
+  112,136,136,136,112,5,6,6,6,0,255,240,136,136,240,128,
88
+  128,5,6,6,6,0,255,120,136,136,120,8,8,5,5,5,
89
+  6,0,0,176,200,128,128,128,5,5,5,6,0,0,112,128,
90
+  112,8,240,5,7,7,6,0,0,64,64,224,64,64,72,48,
91
+  5,5,5,6,0,0,136,136,136,152,104,5,5,5,6,0,
92
+  0,136,136,136,80,32,5,5,5,6,0,0,136,136,168,168,
93
+  80,5,5,5,6,0,0,136,80,32,80,136,5,6,6,6,
94
+  0,255,136,136,136,120,8,112,5,5,5,6,0,0,248,16,
95
+  32,64,248,3,7,7,6,1,0,32,64,64,128,64,64,32,
96
+  1,7,7,6,2,0,128,128,128,128,128,128,128,3,7,7,
97
+  6,1,0,128,64,64,32,64,64,128,5,6,6,6,0,1,
98
+  8,40,72,248,64,32,5,7,7,6,0,0,32,80,136,136,
99
+  136,136,248,5,7,7,6,0,0,248,136,128,240,136,136,240,
100
+  5,8,8,6,0,255,120,40,40,40,72,136,248,136,5,7,
101
+  7,6,0,0,168,168,168,112,168,168,168,5,7,7,6,0,
102
+  0,240,8,8,112,8,8,240,5,7,7,6,0,0,136,136,
103
+  152,168,200,136,136,5,8,8,6,0,0,80,32,136,152,168,
104
+  168,200,136,5,7,7,6,0,0,120,40,40,40,40,168,72,
105
+  5,7,7,6,0,0,248,136,136,136,136,136,136,5,7,7,
106
+  6,0,0,136,136,136,80,32,64,128,5,8,8,6,0,255,
107
+  136,136,136,136,136,136,248,8,5,7,7,6,0,0,136,136,
108
+  136,120,8,8,8,5,7,7,6,0,0,168,168,168,168,168,
109
+  168,248,5,8,8,6,0,255,168,168,168,168,168,168,248,8,
110
+  5,7,7,6,0,0,192,64,64,112,72,72,112,5,7,7,
111
+  6,0,0,136,136,136,200,168,168,200,5,7,7,6,0,0,
112
+  112,136,40,80,8,136,112,5,5,5,6,0,0,64,160,144,
113
+  144,104,5,7,7,6,0,0,32,48,40,40,32,224,224,5,
114
+  7,7,6,0,0,248,136,128,128,128,128,128,5,5,5,6,
115
+  0,0,248,80,80,80,152,5,7,7,6,0,0,248,128,64,
116
+  32,64,128,248,5,5,5,6,0,0,120,144,144,144,96,5,
117
+  7,7,6,0,0,48,40,56,40,200,216,24,5,6,6,6,
118
+  0,0,8,112,160,32,32,16,5,6,6,6,0,1,32,112,
119
+  112,112,248,32,5,7,7,6,0,0,112,136,136,248,136,136,
120
+  112,5,5,5,6,0,0,112,136,136,80,216,5,7,7,6,
121
+  0,0,48,72,32,80,136,136,112,5,3,3,6,0,2,88,
122
+  168,208,5,6,6,6,0,0,80,248,248,248,112,32,5,5,
123
+  5,6,0,0,112,128,96,136,112,5,7,7,6,0,0,112,
124
+  136,136,136,136,136,136,5,7,7,6,0,0,216,216,216,216,
125
+  216,216,216,1,7,7,6,2,0,128,0,128,128,128,128,128,
126
+  5,7,7,6,0,0,32,112,160,160,168,112,32,5,7,7,
127
+  6,0,0,48,64,64,224,64,80,168,5,5,5,6,0,0,
128
+  136,112,80,112,136,5,7,7,6,0,0,136,80,248,32,248,
129
+  32,32,1,7,7,6,2,0,128,128,128,0,128,128,128,5,
130
+  8,8,6,0,0,48,72,32,80,80,32,144,96,5,7,7,
131
+  6,0,0,24,32,32,112,32,32,192,5,7,7,6,0,0,
132
+  248,136,184,184,184,136,248,5,7,7,6,0,0,112,8,120,
133
+  136,120,0,248,5,5,5,6,0,1,40,80,160,80,40,5,
134
+  7,7,6,0,0,144,168,168,232,168,168,144,5,7,7,6,
135
+  0,0,120,136,136,120,40,72,136,5,7,7,6,0,0,248,
136
+  136,168,136,152,168,248,2,3,3,6,2,4,64,128,192,4,
137
+  5,5,6,0,3,96,144,144,144,96,5,7,7,6,0,0,
138
+  32,32,248,32,32,0,248,4,5,5,6,0,3,96,144,32,
139
+  64,240,3,5,5,6,0,3,224,32,224,32,224,5,8,8,
140
+  6,0,0,224,144,224,128,144,184,144,24,5,8,8,6,0,
141
+  255,136,136,136,136,152,232,128,128,5,7,7,6,0,0,120,
142
+  152,152,120,24,24,24,2,2,2,6,2,2,192,192,5,5,
143
+  5,6,0,0,80,136,168,168,80,3,5,5,6,0,3,64,
144
+  192,64,64,224,5,7,7,6,0,0,112,136,136,136,112,0,
145
+  248,5,5,5,6,0,1,160,80,40,80,160,5,7,7,6,
146
+  0,0,136,144,168,88,184,8,8,5,7,7,6,0,0,136,
147
+  144,184,72,152,32,56,5,8,8,6,0,0,192,64,192,72,
148
+  216,56,8,8,5,7,7,6,0,0,32,0,32,64,128,136,
149
+  112,5,8,8,6,0,0,64,32,32,80,136,248,136,136,5,
150
+  8,8,6,0,0,16,32,32,80,136,248,136,136,5,8,8,
151
+  6,0,0,32,80,0,112,136,248,136,136,5,8,8,6,0,
152
+  0,104,144,0,112,136,248,136,136,5,8,8,6,0,0,80,
153
+  0,32,80,136,248,136,136,5,8,8,6,0,0,32,80,32,
154
+  112,136,248,136,136,5,7,7,6,0,0,56,96,160,184,224,
155
+  160,184,5,8,8,6,0,255,112,136,128,128,136,112,32,96,
156
+  5,8,8,6,0,0,64,32,0,248,128,240,128,248,5,8,
157
+  8,6,0,0,8,16,0,248,128,240,128,248,5,8,8,6,
158
+  0,0,32,80,0,248,128,240,128,248,5,7,7,6,0,0,
159
+  80,0,248,128,240,128,248,3,8,8,6,1,0,128,64,0,
160
+  224,64,64,64,224,3,8,8,6,1,0,32,64,0,224,64,
161
+  64,64,224,3,8,8,6,1,0,64,160,0,224,64,64,64,
162
+  224,3,7,7,6,1,0,160,0,224,64,64,64,224,5,7,
163
+  7,6,0,0,112,72,72,232,72,72,112,5,8,8,6,0,
164
+  0,104,144,0,136,200,168,152,136,5,8,8,6,0,0,64,
165
+  32,112,136,136,136,136,112,5,8,8,6,0,0,16,32,112,
166
+  136,136,136,136,112,5,8,8,6,0,0,32,80,0,112,136,
167
+  136,136,112,5,8,8,6,0,0,104,144,0,112,136,136,136,
168
+  112,5,8,8,6,0,0,80,0,112,136,136,136,136,112,5,
169
+  5,5,6,0,1,136,80,32,80,136,5,7,7,6,0,0,
170
+  112,32,112,168,112,32,112,5,8,8,6,0,0,64,32,136,
171
+  136,136,136,136,112,5,8,8,6,0,0,16,32,136,136,136,
172
+  136,136,112,5,8,8,6,0,0,32,80,0,136,136,136,136,
173
+  112,5,8,8,6,0,0,80,0,136,136,136,136,136,112,5,
174
+  8,8,6,0,0,16,32,136,80,32,32,32,32,5,8,8,
175
+  6,0,0,192,64,112,72,72,112,64,224,5,7,7,6,0,
176
+  0,48,72,72,112,72,72,176,5,8,8,6,0,0,64,32,
177
+  0,112,8,120,136,120,5,8,8,6,0,0,16,32,0,112,
178
+  8,120,136,120,5,8,8,6,0,0,32,80,0,112,8,120,
179
+  136,120,5,8,8,6,0,0,104,144,0,112,8,120,136,120,
180
+  5,7,7,6,0,0,80,0,112,8,120,136,120,5,8,8,
181
+  6,0,0,32,80,32,112,8,120,136,120,5,6,6,6,0,
182
+  0,208,40,120,160,168,80,5,6,6,6,0,255,112,128,136,
183
+  112,32,96,5,8,8,6,0,0,64,32,0,112,136,248,128,
184
+  112,5,8,8,6,0,0,16,32,0,112,136,248,128,112,5,
185
+  8,8,6,0,0,32,80,0,112,136,248,128,112,5,7,7,
186
+  6,0,0,80,0,112,136,248,128,112,3,8,8,6,1,0,
187
+  128,64,0,64,192,64,64,224,3,8,8,6,1,0,32,64,
188
+  0,64,192,64,64,224,3,8,8,6,1,0,64,160,0,64,
189
+  192,64,64,224,3,7,7,6,1,0,160,0,64,192,64,64,
190
+  224,5,7,7,6,0,0,160,64,160,16,120,136,112,5,8,
191
+  8,6,0,0,104,144,0,176,200,136,136,136,5,8,8,6,
192
+  0,0,64,32,0,112,136,136,136,112,5,8,8,6,0,0,
193
+  16,32,0,112,136,136,136,112,5,8,8,6,0,0,32,80,
194
+  0,112,136,136,136,112,5,8,8,6,0,0,104,144,0,112,
195
+  136,136,136,112,5,7,7,6,0,0,80,0,112,136,136,136,
196
+  112,5,5,5,6,0,1,32,0,248,0,32,5,7,7,6,
197
+  0,0,16,32,112,168,112,32,64,5,8,8,6,0,0,64,
198
+  32,0,136,136,136,152,104,5,8,8,6,0,0,16,32,0,
199
+  136,136,136,152,104,5,8,8,6,0,0,32,80,0,136,136,
200
+  136,152,104,5,7,7,6,0,0,80,0,136,136,136,152,104,
201
+  5,9,9,6,0,255,16,32,0,136,136,136,248,8,112,4,
202
+  7,7,6,1,0,192,64,96,80,96,64,224,5,8,8,6,
203
+  0,255,80,0,136,136,136,248,8,112};

Marlin/dogm_font_data_ISO10646_1_Marlin.h → Marlin/dogm_font_data_ISO10646_1.h View File

@@ -1,17 +1,17 @@
1 1
 /*
2
-  Fontname: ISO10646-1-Marlin
2
+  Fontname: ISO10646-1
3 3
   Copyright: A.Hardtung, public domain
4 4
   Capital A Height: 7, '1' Height: 7
5
-  Calculated Max Values w= 5 h=10 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
5
+  Calculated Max Values w= 5 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
6 6
   Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
-  Calculated Min Values           x= 0 y=-2 dx= 0 dy= 0
7
+  Calculated Min Values           x= 0 y=-1 dx= 0 dy= 0
8 8
   Pure Font   ascent = 7 descent=-1
9 9
   X Font      ascent = 7 descent=-1
10
-  Max Font    ascent = 8 descent=-2
10
+  Max Font    ascent = 8 descent=-1
11 11
 */
12 12
 #include <utility/u8g.h>
13
-const u8g_fntpgm_uint8_t ISO10646_1_Marlin_5x7[2596] U8G_SECTION(".progmem.ISO10646_1_Marlin_5x7") = {
14
-  0,6,9,0,254,7,1,146,3,33,32,255,255,8,254,7,
13
+const u8g_fntpgm_uint8_t ISO10646_1_5x7[2592] U8G_SECTION(".progmem.ISO10646_1_5x7") = {
14
+  0,6,9,0,254,7,1,146,3,33,32,255,255,8,255,7,
15 15
   255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
16 16
   128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
17 17
   0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
@@ -166,11 +166,11 @@ const u8g_fntpgm_uint8_t ISO10646_1_Marlin_5x7[2596] U8G_SECTION(".progmem.ISO10
166 166
   8,6,0,0,32,80,0,112,136,136,136,112,5,8,8,6,
167 167
   0,0,104,144,0,112,136,136,136,112,5,7,7,6,0,0,
168 168
   80,0,112,136,136,136,112,5,5,5,6,0,1,32,0,248,
169
-  0,32,5,8,8,6,0,0,64,240,200,136,136,152,120,16,
170
-  5,8,8,6,0,0,192,248,136,136,136,136,136,248,5,5,
171
-  5,6,0,1,32,48,248,48,32,5,8,8,6,0,0,32,
172
-  112,248,32,32,32,32,224,5,9,9,6,0,255,32,112,168,
173
-  168,184,136,136,112,32,5,9,9,6,0,255,224,128,192,176,
174
-  168,40,48,40,40,5,9,9,6,0,255,248,168,136,136,136,
175
-  136,136,168,248,5,10,10,6,0,254,32,80,80,80,80,136,
176
-  168,168,136,112};
169
+  0,32,5,7,7,6,0,255,16,112,168,168,168,112,64,5,
170
+  8,8,6,0,0,64,32,0,136,136,136,152,104,5,8,8,
171
+  6,0,0,16,32,0,136,136,136,152,104,5,8,8,6,0,
172
+  0,32,80,0,136,136,136,152,104,5,7,7,6,0,0,80,
173
+  0,136,136,136,152,104,5,9,9,6,0,255,16,32,0,136,
174
+  136,136,248,8,112,4,7,7,6,1,255,192,64,96,80,96,
175
+  64,224,5,8,8,6,0,255,80,0,136,136,136,120,8,112
176
+  };

+ 174
- 0
Marlin/dogm_font_data_ISO10646_5_Cyrillic.h View File

@@ -0,0 +1,174 @@
1
+/*
2
+  Fontname: ISO10646_5_Cyrillic
3
+  Copyright: A. Hardtung, public domain
4
+  Capital A Height: 7, '1' Height: 7
5
+  Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-1 dx= 0 dy= 0
8
+  Pure Font   ascent = 7 descent=-1
9
+  X Font      ascent = 7 descent=-1
10
+  Max Font    ascent = 8 descent=-1
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2560] U8G_SECTION(".progmem.ISO10646_5_Cyrillic_5x7") = {
14
+  0,6,9,0,254,7,1,145,3,32,32,255,255,8,255,7,
15
+  255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
16
+  128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
17
+  0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
18
+  120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
19
+  64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
20
+  2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
21
+  64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
22
+  32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
23
+  5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
24
+  64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
25
+  192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
26
+  0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64,
27
+  192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
28
+  128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
29
+  5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
30
+  6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
31
+  48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
32
+  32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
33
+  112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5,
34
+  5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
35
+  192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
36
+  32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
37
+  0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
38
+  8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168,
39
+  112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7,
40
+  7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,
41
+  0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144,
42
+  136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128,
43
+  128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5,
44
+  7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6,
45
+  0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128,
46
+  128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16,
47
+  16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136,
48
+  5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7,
49
+  6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0,
50
+  136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136,
51
+  136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128,
52
+  128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7,
53
+  7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0,
54
+  0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32,
55
+  32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136,
56
+  136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5,
57
+  7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6,
58
+  0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136,
59
+  136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32,
60
+  64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224,
61
+  5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,1,
62
+  0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,80,
63
+  136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,64,
64
+  5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,0,
65
+  0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,128,
66
+  128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,120,
67
+  5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,0,
68
+  0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,136,
69
+  136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,136,
70
+  136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,8,
71
+  8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,6,
72
+  0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,192,
73
+  64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,168,
74
+  168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,6,
75
+  0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,136,
76
+  240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,5,
77
+  5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,0,
78
+  112,128,112,8,240,5,7,7,6,0,0,64,64,224,64,64,
79
+  72,48,5,5,5,6,0,0,136,136,136,152,104,5,5,5,
80
+  6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,136,
81
+  168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,6,
82
+  6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,0,
83
+  248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,64,
84
+  64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,3,
85
+  7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,6,
86
+  0,3,104,144,0,0,0,6,0,0,0,0,0,6,0,0,
87
+  0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
88
+  0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,
89
+  0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,
90
+  0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
91
+  0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,
92
+  0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,
93
+  0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
94
+  0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,
95
+  0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,
96
+  0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
97
+  0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,
98
+  0,6,0,0,0,0,0,6,0,0,5,8,8,6,0,0,
99
+  64,248,128,128,240,128,128,248,5,8,8,6,0,0,80,248,
100
+  128,128,240,128,128,248,5,7,7,6,0,0,224,64,64,112,
101
+  72,72,112,5,8,8,6,0,0,16,32,248,136,128,128,128,
102
+  128,5,7,7,6,0,0,48,72,128,224,128,72,48,5,7,
103
+  7,6,0,0,112,136,128,112,8,136,112,3,7,7,6,1,
104
+  0,224,64,64,64,64,64,224,3,8,8,6,1,0,160,0,
105
+  224,64,64,64,64,224,5,7,7,6,0,0,56,16,16,16,
106
+  16,144,96,5,7,7,6,0,0,160,160,160,184,168,168,184,
107
+  5,7,7,6,0,0,160,160,160,248,168,168,184,4,7,7,
108
+  6,0,0,224,64,112,80,80,80,80,5,8,8,6,0,0,
109
+  16,32,136,144,160,224,144,136,5,8,8,6,0,0,64,32,
110
+  136,152,168,200,136,136,5,9,9,6,0,255,80,32,136,136,
111
+  136,80,32,32,32,5,8,8,6,0,255,136,136,136,136,136,
112
+  136,248,32,5,7,7,6,0,0,112,136,136,248,136,136,136,
113
+  5,7,7,6,0,0,248,128,128,240,136,136,240,5,7,7,
114
+  6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,0,
115
+  248,136,128,128,128,128,128,5,8,8,6,0,255,120,40,40,
116
+  40,72,136,248,136,5,7,7,6,0,0,248,128,128,240,128,
117
+  128,248,5,7,7,6,0,0,168,168,168,112,168,168,168,5,
118
+  7,7,6,0,0,240,8,8,112,8,8,240,5,7,7,6,
119
+  0,0,136,136,152,168,200,136,136,5,8,8,6,0,0,80,
120
+  32,136,152,168,168,200,136,5,7,7,6,0,0,136,144,160,
121
+  192,160,144,136,5,7,7,6,0,0,120,40,40,40,40,168,
122
+  72,5,7,7,6,0,0,136,216,168,136,136,136,136,5,7,
123
+  7,6,0,0,136,136,136,248,136,136,136,5,7,7,6,0,
124
+  0,112,136,136,136,136,136,112,5,7,7,6,0,0,248,136,
125
+  136,136,136,136,136,5,7,7,6,0,0,240,136,136,240,128,
126
+  128,128,5,7,7,6,0,0,112,136,128,128,128,136,112,5,
127
+  7,7,6,0,0,248,32,32,32,32,32,32,5,7,7,6,
128
+  0,0,136,136,136,80,32,64,128,5,7,7,6,0,0,32,
129
+  112,168,168,168,112,32,5,7,7,6,0,0,136,136,80,32,
130
+  80,136,136,5,8,8,6,0,255,136,136,136,136,136,136,248,
131
+  8,5,7,7,6,0,0,136,136,136,152,104,8,8,5,7,
132
+  7,6,0,0,168,168,168,168,168,168,248,5,8,8,6,0,
133
+  255,168,168,168,168,168,168,248,8,5,7,7,6,0,0,192,
134
+  64,64,112,72,72,112,5,7,7,6,0,0,136,136,136,200,
135
+  168,168,200,5,7,7,6,0,0,128,128,128,240,136,136,240,
136
+  5,7,7,6,0,0,112,136,8,56,8,136,112,5,7,7,
137
+  6,0,0,144,168,168,232,168,168,144,5,7,7,6,0,0,
138
+  120,136,136,120,40,72,136,5,5,5,6,0,0,112,8,120,
139
+  136,120,5,7,7,6,0,0,24,96,128,240,136,136,112,4,
140
+  5,5,6,0,0,224,144,224,144,224,5,5,5,6,0,0,
141
+  248,136,128,128,128,5,6,6,6,0,255,120,40,72,136,248,
142
+  136,5,5,5,6,0,0,112,136,248,128,112,5,5,5,6,
143
+  0,0,168,168,112,168,168,5,5,5,6,0,0,240,8,48,
144
+  8,240,5,5,5,6,0,0,136,152,168,200,136,5,7,7,
145
+  6,0,0,80,32,136,152,168,200,136,4,5,5,6,0,0,
146
+  144,160,192,160,144,5,5,5,6,0,0,248,40,40,168,72,
147
+  5,5,5,6,0,0,136,216,168,136,136,5,5,5,6,0,
148
+  0,136,136,248,136,136,5,5,5,6,0,0,112,136,136,136,
149
+  112,5,5,5,6,0,0,248,136,136,136,136,5,6,6,6,
150
+  0,255,240,136,136,240,128,128,5,5,5,6,0,0,112,128,
151
+  128,136,112,5,5,5,6,0,0,248,32,32,32,32,5,6,
152
+  6,6,0,255,136,136,136,120,8,112,5,6,6,6,0,0,
153
+  32,112,168,168,112,32,5,5,5,6,0,0,136,80,32,80,
154
+  136,5,6,6,6,0,255,136,136,136,136,248,8,5,5,5,
155
+  6,0,0,136,136,248,8,8,5,5,5,6,0,0,168,168,
156
+  168,168,248,5,6,6,6,0,255,168,168,168,168,248,8,5,
157
+  5,5,6,0,0,192,64,112,72,112,5,5,5,6,0,0,
158
+  136,136,200,168,200,3,5,5,6,1,0,128,128,192,160,192,
159
+  5,5,5,6,0,0,112,136,56,136,112,5,5,5,6,0,
160
+  0,144,168,232,168,144,5,5,5,6,0,0,120,136,120,40,
161
+  72,5,8,8,6,0,0,64,32,0,112,136,248,128,112,5,
162
+  7,7,6,0,0,80,0,112,136,248,128,112,5,9,9,6,
163
+  0,255,64,224,64,64,120,72,72,72,16,5,8,8,6,0,
164
+  0,16,32,0,248,136,128,128,128,5,5,5,6,0,0,112,
165
+  136,96,136,112,5,5,5,6,0,0,112,128,112,8,240,1,
166
+  7,7,6,2,0,128,0,128,128,128,128,128,3,7,7,6,
167
+  1,0,160,0,64,64,64,64,64,3,8,8,6,1,255,32,
168
+  0,32,32,32,32,160,64,5,5,5,6,0,0,160,160,184,
169
+  168,184,5,5,5,6,0,0,160,160,248,168,184,5,6,6,
170
+  6,0,0,64,224,64,120,72,72,4,8,8,6,0,0,16,
171
+  32,0,144,160,192,160,144,5,8,8,6,0,0,64,32,0,
172
+  136,152,168,200,136,5,9,9,6,0,255,80,32,0,136,136,
173
+  136,120,8,112,5,6,6,6,0,255,136,136,136,136,248,32
174
+  };

+ 173
- 0
Marlin/dogm_font_data_ISO10646_Kana.h View File

@@ -0,0 +1,173 @@
1
+/*
2
+  Fontname: ISO10646_Kana
3
+  Copyright: A. Hardtung, public domain
4
+  Capital A Height: 7, '1' Height: 7
5
+  Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-1 dx= 0 dy= 0
8
+  Pure Font   ascent = 7 descent=-1
9
+  X Font      ascent = 7 descent=-1
10
+  Max Font    ascent = 8 descent=-1
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t ISO10646_Kana_5x7[2549] U8G_SECTION(".progmem.ISO10646_Kana_5x7") = {
14
+  0,6,9,0,254,7,1,145,3,32,32,255,255,8,255,7,
15
+  255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
16
+  128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
17
+  0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
18
+  120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
19
+  64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
20
+  2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
21
+  64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
22
+  32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
23
+  5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
24
+  64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
25
+  192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
26
+  0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64,
27
+  192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
28
+  128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
29
+  5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
30
+  6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
31
+  48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
32
+  32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
33
+  112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5,
34
+  5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
35
+  192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
36
+  32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
37
+  0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
38
+  8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168,
39
+  112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7,
40
+  7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,
41
+  0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144,
42
+  136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128,
43
+  128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5,
44
+  7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6,
45
+  0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128,
46
+  128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16,
47
+  16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136,
48
+  5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7,
49
+  6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0,
50
+  136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136,
51
+  136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128,
52
+  128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7,
53
+  7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0,
54
+  0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32,
55
+  32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136,
56
+  136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5,
57
+  7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6,
58
+  0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136,
59
+  136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32,
60
+  64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224,
61
+  5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,1,
62
+  0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,80,
63
+  136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,64,
64
+  5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,0,
65
+  0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,128,
66
+  128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,120,
67
+  5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,0,
68
+  0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,136,
69
+  136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,136,
70
+  136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,8,
71
+  8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,6,
72
+  0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,192,
73
+  64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,168,
74
+  168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,6,
75
+  0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,136,
76
+  240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,5,
77
+  5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,0,
78
+  112,128,112,8,240,5,7,7,6,0,0,64,64,224,64,64,
79
+  72,48,5,5,5,6,0,0,136,136,136,152,104,5,5,5,
80
+  6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,136,
81
+  168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,6,
82
+  6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,0,
83
+  248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,64,
84
+  64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,3,
85
+  7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,6,
86
+  0,3,104,144,0,0,0,6,0,0,0,0,0,6,0,0,
87
+  0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
88
+  0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,
89
+  0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,
90
+  0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
91
+  0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,
92
+  0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,
93
+  0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
94
+  0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,
95
+  0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,
96
+  0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,
97
+  0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,
98
+  0,6,0,0,0,0,0,6,0,0,5,3,3,6,0,2,
99
+  248,0,248,5,6,6,6,0,0,248,8,40,48,32,64,5,
100
+  7,7,6,0,0,248,8,40,48,32,32,64,4,5,5,6,
101
+  0,0,16,32,96,160,32,5,7,7,6,0,0,8,16,32,
102
+  96,160,32,32,5,5,5,6,0,0,32,248,136,8,48,5,
103
+  7,7,6,0,0,32,248,136,136,8,16,32,5,4,4,6,
104
+  0,0,248,32,32,248,5,6,6,6,0,0,248,32,32,32,
105
+  32,248,5,5,5,6,0,0,16,248,48,80,144,5,7,7,
106
+  6,0,0,16,248,16,48,80,144,16,5,5,5,6,0,0,
107
+  64,248,72,80,64,5,7,7,6,0,0,40,0,64,248,72,
108
+  80,64,5,7,7,6,0,0,32,248,32,248,32,32,32,5,
109
+  8,8,6,0,0,40,0,32,248,32,248,32,32,4,6,6,
110
+  6,0,0,64,112,144,16,16,32,5,8,8,6,0,0,40,
111
+  0,64,112,144,16,16,32,5,6,6,6,0,0,64,120,144,
112
+  16,16,32,5,8,8,6,0,0,40,0,64,120,144,16,16,
113
+  32,5,5,5,6,0,0,248,8,8,8,248,5,7,7,6,
114
+  0,0,40,0,248,8,8,8,248,5,7,7,6,0,255,80,
115
+  248,80,80,16,32,64,5,9,9,6,0,255,40,0,80,248,
116
+  80,80,16,32,64,5,6,6,6,0,0,192,8,200,8,16,
117
+  224,5,8,8,6,0,0,40,0,192,8,200,8,16,224,5,
118
+  6,6,6,0,0,248,8,16,32,80,136,5,8,8,6,0,
119
+  0,40,0,248,8,16,32,80,136,5,6,6,6,0,0,64,
120
+  248,72,80,64,120,5,8,8,6,0,0,40,0,64,248,72,
121
+  80,64,120,4,4,4,6,0,1,16,208,16,224,5,7,7,
122
+  6,0,0,40,0,8,200,8,16,224,5,7,7,6,0,255,
123
+  32,120,136,40,16,40,64,5,9,9,6,0,255,40,0,32,
124
+  120,136,40,16,40,64,5,6,6,6,0,0,240,32,248,32,
125
+  64,128,5,8,8,6,0,0,40,0,240,32,248,32,64,128,
126
+  4,5,5,6,0,1,192,16,208,16,224,5,6,6,6,0,
127
+  0,192,8,200,8,16,224,5,8,8,6,0,0,40,0,192,
128
+  8,200,8,16,224,5,6,6,6,0,0,112,0,248,32,32,
129
+  64,5,8,8,6,0,0,40,0,112,0,248,32,32,64,3,
130
+  7,7,6,1,0,128,128,128,192,160,128,128,4,8,8,6,
131
+  1,0,80,0,128,128,192,160,128,128,5,7,7,6,0,0,
132
+  32,32,248,32,32,64,128,5,6,6,6,0,0,112,0,0,
133
+  0,0,248,5,6,6,6,0,0,248,8,80,32,80,128,5,
134
+  7,7,6,0,255,32,248,8,16,32,112,168,3,7,7,6,
135
+  1,0,32,32,32,32,32,64,128,5,5,5,6,0,0,16,
136
+  136,136,136,136,5,7,7,6,0,0,40,0,16,136,136,136,
137
+  136,5,8,8,6,0,0,24,24,0,16,136,136,136,136,5,
138
+  7,7,6,0,0,128,128,248,128,128,128,120,5,8,8,6,
139
+  0,0,40,128,128,248,128,128,128,120,5,8,8,6,0,0,
140
+  24,152,128,248,128,128,128,120,5,6,6,6,0,0,248,8,
141
+  8,8,16,96,5,8,8,6,0,0,40,0,248,8,8,8,
142
+  16,96,5,8,8,6,0,0,24,24,248,8,8,8,16,96,
143
+  5,5,5,6,0,1,64,160,16,8,8,5,7,7,6,0,
144
+  1,40,0,64,160,16,8,8,5,7,7,6,0,1,24,24,
145
+  64,160,16,8,8,5,6,6,6,0,0,32,248,32,32,168,
146
+  168,5,8,8,6,0,0,40,0,32,248,32,32,168,168,5,
147
+  8,8,6,0,0,24,24,32,248,32,32,168,168,5,6,6,
148
+  6,0,0,248,8,8,80,32,16,4,6,6,6,1,0,224,
149
+  0,224,0,224,16,5,6,6,6,0,0,32,64,128,144,248,
150
+  8,5,6,6,6,0,0,8,8,80,32,80,128,5,6,6,
151
+  6,0,0,120,32,248,32,32,56,5,7,7,6,0,0,64,
152
+  64,248,72,80,64,64,5,7,7,6,0,0,64,248,72,80,
153
+  64,64,64,5,5,5,6,0,0,112,16,16,16,248,5,7,
154
+  7,6,0,0,112,16,16,16,16,16,248,4,5,5,6,1,
155
+  0,240,16,240,16,240,5,7,7,6,0,0,248,8,8,248,
156
+  8,8,248,5,6,6,6,0,0,112,0,248,8,16,32,3,
157
+  6,6,6,1,0,160,160,160,160,32,64,5,6,6,6,0,
158
+  0,80,80,80,80,88,144,4,6,6,6,1,0,128,128,128,
159
+  144,160,192,5,6,6,6,0,0,248,136,136,136,248,136,5,
160
+  5,5,6,0,0,248,136,8,16,96,5,6,6,6,0,0,
161
+  248,136,8,8,16,96,5,6,6,6,0,0,16,248,80,80,
162
+  248,16,5,6,6,6,0,0,248,8,80,96,64,248,5,6,
163
+  6,6,0,0,248,8,248,8,16,32,5,6,6,6,0,0,
164
+  128,64,8,8,16,224,5,8,8,6,0,0,40,0,32,248,
165
+  136,8,24,32,5,6,6,6,0,0,64,248,72,72,136,144,
166
+  4,5,5,6,1,0,128,240,160,32,32,5,8,8,6,0,
167
+  0,40,0,248,136,8,8,16,96,5,8,8,6,0,0,40,
168
+  0,16,248,80,80,248,16,5,7,7,6,0,0,40,0,248,
169
+  16,32,32,248,5,8,8,6,0,0,40,0,248,8,248,8,
170
+  16,32,2,2,2,6,2,2,192,192,5,1,1,6,0,3,
171
+  248,5,5,5,6,0,1,128,64,32,16,8,5,6,6,6,
172
+  0,1,40,128,64,32,16,8,5,7,7,6,0,0,248,8,
173
+  8,8,8,8,8};

+ 22
- 0
Marlin/dogm_font_data_Marlin_symbols.h View File

@@ -0,0 +1,22 @@
1
+/*
2
+  Fontname: Marlin_symbols
3
+  Copyright: Created with Fony 1.4.7
4
+  Capital A Height: 0, '1' Height: 0
5
+  Calculated Max Values w= 5 h=10 x= 0 y= 3 dx= 6 dy= 0 ascent= 8 len=10
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-2 dx= 0 dy= 0
8
+  Pure Font   ascent = 0 descent= 0
9
+  X Font      ascent = 0 descent= 0
10
+  Max Font    ascent = 8 descent=-2
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t Marlin_symbols[140] U8G_SECTION(".progmem.Marlin_symbols") = {
14
+  0,6,9,0,254,0,0,0,0,0,1,9,0,8,254,0,
15
+  0,5,8,8,6,0,0,64,240,200,136,136,152,120,16,5,
16
+  8,8,6,0,0,192,248,136,136,136,136,136,248,5,5,5,
17
+  6,0,1,32,48,248,48,32,5,8,8,6,0,0,32,112,
18
+  248,32,32,32,32,224,5,9,9,6,0,255,32,112,168,168,
19
+  184,136,136,112,32,5,9,9,6,0,255,224,128,192,176,168,
20
+  40,48,40,40,5,9,9,6,0,255,248,168,136,136,136,136,
21
+  136,168,248,5,10,10,6,0,254,32,80,80,80,80,136,168,
22
+  168,136,112,3,3,3,6,0,3,64,160,64};

+ 178
- 98
Marlin/dogm_lcd_implementation.h View File

@@ -14,11 +14,9 @@
14 14
 #ifndef DOGM_LCD_IMPLEMENTATION_H
15 15
 #define DOGM_LCD_IMPLEMENTATION_H
16 16
 
17
-#define MARLIN_VERSION "1.0.2"
18
-
19 17
 /**
20
-* Implementation of the LCD display routines for a DOGM128 graphic display. These are common LCD 128x64 pixel graphic displays.
21
-**/
18
+ * Implementation of the LCD display routines for a DOGM128 graphic display. These are common LCD 128x64 pixel graphic displays.
19
+ */
22 20
 
23 21
 #ifdef ULTIPANEL
24 22
   #define BLEN_A 0
@@ -32,53 +30,99 @@
32 30
 
33 31
 #include <U8glib.h>
34 32
 #include "DOGMbitmaps.h"
35
-#include "dogm_font_data_ISO10646_1_Marlin.h"
33
+
36 34
 #include "ultralcd.h"
37 35
 #include "ultralcd_st7920_u8glib_rrd.h"
36
+#include "Configuration.h"
38 37
 
39
-/* Russian language not supported yet, needs custom font
38
+// save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
39
+// we don't have a big font for Cyrillic, Kana
40
+#if defined( MAPPER_C2C3 ) || defined( MAPPER_NON )
41
+//  #define USE_BIG_EDIT_FONT
42
+#endif
40 43
 
41
-#ifdef LANGUAGE_RU
42
-#include "LiquidCrystalRus.h"
43
-#define LCD_CLASS LiquidCrystalRus
44
+// If you have spare 2300Byte of progmem and want to use a 
45
+// smaller font on the Info-screen uncomment the next line.
46
+//#define USE_SMALL_INFOFONT
47
+#ifdef USE_SMALL_INFOFONT
48
+  #include "dogm_font_data_6x9_marlin.h"
49
+  #define FONT_STATUSMENU_NAME u8g_font_6x9
44 50
 #else
45
-#include <LiquidCrystal.h>
46
-#define LCD_CLASS LiquidCrystal
51
+  #define FONT_STATUSMENU_NAME FONT_MENU_NAME
47 52
 #endif
48
-*/
49 53
 
50
-#define USE_BIG_EDIT_FONT                // save 3120 bytes of PROGMEM by commenting out this line
51
-#define FONT_MENU ISO10646_1_Marlin_5x7
54
+#include "dogm_font_data_Marlin_symbols.h"   // The Marlin special symbols
55
+#define FONT_SPECIAL_NAME Marlin_symbols
56
+
57
+#ifndef SIMULATE_ROMFONT
58
+  #if defined( DISPLAY_CHARSET_ISO10646_1 )
59
+    #include "dogm_font_data_ISO10646_1.h"
60
+    #define FONT_MENU_NAME ISO10646_1_5x7
61
+  #elif defined( DISPLAY_CHARSET_ISO10646_5 )
62
+    #include "dogm_font_data_ISO10646_5_Cyrillic.h"
63
+    #define FONT_MENU_NAME ISO10646_5_Cyrillic_5x7
64
+  #elif defined( DISPLAY_CHARSET_ISO10646_KANA )
65
+    #include "dogm_font_data_ISO10646_Kana.h"
66
+    #define FONT_MENU_NAME ISO10646_Kana_5x7
67
+  #else // fall-back
68
+    #include "dogm_font_data_ISO10646_1.h"
69
+    #define FONT_MENU_NAME ISO10646_1_5x7
70
+  #endif
71
+#else // SIMULATE_ROMFONT
72
+  #if defined( DISPLAY_CHARSET_HD44780_JAPAN )
73
+    #include "dogm_font_data_HD44780_J.h"
74
+    #define FONT_MENU_NAME HD44780_J_5x7
75
+  #elif defined( DISPLAY_CHARSET_HD44780_WESTERN )
76
+    #include "dogm_font_data_HD44780_W.h"
77
+    #define FONT_MENU_NAME HD44780_W_5x7
78
+  #elif defined( DISPLAY_CHARSET_HD44780_CYRILLIC )
79
+    #include "dogm_font_data_HD44780_C.h"
80
+    #define FONT_MENU_NAME HD44780_C_5x7
81
+  #else // fall-back
82
+    #include "dogm_font_data_ISO10646_1.h"
83
+    #define FONT_MENU_NAME ISO10646_1_5x7
84
+  #endif
85
+#endif // SIMULATE_ROMFONT
86
+
87
+//#define FONT_STATUSMENU_NAME FONT_MENU_NAME
88
+
89
+#define FONT_STATUSMENU 1
90
+#define FONT_SPECIAL 2
91
+#define FONT_MENU_EDIT 3
92
+#define FONT_MENU 4
52 93
 
53 94
 // DOGM parameters (size in pixels)
54 95
 #define DOG_CHAR_WIDTH         6
55 96
 #define DOG_CHAR_HEIGHT        12
56 97
 #ifdef USE_BIG_EDIT_FONT
57
-  #define FONT_MENU_EDIT u8g_font_9x18
98
+  #define FONT_MENU_EDIT_NAME u8g_font_9x18
58 99
   #define DOG_CHAR_WIDTH_EDIT  9
59 100
   #define DOG_CHAR_HEIGHT_EDIT 18
60 101
   #define LCD_WIDTH_EDIT       14
61 102
 #else
62
-  #define FONT_MENU_EDIT ISO10646_1_Marlin_5x7
103
+  #define FONT_MENU_EDIT_NAME FONT_MENU_NAME
63 104
   #define DOG_CHAR_WIDTH_EDIT  6
64 105
   #define DOG_CHAR_HEIGHT_EDIT 12
65 106
   #define LCD_WIDTH_EDIT       22
66 107
 #endif
67 108
 
68
-#define FONT_STATUSMENU FONT_MENU
69
-
70 109
 #define START_ROW              0
71 110
 
72
-/* Custom characters defined in font font_6x10_marlin.c */
73
-#define LCD_STR_DEGREE      "\xB0"
74
-#define LCD_STR_REFRESH     "\xF8"
75
-#define LCD_STR_FOLDER      "\xF9"
76
-#define LCD_STR_ARROW_RIGHT "\xFA"
77
-#define LCD_STR_UPLEVEL     "\xFB"
78
-#define LCD_STR_CLOCK       "\xFC"
79
-#define LCD_STR_FEEDRATE    "\xFD"
80
-#define LCD_STR_BEDTEMP     "\xFE"
81
-#define LCD_STR_THERMOMETER "\xFF"
111
+/* Custom characters defined in font font_6x10_marlin_symbols */
112
+// \x00 intentionally skipped to avoid problems in strings
113
+#define LCD_STR_REFRESH     "\x01"
114
+#define LCD_STR_FOLDER      "\x02"
115
+#define LCD_STR_ARROW_RIGHT "\x03"
116
+#define LCD_STR_UPLEVEL     "\x04"
117
+#define LCD_STR_CLOCK       "\x05"
118
+#define LCD_STR_FEEDRATE    "\x06"
119
+#define LCD_STR_BEDTEMP     "\x07"
120
+#define LCD_STR_THERMOMETER "\x08"
121
+#define LCD_STR_DEGREE      "\x09"
122
+
123
+#define LCD_STR_SPECIAL_MAX '\x09'
124
+// Maximum here is 0x1f because 0x20 is ' ' (space) and the normal charsets begin.
125
+// Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
82 126
 
83 127
 int lcd_contrast;
84 128
 
@@ -97,6 +141,51 @@ U8GLIB_NHD_C12864 u8g(DOGLCD_CS, DOGLCD_A0);
97 141
 U8GLIB_DOGM128 u8g(DOGLCD_CS, DOGLCD_A0);  // HW-SPI Com: CS, A0
98 142
 #endif
99 143
 
144
+#include "utf_mapper.h"
145
+
146
+char currentfont = 0;
147
+
148
+static void lcd_setFont(char font_nr) {
149
+  switch(font_nr) {
150
+    case FONT_STATUSMENU : {u8g.setFont(FONT_STATUSMENU_NAME); currentfont = FONT_STATUSMENU;}; break;
151
+    case FONT_MENU       : {u8g.setFont(FONT_MENU_NAME); currentfont = FONT_MENU;}; break;
152
+    case FONT_SPECIAL    : {u8g.setFont(FONT_SPECIAL_NAME); currentfont = FONT_SPECIAL;}; break;
153
+    case FONT_MENU_EDIT  : {u8g.setFont(FONT_MENU_EDIT_NAME); currentfont = FONT_MENU_EDIT;}; break;
154
+    break;
155
+  }
156
+}
157
+
158
+char lcd_print(char c) {
159
+  if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) {
160
+    u8g.setFont(FONT_SPECIAL_NAME);
161
+    u8g.print(c);
162
+    lcd_setFont(currentfont);
163
+    return 1;
164
+  } else {
165
+    return charset_mapper(c);
166
+  }
167
+}
168
+
169
+char lcd_print(char* str) {
170
+  char c;
171
+  int i = 0;
172
+  char n = 0;
173
+  while ((c = str[i++])) {
174
+    n += lcd_print(c);
175
+  }
176
+  return n;
177
+}
178
+
179
+/* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */
180
+char lcd_printPGM(const char* str) {
181
+  char c;
182
+  char n = 0;
183
+  while ((c = pgm_read_byte(str++))) {
184
+    n += lcd_print(c);
185
+  }
186
+  return n;
187
+}
188
+
100 189
 static void lcd_implementation_init()
101 190
 {
102 191
   #ifdef LCD_PIN_BL // Enable LCD backlight
@@ -131,7 +220,7 @@ static void lcd_implementation_init()
131 220
 	u8g.firstPage();
132 221
 	do {
133 222
     u8g.drawBitmapP(offx, offy, START_BMPBYTEWIDTH, START_BMPHEIGHT, start_bmp);
134
-    u8g.setFont(FONT_MENU);
223
+    lcd_setFont(FONT_MENU);
135 224
     #ifndef STRING_SPLASH_LINE2
136 225
       u8g.drawStr(txt1X, u8g.getHeight() - DOG_CHAR_HEIGHT, STRING_SPLASH_LINE1);
137 226
     #else
@@ -144,21 +233,17 @@ static void lcd_implementation_init()
144 233
 
145 234
 static void lcd_implementation_clear() { } // Automatically cleared by Picture Loop
146 235
 
147
-/* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */
148
-static void lcd_printPGM(const char* str) {
149
-  char c;
150
-  while ((c = pgm_read_byte(str++))) u8g.print(c);
151
-}
152
-
153 236
 static void _draw_heater_status(int x, int heater) {
154 237
   bool isBed = heater < 0;
155 238
   int y = 17 + (isBed ? 1 : 0);
156
-  u8g.setFont(FONT_STATUSMENU);
239
+
240
+  lcd_setFont(FONT_STATUSMENU);
157 241
   u8g.setPrintPos(x,7);
158
-  u8g.print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5)));
242
+  lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5)));
159 243
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
160 244
   u8g.setPrintPos(x,28);
161
-  u8g.print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5));
245
+  lcd_print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5));
246
+
162 247
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
163 248
   if (!isHeatingHotend(0)) {
164 249
     u8g.drawBox(x+7,y,2,2);
@@ -190,7 +275,7 @@ static void lcd_implementation_status_screen() {
190 275
     u8g.drawFrame(54,49,73,4);
191 276
 
192 277
     // SD Card Progress bar and clock
193
-    u8g.setFont(FONT_STATUSMENU);
278
+    lcd_setFont(FONT_STATUSMENU);
194 279
  
195 280
     if (IS_SD_PRINTING) {
196 281
       // Progress bar solid part
@@ -200,9 +285,9 @@ static void lcd_implementation_status_screen() {
200 285
     u8g.setPrintPos(80,48);
201 286
     if (starttime != 0) {
202 287
       uint16_t time = (millis() - starttime) / 60000;
203
-      u8g.print(itostr2(time/60));
204
-      u8g.print(':');
205
-      u8g.print(itostr2(time%60));
288
+      lcd_print(itostr2(time/60));
289
+      lcd_print(':');
290
+      lcd_print(itostr2(time%60));
206 291
     }
207 292
     else {
208 293
       lcd_printPGM(PSTR("--:--"));
@@ -216,69 +301,79 @@ static void lcd_implementation_status_screen() {
216 301
   if (EXTRUDERS < 4) _draw_heater_status(81, -1);
217 302
  
218 303
   // Fan
219
-  u8g.setFont(FONT_STATUSMENU);
304
+  lcd_setFont(FONT_STATUSMENU);
220 305
   u8g.setPrintPos(104,27);
221 306
   #if defined(FAN_PIN) && FAN_PIN > -1
222 307
     int per = ((fanSpeed + 1) * 100) / 256;
223 308
     if (per) {
224
-      u8g.print(itostr3(per));
225
-      u8g.print('%');
309
+
310
+      lcd_print(itostr3(per));
311
+      lcd_print('%');
226 312
     }
227 313
     else
228 314
   #endif
229 315
     {
230
-      u8g.print("---");
316
+      lcd_printPGM(PSTR("---"));
231 317
     }
232 318
 
233 319
   // X, Y, Z-Coordinates
234 320
   #define XYZ_BASELINE 38
235
-  u8g.setFont(FONT_STATUSMENU);
236
-  u8g.drawBox(0,30,128,9);
321
+  lcd_setFont(FONT_STATUSMENU);
322
+
323
+  #ifdef USE_SMALL_INFOFONT
324
+    u8g.drawBox(0,30,128,10);
325
+  #else
326
+    u8g.drawBox(0,30,128,9);
327
+  #endif
237 328
   u8g.setColorIndex(0); // white on black
238 329
   u8g.setPrintPos(2,XYZ_BASELINE);
239
-  u8g.print('X');
330
+  lcd_print('X');
240 331
   u8g.drawPixel(8,XYZ_BASELINE - 5);
241 332
   u8g.drawPixel(8,XYZ_BASELINE - 3);
242 333
   u8g.setPrintPos(10,XYZ_BASELINE);
243
-  u8g.print(ftostr31ns(current_position[X_AXIS]));
334
+  lcd_print(ftostr31ns(current_position[X_AXIS]));
244 335
   u8g.setPrintPos(43,XYZ_BASELINE);
245
-  u8g.print('Y');
336
+  lcd_print('Y');
246 337
   u8g.drawPixel(49,XYZ_BASELINE - 5);
247 338
   u8g.drawPixel(49,XYZ_BASELINE - 3);
248 339
   u8g.setPrintPos(51,XYZ_BASELINE);
249
-  u8g.print(ftostr31ns(current_position[Y_AXIS]));
340
+  lcd_print(ftostr31ns(current_position[Y_AXIS]));
250 341
   u8g.setPrintPos(83,XYZ_BASELINE);
251
-  u8g.print('Z');
342
+  lcd_print('Z');
252 343
   u8g.drawPixel(89,XYZ_BASELINE - 5);
253 344
   u8g.drawPixel(89,XYZ_BASELINE - 3);
254 345
   u8g.setPrintPos(91,XYZ_BASELINE);
255
-  u8g.print(ftostr31(current_position[Z_AXIS]));
346
+  lcd_print(ftostr31(current_position[Z_AXIS]));
256 347
   u8g.setColorIndex(1); // black on white
257 348
  
258 349
   // Feedrate
259
-  u8g.setFont(FONT_MENU);
350
+  lcd_setFont(FONT_MENU);
260 351
   u8g.setPrintPos(3,49);
261
-  u8g.print(LCD_STR_FEEDRATE[0]);
262
-  u8g.setFont(FONT_STATUSMENU);
352
+  lcd_print(LCD_STR_FEEDRATE[0]);
353
+  lcd_setFont(FONT_STATUSMENU);
263 354
   u8g.setPrintPos(12,49);
264
-  u8g.print(itostr3(feedmultiply));
265
-  u8g.print('%');
355
+  lcd_print(itostr3(feedmultiply));
356
+  lcd_print('%');
266 357
 
267 358
   // Status line
268
-  u8g.setFont(FONT_STATUSMENU);
359
+  lcd_setFont(FONT_STATUSMENU);
360
+  #ifdef USE_SMALL_INFOFONT
361
+  u8g.setPrintPos(0,62);
362
+  #else
269 363
   u8g.setPrintPos(0,63);
364
+  #endif
270 365
   #ifndef FILAMENT_LCD_DISPLAY
271
-    u8g.print(lcd_status_message);
366
+    lcd_print(lcd_status_message);
272 367
   #else
273 368
     if (millis() < message_millis + 5000) {  //Display both Status message line and Filament display on the last line
274
-      u8g.print(lcd_status_message);
369
+      lcd_print(lcd_status_message);
275 370
     }
276 371
     else {
277 372
       lcd_printPGM(PSTR("dia:"));
278
-      u8g.print(ftostr12ns(filament_width_meas));
373
+      lcd_print(ftostr12ns(filament_width_meas));
279 374
       lcd_printPGM(PSTR(" factor:"));
280
-      u8g.print(itostr3(extrudemultiply));
281
-      u8g.print('%');
375
+      lcd_print(itostr3(extrudemultiply));
376
+      lcd_print('%');
282 377
     }
283 378
   #endif
284 379
 }
@@ -301,14 +396,13 @@ static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, co
301 396
 
302 397
   lcd_implementation_mark_as_selected(row, isSelected);
303 398
 
304
-  while ((c = pgm_read_byte(pstr))) {
305
-    u8g.print(c);
399
+  while (c = pgm_read_byte(pstr)) {
400
+    n -= lcd_print(c);
306 401
     pstr++;
307
-    n--;
308 402
   }
309
-  while (n--) u8g.print(' ');
310
-  u8g.print(post_char);
311
-  u8g.print(' ');
403
+  while (n--) lcd_print(' ');
404
+  lcd_print(post_char);
405
+  lcd_print(' ');
312 406
 }
313 407
 
314 408
 static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const char* pstr, const char* data, bool pgm) {
@@ -317,14 +411,13 @@ static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const c
317 411
 
318 412
   lcd_implementation_mark_as_selected(row, isSelected);
319 413
 
320
-  while ((c = pgm_read_byte(pstr))) {
321
-    u8g.print(c);
414
+  while (c = pgm_read_byte(pstr)) {
415
+    n -= lcd_print(c);
322 416
     pstr++;
323
-    n--;
324 417
   }
325
-  u8g.print(':');
326
-  while (n--) u8g.print(' ');
327
-  if (pgm) { lcd_printPGM(data); } else { u8g.print(data); }
418
+  lcd_print(':');
419
+  while (n--) lcd_print(' ');
420
+  if (pgm) { lcd_printPGM(data); } else { lcd_print((char *)data); }
328 421
 }
329 422
 
330 423
 #define lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, data) _drawmenu_setting_edit_generic(sel, row, pstr, data, false)
@@ -358,13 +451,13 @@ void lcd_implementation_drawedit(const char* pstr, char* value) {
358 451
 
359 452
   #ifdef USE_BIG_EDIT_FONT
360 453
     if (lcd_strlen_P(pstr) <= LCD_WIDTH_EDIT - 1) {
361
-      u8g.setFont(FONT_MENU_EDIT);
454
+      lcd_setFont(FONT_MENU_EDIT);
362 455
       lcd_width = LCD_WIDTH_EDIT + 1;
363 456
       char_width = DOG_CHAR_WIDTH_EDIT;
364 457
       if (lcd_strlen_P(pstr) >= LCD_WIDTH_EDIT - vallen) rows = 2;
365 458
     }
366 459
     else {
367
-      u8g.setFont(FONT_MENU);
460
+      lcd_setFont(FONT_MENU);
368 461
     }
369 462
   #endif
370 463
 
@@ -375,9 +468,9 @@ void lcd_implementation_drawedit(const char* pstr, char* value) {
375 468
 
376 469
   u8g.setPrintPos(0, rowHeight + kHalfChar);
377 470
   lcd_printPGM(pstr);
378
-  u8g.print(':');
471
+  lcd_print(':');
379 472
   u8g.setPrintPos((lcd_width - 1 - vallen) * char_width, rows * rowHeight + kHalfChar);
380
-  u8g.print(value);
473
+  lcd_print(value);
381 474
 }
382 475
 
383 476
 static void _drawmenu_sd(bool isSelected, uint8_t row, const char* pstr, const char* filename, char * const longFilename, bool isDir) {
@@ -391,13 +484,12 @@ static void _drawmenu_sd(bool isSelected, uint8_t row, const char* pstr, const c
391 484
 
392 485
   lcd_implementation_mark_as_selected(row, isSelected);
393 486
 
394
-  if (isDir) u8g.print(LCD_STR_FOLDER[0]);
395
-  while ((c = *filename)) {
396
-    u8g.print(c);
487
+  if (isDir) lcd_print(LCD_STR_FOLDER[0]);
488
+  while (c = *filename) {
489
+    n -= lcd_print(c);
397 490
     filename++;
398
-    n--;
399 491
   }
400
-  while (n--) u8g.print(' ');
492
+  while (n--) lcd_print(' ');
401 493
 }
402 494
 
403 495
 #define lcd_implementation_drawmenu_sdfile(sel, row, pstr, filename, longFilename) _drawmenu_sd(sel, row, pstr, filename, longFilename, false)
@@ -408,16 +500,4 @@ static void _drawmenu_sd(bool isSelected, uint8_t row, const char* pstr, const c
408 500
 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
409 501
 #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
410 502
 
411
-static void lcd_implementation_quick_feedback() {
412
-  #if BEEPER > -1
413
-    SET_OUTPUT(BEEPER);
414
-    for(int8_t i=0; i<10; i++) {
415
-      WRITE(BEEPER,HIGH);
416
-      delay(3);
417
-      WRITE(BEEPER,LOW);
418
-      delay(3);
419
-    }
420
-  #endif
421
-}
422
-
423 503
 #endif //__DOGM_LCD_IMPLEMENTATION_H

+ 5
- 3
Marlin/example_configurations/Felix/Configuration.h View File

@@ -511,9 +511,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
511 511
 // Custom M code points
512 512
 #define CUSTOM_M_CODES
513 513
 #ifdef CUSTOM_M_CODES
514
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
515
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
516
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
514
+  #ifdef ENABLE_AUTO_BED_LEVELING
515
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
516
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
517
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
518
+  #endif
517 519
 #endif
518 520
 
519 521
 

+ 5
- 3
Marlin/example_configurations/Felix/Configuration_DUAL.h View File

@@ -511,9 +511,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
511 511
 // Custom M code points
512 512
 #define CUSTOM_M_CODES
513 513
 #ifdef CUSTOM_M_CODES
514
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
515
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
516
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
514
+  #ifdef ENABLE_AUTO_BED_LEVELING
515
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
516
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
517
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
518
+  #endif
517 519
 #endif
518 520
 
519 521
 

+ 5
- 3
Marlin/example_configurations/Hephestos/Configuration.h View File

@@ -539,9 +539,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
539 539
 // Custom M code points
540 540
 #define CUSTOM_M_CODES
541 541
 #ifdef CUSTOM_M_CODES
542
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
543
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
544
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
542
+  #ifdef ENABLE_AUTO_BED_LEVELING
543
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
544
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
545
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
546
+  #endif
545 547
 #endif
546 548
 
547 549
 

+ 5
- 3
Marlin/example_configurations/K8200/Configuration.h View File

@@ -543,9 +543,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
543 543
 // Custom M code points
544 544
 #define CUSTOM_M_CODES
545 545
 #ifdef CUSTOM_M_CODES
546
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
547
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
548
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
546
+  #ifdef ENABLE_AUTO_BED_LEVELING
547
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
548
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
549
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
550
+  #endif
549 551
 #endif
550 552
 
551 553
 

+ 5
- 3
Marlin/example_configurations/SCARA/Configuration.h View File

@@ -569,9 +569,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
569 569
 // Custom M code points
570 570
 //#define CUSTOM_M_CODES
571 571
 #ifdef CUSTOM_M_CODES
572
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
573
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
574
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
572
+  #ifdef ENABLE_AUTO_BED_LEVELING
573
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
574
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
575
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
576
+  #endif
575 577
 #endif
576 578
 
577 579
 

+ 5
- 3
Marlin/example_configurations/WITBOX/Configuration.h View File

@@ -536,9 +536,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
536 536
 // Custom M code points
537 537
 #define CUSTOM_M_CODES
538 538
 #ifdef CUSTOM_M_CODES
539
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
540
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
541
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
539
+  #ifdef ENABLE_AUTO_BED_LEVELING
540
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
541
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
542
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
543
+  #endif
542 544
 #endif
543 545
 
544 546
 

+ 14
- 9
Marlin/example_configurations/delta/generic/Configuration.h View File

@@ -552,9 +552,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
552 552
 // Custom M code points
553 553
 #define CUSTOM_M_CODES
554 554
 #ifdef CUSTOM_M_CODES
555
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
556
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
557
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
555
+  #ifdef ENABLE_AUTO_BED_LEVELING
556
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
557
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
558
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
559
+  #endif
558 560
 #endif
559 561
 
560 562
 
@@ -581,13 +583,16 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
581 583
 //==============================LCD and SD support=============================
582 584
 
583 585
 // Define your display language below. Replace (en) with your language code and uncomment.
584
-// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu
586
+// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
585 587
 // See also language.h
586
-//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
587
-
588
-// Character based displays can have different extended charsets.
589
-#define DISPLAY_CHARSET_HD44780_JAPAN     // "ääööüüß23°"
590
-//#define DISPLAY_CHARSET_HD44780_WESTERN // "ÄäÖöÜüß²³°" if you see a '~' instead of a 'arrow_right' at the right of submenuitems - this is the right one.
588
+#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
589
+
590
+// Chose ONE of the next three charsets. This has to match your hardware. In case of a full graphic display this information is not important.
591
+// To find out what type you have - compile with (test) - upload - click to get the menu. You'll see two typical lines from the upper half of the charset.
592
+// See also documentation/LCDLanguageFont.md
593
+  #define DISPLAY_CHARSET_HD44780_JAPAN        // this is the most common hardware
594
+  //#define DISPLAY_CHARSET_HD44780_WESTERN
595
+  //#define DISPLAY_CHARSET_HD44780_CYRILLIC
591 596
 
592 597
 //#define ULTRA_LCD  //general LCD support, also 16x2
593 598
 //#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)

+ 14
- 9
Marlin/example_configurations/delta/kossel_mini/Configuration.h View File

@@ -554,9 +554,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
554 554
 // Custom M code points
555 555
 #define CUSTOM_M_CODES
556 556
 #ifdef CUSTOM_M_CODES
557
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
558
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
559
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
557
+  #ifdef ENABLE_AUTO_BED_LEVELING
558
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
559
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
560
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
561
+  #endif
560 562
 #endif
561 563
 
562 564
 
@@ -583,13 +585,16 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
583 585
 //==============================LCD and SD support=============================
584 586
 
585 587
 // Define your display language below. Replace (en) with your language code and uncomment.
586
-// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu
588
+// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
587 589
 // See also language.h
588
-//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
589
-
590
-// Character based displays can have different extended charsets.
591
-#define DISPLAY_CHARSET_HD44780_JAPAN     // "ääööüüß23°"
592
-//#define DISPLAY_CHARSET_HD44780_WESTERN // "ÄäÖöÜüß²³°" if you see a '~' instead of a 'arrow_right' at the right of submenuitems - this is the right one.
590
+#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
591
+
592
+// Chose ONE of the next three charsets. This has to match your hardware. In case of a full graphic display this information is not important.
593
+// To find out what type you have - compile with (test) - upload - click to get the menu. You'll see two typical lines from the upper half of the charset.
594
+// See also documentation/LCDLanguageFont.md
595
+  #define DISPLAY_CHARSET_HD44780_JAPAN        // this is the most common hardware
596
+  //#define DISPLAY_CHARSET_HD44780_WESTERN
597
+  //#define DISPLAY_CHARSET_HD44780_CYRILLIC
593 598
 
594 599
 //#define ULTRA_LCD  //general LCD support, also 16x2
595 600
 //#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)

+ 5
- 3
Marlin/example_configurations/makibox/Configuration.h View File

@@ -534,9 +534,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
534 534
 // Custom M code points
535 535
 #define CUSTOM_M_CODES
536 536
 #ifdef CUSTOM_M_CODES
537
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
538
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
539
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
537
+  #ifdef ENABLE_AUTO_BED_LEVELING
538
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
539
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
540
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
541
+  #endif
540 542
 #endif
541 543
 
542 544
 

+ 5
- 3
Marlin/example_configurations/tvrrug/Round2/Configuration.h View File

@@ -541,9 +541,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
541 541
 // Custom M code points
542 542
 #define CUSTOM_M_CODES
543 543
 #ifdef CUSTOM_M_CODES
544
-  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
545
-  #define Z_PROBE_OFFSET_RANGE_MIN -15
546
-  #define Z_PROBE_OFFSET_RANGE_MAX -5
544
+  #ifdef ENABLE_AUTO_BED_LEVELING
545
+    #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
546
+    #define Z_PROBE_OFFSET_RANGE_MIN -15
547
+    #define Z_PROBE_OFFSET_RANGE_MAX -5
548
+  #endif
547 549
 #endif
548 550
 
549 551
 

BIN
Marlin/fonts/HD44780_C.fon View File


BIN
Marlin/fonts/HD44780_J.fon View File


BIN
Marlin/fonts/HD44780_W.fon View File


BIN
Marlin/fonts/ISO10646-1-Marlin.fon View File


BIN
Marlin/fonts/ISO10646-5_Cyrillic.fon View File


BIN
Marlin/fonts/ISO10646_Kana.fon View File


+ 6
- 0
Marlin/fonts/README.fonts View File

@@ -0,0 +1,6 @@
1
+The fonts are created with Fony.exe (http://hukka.ncn.fi/?fony) because Fontforge didn't do what I want (probably lack off experience). 
2
+In Fony export the fonts to bdf-format. Maybe another one can edit them with Fontforge.
3
+Then run make_fonts.bat what calls bdf2u8g.exe with the needed parameters to produce the .h files.
4
+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.
5
+
6
+Especially the Kana and Cyrillic fonts should be revised by someone who knows what he/she does. I am only a west-European with very little knowledge about this scripts.

BIN
Marlin/fonts/bdf2u8g.exe View File


+ 0
- 1
Marlin/fonts/make_fonts.bat View File

@@ -3,6 +3,5 @@
3 3
 .\bdf2u8g.exe -b 32 -e 255 HD44780_C.bdf HD44780_C_5x7 dogm_font_data_HD44780_C.h
4 4
 .\bdf2u8g.exe -b 32 -e 255 HD44780_J.bdf HD44780_J_5x7 dogm_font_data_HD44780_J.h
5 5
 .\bdf2u8g.exe -b 32 -e 255 ISO10646-1.bdf ISO10646_1_5x7 dogm_font_data_ISO10646_1.h
6
-.\bdf2u8g.exe -b 32 -e 255 ISO10646-1-Marlin.bdf ISO10646_1_Marlin_5x7 dogm_font_data_ISO10646_1_Marlin.h
7 6
 .\bdf2u8g.exe -b 32 -e 255 ISO10646_5_Cyrillic.bdf ISO10646_5_Cyrillic_5x7 dogm_font_data_ISO10646_5_Cyrillic.h
8 7
 .\bdf2u8g.exe -b 32 -e 255 ISO10646_Kana.bdf ISO10646_Kana_5x7 dogm_font_data_ISO10646_Kana.h

+ 19
- 72
Marlin/language.h View File

@@ -11,22 +11,25 @@
11 11
 //
12 12
 //   ==> ALWAYS TRY TO COMPILE MARLIN WITH/WITHOUT "ULTIPANEL" / "ULTRALCD" / "SDSUPPORT" #define IN "Configuration.h"
13 13
 //   ==> ALSO TRY ALL AVAILABLE LANGUAGE OPTIONS
14
+// See also documentation/LCDLanguageFont.md
14 15
 
15 16
 // Languages
16
-// en    English
17
-// pl    Polish
18
-// fr    French
19
-// de    German
20
-// es    Spanish
21
-// ru    Russian
22
-// it    Italian
23
-// pt    Portuguese
24
-// pt-br Portuguese (Brazil)
25
-// fi    Finnish
26
-// an    Aragonese
27
-// nl    Dutch
28
-// ca    Catalan
29
-// eu    Basque-Euskera
17
+// en       English
18
+// pl       Polish
19
+// fr       French
20
+// de       German
21
+// es       Spanish
22
+// ru       Russian
23
+// it       Italian
24
+// pt       Portuguese
25
+// pt-br    Portuguese (Brazil)
26
+// fi       Finnish
27
+// an       Aragonese
28
+// nl       Dutch
29
+// ca       Catalan
30
+// eu       Basque-Euskera
31
+// kana     Japanese
32
+// kana_utf Japanese
30 33
 
31 34
 #ifndef LANGUAGE_INCLUDE
32 35
   // pick your language from the list above
@@ -201,65 +204,9 @@
201 204
 
202 205
 // LCD Menu Messages
203 206
 
204
-// Add your own character. Reference: https://github.com/MarlinFirmware/Marlin/pull/1434 photos
205
-//                                and https://www.sparkfun.com/datasheets/LCD/HD44780.pdf page 17-18
206
-#ifdef DOGLCD
207
-  #define STR_Ae "\304"               // 'Ä' U8glib
208
-  #define STR_ae "\344"               // 'ä'
209
-  #define STR_Oe "\326"               // 'Ö'
210
-  #define STR_oe STR_Oe               // 'ö'
211
-  #define STR_Ue "\334"               // 'Ü'
212
-  #define STR_ue STR_Ue               // 'ü'
213
-  #define STR_sz "\337"               // 'ß'
214
-  #define STR_h2 "\262"               // '²'
215
-  #define STR_h3 "\263"               // '³'
216
-  #define STR_Deg "\260"              // '°'
217
-  #define STR_THERMOMETER "\377"
218
-#else
219
-  #ifdef DISPLAY_CHARSET_HD44780_JAPAN // HD44780 ROM Code: A00 (Japan)
220
-    #define STR_ae "\xe1"
221
-    #define STR_Ae STR_ae
222
-    #define STR_oe "\357"
223
-    #define STR_Oe STR_oe
224
-    #define STR_ue "\365"
225
-    #define STR_Ue STR_ue
226
-    #define STR_sz "\342"
227
-    #define STR_h2 "2"
228
-    #define STR_h3 "3"
229
-    #define STR_Deg "\271"
230
-    #define STR_THERMOMETER "\002"
231
-  #elif defined(DISPLAY_CHARSET_HD44780_WESTERN) // HD44780 ROM Code: A02 (Western)
232
-    #define STR_Ae "\216"
233
-    #define STR_ae "\204"
234
-    #define STR_Oe "\211"
235
-    #define STR_oe "\204"
236
-    #define STR_Ue "\212"
237
-    #define STR_ue "\201"
238
-    #define STR_sz "\160"
239
-    #define STR_h2 "\262"
240
-    #define STR_h3 "\263"
241
-    #define STR_Deg "\337"
242
-    #define STR_THERMOMETER "\002"
243
-  #endif
207
+#if !(defined( DISPLAY_CHARSET_HD44780_JAPAN ) || defined( DISPLAY_CHARSET_HD44780_WESTERN ) || defined( DISPLAY_CHARSET_HD44780_CYRILLIC ))
208
+  #define DISPLAY_CHARSET_HD44780_JAPAN
244 209
 #endif
245
-/*
246
-#define TESTSTRING000 "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017"
247
-#define TESTSTRING020 "\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
248
-#define TESTSTRING040 "\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057"
249
-#define TESTSTRING060 "\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077"
250
-#define TESTSTRING100 "\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117"
251
-#define TESTSTRING120 "\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137"
252
-#define TESTSTRING140 "\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157"
253
-#define TESTSTRING160 "\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177"
254
-#define TESTSTRING200 "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217"
255
-#define TESTSTRING220 "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237"
256
-#define TESTSTRING240 "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257"
257
-#define TESTSTRING260 "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277"
258
-#define TESTSTRING300 "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317"
259
-#define TESTSTRING320 "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337"
260
-#define TESTSTRING340 "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357"
261
-#define TESTSTRING360 "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
262
-*/
263 210
 
264 211
 #include LANGUAGE_INCLUDE
265 212
 #include "language_en.h"

+ 9
- 4
Marlin/language_an.h View File

@@ -2,12 +2,17 @@
2 2
  * Aragonese
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_AN_H
9 9
 #define LANGUAGE_AN_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " parada."
12 17
 #define MSG_SD_INSERTED                     "Tarcheta colocada"
13 18
 #define MSG_SD_REMOVED                      "Tarcheta retirada"
@@ -46,9 +51,9 @@
46 51
 #define MSG_FAN_SPEED                       "Ixoriador"
47 52
 #define MSG_FLOW                            "Fluxo"
48 53
 #define MSG_CONTROL                         "Control"
49
-#define MSG_MIN                             "\002 Min"
50
-#define MSG_MAX                             "\002 Max"
51
-#define MSG_FACTOR                          "\002 Fact"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
52 57
 #define MSG_AUTOTEMP                        "Autotemp"
53 58
 #define MSG_ON                              "On"
54 59
 #define MSG_OFF                             "Off"

+ 11
- 5
Marlin/language_ca.h View File

@@ -2,12 +2,18 @@
2 2
  * Catalan
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_CA_H
9 9
 #define LANGUAGE_CA_H
10 10
 
11
+//#define MAPPER_NON 
12
+#define MAPPER_C2C3  // because of "ó"
13
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
14
+//#define SIMULATE_ROMFONT
15
+#define DISPLAY_CHARSET_ISO10646_1
16
+
11 17
 #define WELCOME_MSG                         MACHINE_NAME " preparada."
12 18
 #define MSG_SD_INSERTED                     "SD detectada."
13 19
 #define MSG_SD_REMOVED                      "SD expulsada."
@@ -46,9 +52,9 @@
46 52
 #define MSG_FAN_SPEED                       "Vel. Ventilador"
47 53
 #define MSG_FLOW                            "Fluxe"
48 54
 #define MSG_CONTROL                         "Control"
49
-#define MSG_MIN                             " \002 Min"
50
-#define MSG_MAX                             " \002 Max"
51
-#define MSG_FACTOR                          " \002 Fact"
55
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
56
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
57
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
52 58
 #define MSG_AUTOTEMP                        "Autotemp"
53 59
 #define MSG_ON                              "On "
54 60
 #define MSG_OFF                             "Off"
@@ -76,7 +82,7 @@
76 82
 #define MSG_TEMPERATURE                     "Temperatura"
77 83
 #define MSG_MOTION                          "Moviment"
78 84
 #define MSG_VOLUMETRIC                      "Filament"
79
-#define MSG_VOLUMETRIC_ENABLED		        "E in mm3"
85
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
80 86
 #define MSG_FILAMENT_SIZE_EXTRUDER_0        "Fil. Dia. 1"
81 87
 #define MSG_FILAMENT_SIZE_EXTRUDER_1        "Fil. Dia. 2"
82 88
 #define MSG_FILAMENT_SIZE_EXTRUDER_2        "Fil. Dia. 3"

+ 20
- 15
Marlin/language_de.h View File

@@ -2,32 +2,37 @@
2 2
  * German
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_DE_H
9 9
 #define LANGUAGE_DE_H
10 10
 
11
+#define MAPPER_C2C3
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " Bereit."
12 17
 #define MSG_SD_INSERTED                     "SDKarte erkannt."
13 18
 #define MSG_SD_REMOVED                      "SDKarte entfernt."
14
-#define MSG_MAIN                            "Hauptmen" STR_ue
19
+#define MSG_MAIN                            "Hauptmenü"
15 20
 #define MSG_AUTOSTART                       "Autostart"
16 21
 #define MSG_DISABLE_STEPPERS                "Motoren Aus" // M84
17 22
 #define MSG_AUTO_HOME                       "Home" // G28
18 23
 #define MSG_SET_HOME_OFFSETS                "Setze Home hier"
19 24
 #define MSG_SET_ORIGIN                      "Setze Null hier" //"G92 X0 Y0 Z0" commented out in ultralcd.cpp
20
-#define MSG_PREHEAT_PLA                     "Vorw" STR_ae "rmen PLA"
21
-#define MSG_PREHEAT_PLA_N                   "Vorw" STR_ae "rmen PLA "
25
+#define MSG_PREHEAT_PLA                     "Vorwärmen PLA"
26
+#define MSG_PREHEAT_PLA_N                   "Vorwärmen PLA "
22 27
 #define MSG_PREHEAT_PLA_ALL                 "Vorw. PLA Alle"
23 28
 #define MSG_PREHEAT_PLA_BEDONLY             "Vorw. PLA Bett"
24
-#define MSG_PREHEAT_PLA_SETTINGS            "Vorw" STR_ae "rm. PLA Ein."
25
-#define MSG_PREHEAT_ABS                     "Vorw" STR_ae "rmen ABS"
26
-#define MSG_PREHEAT_ABS_N                   "Vorw" STR_ae "rmen ABS "
29
+#define MSG_PREHEAT_PLA_SETTINGS            "Vorwärm. PLA Ein."
30
+#define MSG_PREHEAT_ABS                     "Vorwärmen ABS"
31
+#define MSG_PREHEAT_ABS_N                   "Vorwärmen ABS "
27 32
 #define MSG_PREHEAT_ABS_ALL                 "Vorw. ABS Alle"
28 33
 #define MSG_PREHEAT_ABS_BEDONLY             "Vorw. ABS Bett"
29
-#define MSG_PREHEAT_ABS_SETTINGS            "Vorw" STR_ae "rm. ABS Ein."
30
-#define MSG_COOLDOWN                        "Abk" STR_ue "hlen"
34
+#define MSG_PREHEAT_ABS_SETTINGS            "Vorwärm. ABS Ein."
35
+#define MSG_COOLDOWN                        "Abkühlen"
31 36
 #define MSG_SWITCH_PS_ON                    "Netzteil Ein"
32 37
 #define MSG_SWITCH_PS_OFF                   "Netzteil Aus"
33 38
 #define MSG_RETRACT                         "Retract"
@@ -40,14 +45,14 @@
40 45
 #define MSG_MOVE_1MM                        " 1.0 mm"
41 46
 #define MSG_MOVE_10MM                       "10.0 mm"
42 47
 #define MSG_SPEED                           "Geschw."
43
-#define MSG_NOZZLE                          "D" STR_ue "se"
48
+#define MSG_NOZZLE                          "Düse"
44 49
 #define MSG_BED                             "Bett"
45
-#define MSG_FAN_SPEED                       "L" STR_ue "ftergeschw."
50
+#define MSG_FAN_SPEED                       "Lüftergeschw."
46 51
 #define MSG_FLOW                            "Fluss"
47 52
 #define MSG_CONTROL                         "Einstellungen"
48
-#define MSG_MIN                             STR_THERMOMETER " Min"
49
-#define MSG_MAX                             STR_THERMOMETER " Max"
50
-#define MSG_FACTOR                          STR_THERMOMETER " Faktor"
53
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
54
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
55
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Faktor"
51 56
 #define MSG_AUTOTEMP                        "AutoTemp"
52 57
 #define MSG_ON                              "Ein"
53 58
 #define MSG_OFF                             "Aus"
@@ -75,7 +80,7 @@
75 80
 #define MSG_TEMPERATURE                     "Temperatur"
76 81
 #define MSG_MOTION                          "Bewegung"
77 82
 #define MSG_VOLUMETRIC                      "Filament"
78
-#define MSG_VOLUMETRIC_ENABLED		          "E in mm" STR_h3
83
+#define MSG_VOLUMETRIC_ENABLED              "E in mm³"
79 84
 #define MSG_FILAMENT_SIZE_EXTRUDER_0        "Filament D 1"
80 85
 #define MSG_FILAMENT_SIZE_EXTRUDER_1        "Filament D 2"
81 86
 #define MSG_FILAMENT_SIZE_EXTRUDER_2        "Filament D 3"

+ 15
- 5
Marlin/language_en.h View File

@@ -2,12 +2,22 @@
2 2
  * English
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * Se also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_EN_H
9 9
 #define LANGUAGE_EN_H
10 10
 
11
+#if !( defined(MAPPER_NON)|| defined(MAPPER_C2C3)|| defined(MAPPER_D0D1)|| defined(MAPPER_D0D1_MOD)|| defined(MAPPER_E382E383) )
12
+  #define MAPPER_NON         // For direct asci codes
13
+#endif
14
+
15
+//#define SIMULATE_ROMFONT //Comment in to see what is seen on the character based displays
16
+#if !( defined(SIMULATE_ROMFONT)|| defined(DISPLAY_CHARSET_ISO10646_1)|| defined(DISPLAY_CHARSET_ISO10646_5)|| defined(DISPLAY_CHARSET_ISO10646_KANA) )
17
+  #define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
18
+#endif
19
+
20
+
11 21
 #ifndef WELCOME_MSG
12 22
 #define WELCOME_MSG                         MACHINE_NAME " ready."
13 23
 #endif
@@ -159,13 +169,13 @@
159 169
 #define MSG_CONTROL                         "Control"
160 170
 #endif
161 171
 #ifndef MSG_MIN
162
-#define MSG_MIN                             " " STR_THERMOMETER " Min"
172
+#define MSG_MIN                             " "LCD_STR_THERMOMETER " Min"
163 173
 #endif
164 174
 #ifndef MSG_MAX
165
-#define MSG_MAX                             " " STR_THERMOMETER " Max"
175
+#define MSG_MAX                             " "LCD_STR_THERMOMETER " Max"
166 176
 #endif
167 177
 #ifndef MSG_FACTOR
168
-#define MSG_FACTOR                          " " STR_THERMOMETER " Fact"
178
+#define MSG_FACTOR                          " "LCD_STR_THERMOMETER " Fact"
169 179
 #endif
170 180
 #ifndef MSG_AUTOTEMP
171 181
 #define MSG_AUTOTEMP                        "Autotemp"
@@ -261,7 +271,7 @@
261 271
 #define MSG_VOLUMETRIC                      "Filament"
262 272
 #endif
263 273
 #ifndef MSG_VOLUMETRIC_ENABLED
264
-#define MSG_VOLUMETRIC_ENABLED              "E in mm" STR_h3
274
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
265 275
 #endif
266 276
 #ifndef MSG_FILAMENT_SIZE_EXTRUDER_0
267 277
 #define MSG_FILAMENT_SIZE_EXTRUDER_0        "Fil. Dia. 1"

+ 9
- 4
Marlin/language_es.h View File

@@ -2,12 +2,17 @@
2 2
  * Spanish
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_ES_H
9 9
 #define LANGUAGE_ES_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " lista."
12 17
 #define MSG_SD_INSERTED                     "Tarjeta colocada"
13 18
 #define MSG_SD_REMOVED                      "Tarjeta retirada"
@@ -46,9 +51,9 @@
46 51
 #define MSG_FAN_SPEED                       "Ventilador"
47 52
 #define MSG_FLOW                            "Flujo"
48 53
 #define MSG_CONTROL                         "Control"
49
-#define MSG_MIN                             "\002 Min"
50
-#define MSG_MAX                             "\002 Max"
51
-#define MSG_FACTOR                          "\002 Fact"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
52 57
 #define MSG_AUTOTEMP                        "Autotemp"
53 58
 #define MSG_ON                              "On"
54 59
 #define MSG_OFF                             "Off"

+ 9
- 4
Marlin/language_eu.h View File

@@ -2,12 +2,17 @@
2 2
  * Basque-Euskera
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_EU_H
9 9
 #define LANGUAGE_EU_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " prest."
12 17
 #define MSG_SD_INSERTED                     "Txartela sartuta"
13 18
 #define MSG_SD_REMOVED                      "Txartela kenduta"
@@ -46,9 +51,9 @@
46 51
 #define MSG_FAN_SPEED                       "Haizagailua"
47 52
 #define MSG_FLOW                            "Fluxua"
48 53
 #define MSG_CONTROL                         "Kontrola"
49
-#define MSG_MIN                             " \002 Min"
50
-#define MSG_MAX                             " \002 Max"
51
-#define MSG_FACTOR                          " \002 Faktorea"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Faktorea"
52 57
 #define MSG_AUTOTEMP                        "Auto tenperatura"
53 58
 #define MSG_ON                              "On "
54 59
 #define MSG_OFF                             "Off"

+ 31
- 26
Marlin/language_fi.h View File

@@ -2,12 +2,17 @@
2 2
  * Finnish
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_FI_H
9 9
 #define LANGUAGE_FI_H
10 10
 
11
+#define MAPPER_C2C3
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " valmis."
12 17
 #define MSG_SD_INSERTED                     "Kortti asetettu"
13 18
 #define MSG_SD_REMOVED                      "Kortti poistettu"
@@ -17,21 +22,21 @@
17 22
 #define MSG_AUTO_HOME                       "Aja referenssiin"
18 23
 #define MSG_SET_HOME_OFFSETS                "Set home offsets"
19 24
 #define MSG_SET_ORIGIN                      "Aseta origo"
20
-#define MSG_PREHEAT_PLA                     "Esil" STR_ae "mmit" STR_ae " PLA"
21
-#define MSG_PREHEAT_PLA_N                   "Esil" STR_ae "mmit" STR_ae " PLA "
22
-#define MSG_PREHEAT_PLA_ALL                 "Esil" STR_ae ". PLA Kaikki"
23
-#define MSG_PREHEAT_PLA_BEDONLY             "Esil" STR_ae ". PLA Alusta"
24
-#define MSG_PREHEAT_PLA_SETTINGS            "Esil" STR_ae "mm. PLA konf"
25
-#define MSG_PREHEAT_ABS                     "Esil" STR_ae "mmit" STR_ae " ABS"
26
-#define MSG_PREHEAT_ABS_N                   "Esil" STR_ae "mmit" STR_ae " ABS "
27
-#define MSG_PREHEAT_ABS_ALL                 "Esil" STR_ae ". ABS Kaikki"
28
-#define MSG_PREHEAT_ABS_BEDONLY             "Esil" STR_ae ". ABS Alusta"
29
-#define MSG_PREHEAT_ABS_SETTINGS            "Esil" STR_ae "mm. ABS konf"
30
-#define MSG_COOLDOWN                        "J" STR_ae "" STR_ae "hdyt" STR_ae ""
31
-#define MSG_SWITCH_PS_ON                    "Virta p" STR_ae "" STR_ae "lle"
25
+#define MSG_PREHEAT_PLA                     "Esilämmitä PLA"
26
+#define MSG_PREHEAT_PLA_N                   "Esilämmitä PLA "
27
+#define MSG_PREHEAT_PLA_ALL                 "Esilä. PLA Kaikki"
28
+#define MSG_PREHEAT_PLA_BEDONLY             "Esilä. PLA Alusta"
29
+#define MSG_PREHEAT_PLA_SETTINGS            "Esilämm. PLA konf"
30
+#define MSG_PREHEAT_ABS                     "Esilämmitä ABS"
31
+#define MSG_PREHEAT_ABS_N                   "Esilämmitä ABS "
32
+#define MSG_PREHEAT_ABS_ALL                 "Esilä. ABS Kaikki"
33
+#define MSG_PREHEAT_ABS_BEDONLY             "Esilä. ABS Alusta"
34
+#define MSG_PREHEAT_ABS_SETTINGS            "Esilämm. ABS konf"
35
+#define MSG_COOLDOWN                        "Jäähdytä"
36
+#define MSG_SWITCH_PS_ON                    "Virta päälle"
32 37
 #define MSG_SWITCH_PS_OFF                   "Virta pois"
33 38
 #define MSG_EXTRUDE                         "Pursota"
34
-#define MSG_RETRACT                         "Ved" STR_ae " takaisin"
39
+#define MSG_RETRACT                         "Vedä takaisin"
35 40
 #define MSG_MOVE_AXIS                       "Liikuta akseleita"
36 41
 #define MSG_MOVE_X                          "Liikuta X"
37 42
 #define MSG_MOVE_Y                          "Liikuta Y"
@@ -46,9 +51,9 @@
46 51
 #define MSG_FAN_SPEED                       "Tuul. nopeus"
47 52
 #define MSG_FLOW                            "Virtaus"
48 53
 #define MSG_CONTROL                         "Kontrolli"
49
-#define MSG_MIN                             STR_THERMOMETER " Min"
50
-#define MSG_MAX                             STR_THERMOMETER " Max"
51
-#define MSG_FACTOR                          STR_THERMOMETER " Kerr"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Kerr"
52 57
 #define MSG_AUTOTEMP                        "Autotemp"
53 58
 #define MSG_ON                              "On "
54 59
 #define MSG_OFF                             "Off"
@@ -73,10 +78,10 @@
73 78
 #define MSG_YSTEPS                          "Ysteps/mm"
74 79
 #define MSG_ZSTEPS                          "Zsteps/mm"
75 80
 #define MSG_ESTEPS                          "Esteps/mm"
76
-#define MSG_TEMPERATURE                     "L" STR_ae "mp" STR_oe "tila"
81
+#define MSG_TEMPERATURE                     "Lämpötila"
77 82
 #define MSG_MOTION                          "Liike"
78 83
 #define MSG_VOLUMETRIC                      "Filament"
79
-#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
84
+#define MSG_VOLUMETRIC_ENABLED              "E in mm³"
80 85
 #define MSG_FILAMENT_SIZE_EXTRUDER_0        "Fil. Dia. 1"
81 86
 #define MSG_FILAMENT_SIZE_EXTRUDER_1        "Fil. Dia. 2"
82 87
 #define MSG_FILAMENT_SIZE_EXTRUDER_2        "Fil. Dia. 3"
@@ -84,13 +89,13 @@
84 89
 #define MSG_STORE_EPROM                     "Tallenna muistiin"
85 90
 #define MSG_LOAD_EPROM                      "Lataa muistista"
86 91
 #define MSG_RESTORE_FAILSAFE                "Palauta oletus"
87
-#define MSG_REFRESH                         "P" STR_ae "ivit" STR_ae ""
92
+#define MSG_REFRESH                         "Päivitä"
88 93
 #define MSG_WATCH                           "Seuraa"
89 94
 #define MSG_PREPARE                         "Valmistele"
90
-#define MSG_TUNE                            "S" STR_ae "" STR_ae "d" STR_ae ""
91
-#define MSG_PAUSE_PRINT                     "Keskeyt" STR_ae " tulostus"
95
+#define MSG_TUNE                            "Säädä"
96
+#define MSG_PAUSE_PRINT                     "Keskeytä tulostus"
92 97
 #define MSG_RESUME_PRINT                    "Jatka tulostusta"
93
-#define MSG_STOP_PRINT                      "Pys" STR_ae "yt" STR_ae " tulostus"
98
+#define MSG_STOP_PRINT                      "Pysäytä tulostus"
94 99
 #define MSG_CARD_MENU                       "Korttivalikko"
95 100
 #define MSG_NO_CARD                         "Ei korttia"
96 101
 #define MSG_DWELL                           "Nukkumassa..."
@@ -100,9 +105,9 @@
100 105
 #define MSG_NO_MOVE                         "Ei liiketta."
101 106
 #define MSG_KILLED                          "KILLED. "
102 107
 #define MSG_STOPPED                         "STOPPED. "
103
-#define MSG_CONTROL_RETRACT                 "Ved" STR_ae " mm"
104
-#define MSG_CONTROL_RETRACT_SWAP            "Va. Ved" STR_ae " mm"
105
-#define MSG_CONTROL_RETRACTF                "Ved" STR_ae " V"
108
+#define MSG_CONTROL_RETRACT                 "Vedä mm"
109
+#define MSG_CONTROL_RETRACT_SWAP            "Va. Vedä mm"
110
+#define MSG_CONTROL_RETRACTF                "Vedä V"
106 111
 #define MSG_CONTROL_RETRACT_ZLIFT           "Z mm"
107 112
 #define MSG_CONTROL_RETRACT_RECOVER         "UnRet +mm"
108 113
 #define MSG_CONTROL_RETRACT_RECOVER_SWAP    "Va. UnRet +mm"

+ 11
- 5
Marlin/language_fr.h View File

@@ -2,12 +2,18 @@
2 2
  * French
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_FR_H
9 9
 #define LANGUAGE_FR_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
16
+
11 17
 #define WELCOME_MSG                         MACHINE_NAME " prete."
12 18
 #define MSG_SD_INSERTED                     "Carte inseree"
13 19
 #define MSG_SD_REMOVED                      "Carte retiree"
@@ -46,9 +52,9 @@
46 52
 #define MSG_FAN_SPEED                       "Vite. ventilateur"
47 53
 #define MSG_FLOW                            "Flux"
48 54
 #define MSG_CONTROL                         "Controler"
49
-#define MSG_MIN                             " \002 Min"
50
-#define MSG_MAX                             " \002 Max"
51
-#define MSG_FACTOR                          " \002 Facteur"
55
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
56
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
57
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Facteur"
52 58
 #define MSG_AUTOTEMP                        "Temp. Auto."
53 59
 #define MSG_ON                              "Marche "
54 60
 #define MSG_OFF                             "Arret"
@@ -76,7 +82,7 @@
76 82
 #define MSG_TEMPERATURE                     "Temperature"
77 83
 #define MSG_MOTION                          "Mouvement"
78 84
 #define MSG_VOLUMETRIC                      "Filament"
79
-#define MSG_VOLUMETRIC_ENABLED		        "E in mm3"
85
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
80 86
 #define MSG_FILAMENT_SIZE_EXTRUDER_0        "Fil. Dia. 1"
81 87
 #define MSG_FILAMENT_SIZE_EXTRUDER_1        "Fil. Dia. 2"
82 88
 #define MSG_FILAMENT_SIZE_EXTRUDER_2        "Fil. Dia. 3"

+ 9
- 4
Marlin/language_it.h View File

@@ -2,12 +2,17 @@
2 2
  * Italian
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_IT_H
9 9
 #define LANGUAGE_IT_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " pronto."
12 17
 #define MSG_SD_INSERTED                     "SD Card inserita"
13 18
 #define MSG_SD_REMOVED                      "SD Card rimossa"
@@ -46,9 +51,9 @@
46 51
 #define MSG_FAN_SPEED                       "Ventola"
47 52
 #define MSG_FLOW                            "Flusso"
48 53
 #define MSG_CONTROL                         "Controllo"
49
-#define MSG_MIN                             " \002 Min"
50
-#define MSG_MAX                             " \002 Max"
51
-#define MSG_FACTOR                          " \002 Fact"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
52 57
 #define MSG_AUTOTEMP                        "Autotemp"
53 58
 #define MSG_ON                              "ON "
54 59
 #define MSG_OFF                             "OFF"

+ 147
- 0
Marlin/language_kana.h View File

@@ -0,0 +1,147 @@
1
+/**
2
+ * Japanese (Kana)
3
+ *
4
+ * LCD Menu Messages
5
+ * See also documentation/LCDLanguageFont.md
6
+ *
7
+ */
8
+ 
9
+#ifndef LANGUAGE_KANA_H
10
+#define LANGUAGE_KANA_H
11
+
12
+#define MAPPER_NON
13
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
14
+#define SIMULATE_ROMFONT
15
+#define DISPLAY_CHARSET_ISO10646_KANA
16
+
17
+// 片仮名表示定義
18
+#define WELCOME_MSG                         MACHINE_NAME " ready."
19
+#define MSG_SD_INSERTED                     "\xb6\xb0\xc4\xde\x20\xbf\xb3\xc6\xad\xb3\xbb\xda\xcf\xbc\xc0" // "Card inserted"
20
+#define MSG_SD_REMOVED                      "\xb6\xb0\xc4\xde\xb6xde\xb1\xd8\xcf\xbe\xdd"                  // "Card removed"
21
+#define MSG_MAIN                            "\xd2\xb2\xdd"                                                 // "Main"
22
+#define MSG_AUTOSTART                       "\xbc\xde\xc4\xde\xb3\xb6\xb2\xbc"                             // "Autostart"
23
+#define MSG_DISABLE_STEPPERS                "\xd3\xb0\xc0\xb0\xc3\xde\xdd\xb9\xde\xdd\x20\xb5\xcc"         // "Disable steppers"
24
+#define MSG_AUTO_HOME                       "\xb9\xde\xdd\xc3\xdd\xc6\xb2\xc4\xde\xb3"                     // "Auto home"
25
+#define MSG_SET_HOME_OFFSETS                "\xb7\xbc\xde\xad\xdd\xb5\xcc\xbe\xaf\xc4\xbe\xaf\xc3\xb2"     // "Set home offsets"
26
+#define MSG_SET_ORIGIN                      "\xb7\xbc\xde\xad\xdd\xbe\xaf\xc4"                             // "Set origin"
27
+#define MSG_PREHEAT_PLA                     "PLA \xd6\xc8\xc2"                                             // "Preheat PLA"
28
+#define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
29
+#define MSG_PREHEAT_PLA_ALL                 MSG_PREHEAT_PLA " \xbd\xcd\xde\xc3"                            // " All"
30
+#define MSG_PREHEAT_PLA_BEDONLY             MSG_PREHEAT_PLA " \xcd\xde\xaf\xc4\xde"                        // "Bed"
31
+#define MSG_PREHEAT_PLA_SETTINGS            MSG_PREHEAT_PLA " \xbe\xaf\xc3\xb2"                            // "conf"
32
+#define MSG_PREHEAT_ABS                     "ABS \xd6\xc8\xc2"                                             // "Preheat ABS"
33
+#define MSG_PREHEAT_ABS_N                   MSG_PREHEAT_ABS " "
34
+#define MSG_PREHEAT_ABS_ALL                 MSG_PREHEAT_ABS " \xbd\xcd\xde\xc3"                            // " All"
35
+#define MSG_PREHEAT_ABS_BEDONLY             MSG_PREHEAT_ABS " \xcd\xde\xaf\xc4\xde"                        // "Bed"
36
+#define MSG_PREHEAT_ABS_SETTINGS            MSG_PREHEAT_ABS " \xbe\xaf\xc3\xb2"                            // "conf"
37
+#define MSG_COOLDOWN                        "\xb6\xc8\xc2\xc3\xb2\xbc"                                     // "Cooldown"
38
+#define MSG_SWITCH_PS_ON                    "\xc3\xde\xdd\xb9\xdd\xde\x20\xb5\xdd"                         // "Switch power on"
39
+#define MSG_SWITCH_PS_OFF                   "\xc3\xde\xdd\xb9\xdd\xde\x20\xb5\xcc"                         // "Switch power off"
40
+#define MSG_EXTRUDE                         "\xb5\xbc\xc0\xde\xbc"                                         // "Extrude"
41
+#define MSG_RETRACT                         "\xd8\xc4\xd7\xb8\xc4"                                         // "Retract"
42
+#define MSG_MOVE_AXIS                       "\xbc\xde\xb8\xb2\xc4\xde\xb3"                                 // "Move axis"
43
+#define MSG_MOVE_X                          "X\xbc\xde\xb8\x20\xb2\xc4\xde\xb3"                            // "Move X"
44
+#define MSG_MOVE_Y                          "Y\xbc\xde\xb8\x20\xb2\xc4\xde\xb3"                            // "Move Y"
45
+#define MSG_MOVE_Z                          "Z\xbc\xde\xb8\x20\xb2\xc4\xde\xb3"                            // "Move Z"
46
+#define MSG_MOVE_E                          "\xb4\xb8\xbd\xc4\xd9\xb0\xc0\xde\xb0"                         // "Extruder"
47
+#define MSG_MOVE_01MM                       "0.1mm \xb2\xc4\xde\xb3"                                       // "Move 0.1mm"
48
+#define MSG_MOVE_1MM                        "  1mm \xb2\xc4\xde\xb3"                                       // "Move 1mm"
49
+#define MSG_MOVE_10MM                       " 10mm \xb2\xc4\xde\xb3"                                       // "Move 10mm"
50
+#define MSG_SPEED                           "\xbd\xcb\xdf\xb0\xc4\xde"                                     // "Speed"
51
+#define MSG_NOZZLE                          "\xc9\xbd\xde\xd9"                                             // "Nozzle"
52
+#define MSG_BED                             "\xcd\xde\xaf\xc4\xde"                                         // "Bed"
53
+#define MSG_FAN_SPEED                       "\xcc\xa7\xdd\xbf\xb8\xc4\xde"                                 // "Fan speed"
54
+#define MSG_FLOW                            "\xb5\xb8\xd8\xd8\xae\xb3"                                     // "Flow"
55
+#define MSG_CONTROL                         "\xba\xdd\xc4\xdb\xb0\xd9"                                     // "Control"
56
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
57
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
58
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
59
+#define MSG_AUTOTEMP                        "\xbc\xde\xc4\xde\xb3\xb5\xdd\xc4\xde"                         // "Autotemp"
60
+#define MSG_ON                              "On "
61
+#define MSG_OFF                             "Off"
62
+#define MSG_PID_P                           "PID-P"
63
+#define MSG_PID_I                           "PID-I"
64
+#define MSG_PID_D                           "PID-D"
65
+#define MSG_PID_C                           "PID-C"
66
+#define MSG_ACC                             "\xb6\xbf\xb8\xc4\xde"                                         // "Accel"
67
+#define MSG_VXY_JERK                        "Vxy-jerk"
68
+#define MSG_VZ_JERK                         "Vz-jerk"
69
+#define MSG_VE_JERK                         "Ve-jerk"
70
+#define MSG_VMAX                            "Vmax "
71
+#define MSG_X                               "x"
72
+#define MSG_Y                               "y"
73
+#define MSG_Z                               "z"
74
+#define MSG_E                               "e"
75
+#define MSG_VMIN                            "Vmin"
76
+#define MSG_VTRAV_MIN                       "VTrav min"
77
+#define MSG_AMAX                            "Amax "
78
+#define MSG_A_RETRACT                       "A-retract"
79
+#define MSG_XSTEPS                          "Xsteps/mm"
80
+#define MSG_YSTEPS                          "Ysteps/mm"
81
+#define MSG_ZSTEPS                          "Zsteps/mm"
82
+#define MSG_ESTEPS                          "Esteps/mm"
83
+#define MSG_TEMPERATURE                     "\xb5\xdd\xc4\xde"                                             // "Temperature"
84
+#define MSG_MOTION                          "\xb3\xba\xde\xb7\xbe\xaf\xc3\xb2"                             // "Motion"
85
+#define MSG_VOLUMETRIC                      "\xcc\xa8\xd7\xd2\xdd\xc4"                                     // "Filament"
86
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
87
+#define MSG_FILAMENT_SIZE_EXTRUDER_0        "Fil. Dia. 1"
88
+#define MSG_FILAMENT_SIZE_EXTRUDER_1        "Fil. Dia. 2"
89
+#define MSG_FILAMENT_SIZE_EXTRUDER_2        "Fil. Dia. 3"
90
+#define MSG_FILAMENT_SIZE_EXTRUDER_3        "Fil. Dia. 4"
91
+#define MSG_CONTRAST                        "LCD\xba\xdd\xc4\xd7\xbd\xc4"                                  // "LCD contrast"
92
+#define MSG_STORE_EPROM                     "\xd2\xd3\xd8\xcd\xb6\xb8\xc9\xb3"                             // "Store memory"
93
+#define MSG_LOAD_EPROM                      "\xd2\xd3\xd8\xb6\xd7\xd6\xd0\ba\xd0"                          // "Load memory"
94
+#define MSG_RESTORE_FAILSAFE                "\xbe\xaf\xc3\xb2\xd8\xbe\xaf\xc4"                             // "Restore failsafe"
95
+#define MSG_REFRESH                         "\xd8\xcc\xda\xaf\xbc\xad"                                     // "Refresh"
96
+#define MSG_WATCH                           "\xb2\xdd\xcc\xab"                                             // "Info screen"
97
+#define MSG_PREPARE                         "\xbc\xde\xad\xdd\xcb\xde\xbe\xaf\xc3\xb2"                     // "Prepare"
98
+#define MSG_TUNE                            "\xc1\xae\xb3\xbe\xb2"                                         // "Tune"
99
+#define MSG_PAUSE_PRINT                     "\xb2\xc1\xbc\xde\xc3\xb2\xbc"                                 // "Pause print"
100
+#define MSG_RESUME_PRINT                    "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2"                         // "Resume print"
101
+#define MSG_STOP_PRINT                      "\xcc\xdf\xd8\xdd\xc4\xc3\xb2\xbc"                             // "Stop print"
102
+#define MSG_CARD_MENU                       "SD\xb6\xb0\xc4\xde\xb6\xd7\xcc\xdf\xd8\xdd\xc4"               // "Print from SD"
103
+#define MSG_NO_CARD                         "SD\xb6\xb0\xc4\xde\xb6\xde\xb1\xd8\xcf\xbe\xdd"               // "No SD card"
104
+#define MSG_DWELL                           "\xbd\xd8\xb0\xcc\xdf"                                         // "Sleep..."
105
+#define MSG_USERWAIT                        "\xbc\xca\xde\xd7\xb9\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2"         // "Wait for user..."
106
+#define MSG_RESUMING                        "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2"                         // "Resuming print"
107
+#define MSG_PRINT_ABORTED                   "\xcc\xdf\xd8\xdd\xc4\xc1\xad\xb3\xbc\xbb\xda\xcf\xbc\xc0"     // "Print aborted"
108
+#define MSG_NO_MOVE                         "\xb3\xba\xde\xb7\xcf\xbe\xdd"                                 // "No move."
109
+#define MSG_KILLED                          "\xbc\xae\xb3\xb7\xae"                                         // "KILLED. "
110
+#define MSG_STOPPED                         "\xc3\xb2\xbc\xbc\xcf\xbc\xc0"                                 // "STOPPED. "
111
+#define MSG_CONTROL_RETRACT                 "Retract mm"
112
+#define MSG_CONTROL_RETRACT_SWAP            "Swap Re.mm"
113
+#define MSG_CONTROL_RETRACTF                "Retract  V"
114
+#define MSG_CONTROL_RETRACT_ZLIFT           "Hop mm"
115
+#define MSG_CONTROL_RETRACT_RECOVER         "UnRet +mm"
116
+#define MSG_CONTROL_RETRACT_RECOVER_SWAP    "S UnRet+mm"
117
+#define MSG_CONTROL_RETRACT_RECOVERF        "UnRet  V"
118
+#define MSG_AUTORETRACT                     "AutoRetr."
119
+#define MSG_FILAMENTCHANGE                  "\xcc\xa8\xd7\xd2\xdd\xc4\xba\xb3\xb6\xdd"                     // "Change filament"
120
+#define MSG_INIT_SDCARD                     "SD\xb6\xb0\xc4\xde\xbb\xb2\xd6\xd0\xba\xd0"                   // "Init. SD card"
121
+#define MSG_CNG_SDCARD                      "SD\xb6\xb0\xc4\xde\xba\xb3\xb6\xdd"                           // "Change SD card"
122
+#define MSG_ZPROBE_OUT                      "Z\xcc\xdf\xdb\xb0\xcc\xde \xcd\xde\xaf\xc4\xee\xb6\xde\xb2"   // "Z probe out. bed"
123
+#define MSG_POSITION_UNKNOWN                "\xb9\xde\xdd\xc3\xdd\xcaXY\xb2\xc4\xde\xb3\xba\xdeZ"           // "Home X/Y before Z"
124
+#define MSG_ZPROBE_ZOFFSET                  "Z\xb5\xcc\xbe\xaf\xc4"                                        // "Z Offset"
125
+#define MSG_BABYSTEP_X                      "\xcb\xde\xc4\xde\xb3 X"                                       // "Babystep X"
126
+#define MSG_BABYSTEP_Y                      "\xcb\xde\xc4\xde\xb3 Y"                                       // "Babystep Y"
127
+#define MSG_BABYSTEP_Z                      "\xcb\xde\xc4\xde\xb3 Z"                                       // "Babystep Z"
128
+#define MSG_ENDSTOP_ABORT                   "Endstop abort"
129
+
130
+/* These are from language.h. PLEASE DON'T TRANSLATE! All translatable messages can be found in language_en.h
131
+#define MSG_HEATING                         "\xb6\xc8\xc2\xc1\xad\xb3..."                                  // "Heating..."
132
+#define MSG_HEATING_COMPLETE                "\xb6\xc8\xc2\xb6\xdd\xd8x\xae\xb3"                            // "Heating done."
133
+#define MSG_BED_HEATING                     "\xcd\xde\xaf\xc4\xde\xb6\xc8\xc2\xc1\xad\xb3"                 // "Bed Heating."
134
+#define MSG_BED_DONE                        "\xcd\xde\xaf\xc4\xde\xb6\xc8\xc2\xb6\xdd\xd8x\xae\xb3"        // "Bed done."
135
+#define MSG_ENDSTOPS_HIT                    "endstops hit: "
136
+                   ^ typho
137
+*/
138
+
139
+#ifdef DELTA_CALIBRATION_MENU
140
+    #define MSG_DELTA_CALIBRATE             "Delta Calibration"
141
+    #define MSG_DELTA_CALIBRATE_X           "Calibrate X"
142
+    #define MSG_DELTA_CALIBRATE_Y           "Calibrate Y"
143
+    #define MSG_DELTA_CALIBRATE_Z           "Calibrate Z"
144
+    #define MSG_DELTA_CALIBRATE_CENTER      "Calibrate Center"
145
+#endif // DELTA_CALIBRATION_MENU
146
+
147
+#endif // LANGUAGE_KANA_H

+ 142
- 0
Marlin/language_kana_utf8.h View File

@@ -0,0 +1,142 @@
1
+/**
2
+ * Japanese (Kana UTF8 version)
3
+ *
4
+ * LCD Menu Messages
5
+ * See also documentation/LCDLanguageFont.md
6
+ *
7
+ */
8
+ 
9
+#ifndef LANGUAGE_KANA_UTF_H
10
+#define LANGUAGE_KANA_UTF_H
11
+
12
+#define MAPPER_E382E383
13
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
14
+//#define SIMULATE_ROMFONT
15
+#define DISPLAY_CHARSET_ISO10646_KANA
16
+
17
+// This is very crude replacement of the codes used in language_kana.h from somebody who really does not know what he is doing.
18
+// Just to show the potential benefit of unicode. 
19
+// This translation can be improved by using the full charset of unicode codeblock U+30A0 to U+30FF.
20
+
21
+// 片仮名表示定義
22
+#define WELCOME_MSG                         MACHINE_NAME " ready."
23
+#define MSG_SD_INSERTED                     "セード ンウニユウアレマシタ"          // "Card inserted"
24
+#define MSG_SD_REMOVED                      "セードゼアリマセン"               // "Card removed"
25
+#define MSG_MAIN                            "ナイン"                        // "Main"
26
+#define MSG_AUTOSTART                       "ヅドウセイシ"                   // "Autostart"
27
+#define MSG_DISABLE_STEPPERS                "モーターデンゲン オフ"             // "Disable steppers"
28
+#define MSG_AUTO_HOME                       "ゲンテンニイドウ"                // "Auto home"
29
+#define MSG_SET_HOME_OFFSETS                "キヅユンオフセツトセツテイ"         // "Set home offsets"
30
+#define MSG_SET_ORIGIN                      "キヅユンセツト"                 // "Set origin"
31
+#define MSG_PREHEAT_PLA                     "PLA ヨネシ"                    // "Preheat PLA"
32
+#define MSG_PREHEAT_PLA_N                   MSG_PREHEAT_PLA " "
33
+#define MSG_PREHEAT_PLA_ALL                 MSG_PREHEAT_PLA " スベテ"      // " All"
34
+#define MSG_PREHEAT_PLA_BEDONLY             MSG_PREHEAT_PLA " ベツド"    // "Bed"
35
+#define MSG_PREHEAT_PLA_SETTINGS            MSG_PREHEAT_PLA " セツテイ"     // "conf"
36
+#define MSG_PREHEAT_ABS                     "ABS ヨネシ"                    // "Preheat ABS"
37
+#define MSG_PREHEAT_ABS_N                   MSG_PREHEAT_ABS " "
38
+#define MSG_PREHEAT_ABS_ALL                 MSG_PREHEAT_ABS " スベテ"      // " All"
39
+#define MSG_PREHEAT_ABS_BEDONLY             MSG_PREHEAT_ABS " ベツド"    // "Bed"
40
+#define MSG_PREHEAT_ABS_SETTINGS            MSG_PREHEAT_ABS " セツテイ"    // "conf"
41
+#define MSG_COOLDOWN                        "セネシテイシ"                    // "Cooldown"
42
+#define MSG_SWITCH_PS_ON                    "デンケゾ オン"                 // "Switch power on"
43
+#define MSG_SWITCH_PS_OFF                   "デンケゾ オフ"                 // "Switch power off"
44
+#define MSG_EXTRUDE                         "オシダシ"                     // "Extrude"
45
+#define MSG_RETRACT                         "リトラケト"                     // "Retract"
46
+#define MSG_MOVE_AXIS                       "ヅケイドウ"                   // "Move axis"
47
+#define MSG_MOVE_X                          "Xヅケ イドウ"                 // "Move X"
48
+#define MSG_MOVE_Y                          "Yヅケ イドウ"                 // "Move Y"
49
+#define MSG_MOVE_Z                          "Zヅケ イドウ"                 // "Move Z"
50
+#define MSG_MOVE_E                          "エケストルーダー"                // "Extruder"
51
+#define MSG_MOVE_01MM                       "0.1mm イドウ"                 // "Move 0.1mm"
52
+#define MSG_MOVE_1MM                        "  1mm イドウ"                 // "Move 1mm"
53
+#define MSG_MOVE_10MM                       " 10mm イドウ"                 // "Move 10mm"
54
+#define MSG_SPEED                           "スヒ゜ード"                     // "Speed"
55
+#define MSG_NOZZLE                          "ノズル"                       // "Nozzle"
56
+#define MSG_BED                             "ベツド"                     // "Bed"
57
+#define MSG_FAN_SPEED                       "ファンンケド"                    // "Fan speed"
58
+#define MSG_FLOW                            "オケリリョウ"                     // "Flow"
59
+#define MSG_CONTROL                         "コントロール"                    // "Control"
60
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
61
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
62
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
63
+#define MSG_AUTOTEMP                        "ヅドウオンド"                  // "Autotemp"
64
+#define MSG_ON                              "On "
65
+#define MSG_OFF                             "Off"
66
+#define MSG_PID_P                           "PID-P"
67
+#define MSG_PID_I                           "PID-I"
68
+#define MSG_PID_D                           "PID-D"
69
+#define MSG_PID_C                           "PID-C"
70
+#define MSG_ACC                             "センケド"                     // "Accel"
71
+#define MSG_VXY_JERK                        "Vxy-jerk"
72
+#define MSG_VZ_JERK                         "Vz-jerk"
73
+#define MSG_VE_JERK                         "Ve-jerk"
74
+#define MSG_VMAX                            "Vmax "
75
+#define MSG_X                               "x"
76
+#define MSG_Y                               "y"
77
+#define MSG_Z                               "z"
78
+#define MSG_E                               "e"
79
+#define MSG_VMIN                            "Vmin"
80
+#define MSG_VTRAV_MIN                       "VTrav min"
81
+#define MSG_AMAX                            "Amax "
82
+#define MSG_A_RETRACT                       "A-retract"
83
+#define MSG_XSTEPS                          "Xsteps/mm"
84
+#define MSG_YSTEPS                          "Ysteps/mm"
85
+#define MSG_ZSTEPS                          "Zsteps/mm"
86
+#define MSG_ESTEPS                          "Esteps/mm"
87
+#define MSG_TEMPERATURE                     "オンド"                      // "Temperature"
88
+#define MSG_MOTION                          "ウゴキセツテイ"                // "Motion"
89
+#define MSG_VOLUMETRIC                      "フィラナント"                    // "Filament"
90
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
91
+#define MSG_FILAMENT_SIZE_EXTRUDER_0        "Fil. Dia. 1"
92
+#define MSG_FILAMENT_SIZE_EXTRUDER_1        "Fil. Dia. 2"
93
+#define MSG_FILAMENT_SIZE_EXTRUDER_2        "Fil. Dia. 3"
94
+#define MSG_FILAMENT_SIZE_EXTRUDER_3        "Fil. Dia. 4"
95
+#define MSG_CONTRAST                        "LCDコントラスト"                 // "LCD contrast"
96
+#define MSG_STORE_EPROM                     "ナモリヘセケノウ"                 // "Store memory"
97
+#define MSG_LOAD_EPROM                      "ナモリセラヨミbaミ"               // "Load memory"
98
+#define MSG_RESTORE_FAILSAFE                "セツテイリセツト"               // "Restore failsafe"
99
+#define MSG_REFRESH                         "リフレツシユ"                  // "Refresh"
100
+#define MSG_WATCH                           "インフォ"                     // "Info screen"
101
+#define MSG_PREPARE                         "ヅユンゼセツテイ"             //"Prepare"
102
+#define MSG_TUNE                            "チョウセイ"                    // "Tune"
103
+#define MSG_PAUSE_PRINT                     "イチヅテイシ"                  // "Pause print"
104
+#define MSG_RESUME_PRINT                    "プリントアイセイ"                // "Resume print"
105
+#define MSG_STOP_PRINT                      "プリントテイシ"                 // "Stop print"
106
+#define MSG_CARD_MENU                       "SDセードセラプリント"            // "Print from SD"
107
+#define MSG_NO_CARD                         "SDセードゼアリマセン"            // "No SD card"
108
+#define MSG_DWELL                           "スリープ"                     // "Sleep..."
109
+#define MSG_USERWAIT                        "シバラケオマチケダアイ"           // "Wait for user..."
110
+#define MSG_RESUMING                        "プリントアイセイ"                // "Resuming print"
111
+#define MSG_PRINT_ABORTED                   "プリントチユウシアレマシタ"          // "Print aborted"
112
+#define MSG_NO_MOVE                         "ウゴキマセン"                  // "No move."
113
+#define MSG_KILLED                          "ショウキョ"                     // "KILLED. "
114
+#define MSG_STOPPED                         "テイシシマシタ"                  // "STOPPED. "
115
+#define MSG_CONTROL_RETRACT                 "Retract mm"
116
+#define MSG_CONTROL_RETRACT_SWAP            "Swap Re.mm"
117
+#define MSG_CONTROL_RETRACTF                "Retract  V"
118
+#define MSG_CONTROL_RETRACT_ZLIFT           "Hop mm"
119
+#define MSG_CONTROL_RETRACT_RECOVER         "UnRet +mm"
120
+#define MSG_CONTROL_RETRACT_RECOVER_SWAP    "S UnRet+mm"
121
+#define MSG_CONTROL_RETRACT_RECOVERF        "UnRet  V"
122
+#define MSG_AUTORETRACT                     "AutoRetr."
123
+#define MSG_FILAMENTCHANGE                  "フィラナントコウセン"               // "Change filament"
124
+#define MSG_INIT_SDCARD                     "SDセードアイヨミコミ"              // "Init. SD card"
125
+#define MSG_CNG_SDCARD                      "SDセードコウセン"                // "Change SD card"
126
+#define MSG_ZPROBE_OUT                      "Zプローブ ベツトnゼイ"         // "Z probe out. bed"
127
+#define MSG_POSITION_UNKNOWN                "ゲンテンハXYイドウゴZ"           // "Home X/Y before Z"
128
+#define MSG_ZPROBE_ZOFFSET                  "Zオフセツト"                   // "Z Offset"
129
+#define MSG_BABYSTEP_X                      "ゼドウ X"                    // "Babystep X"
130
+#define MSG_BABYSTEP_Y                      "ゼドウ Y"                    // "Babystep Y"
131
+#define MSG_BABYSTEP_Z                      "ゼドウ Z"                    // "Babystep Z"
132
+#define MSG_ENDSTOP_ABORT                   "Endstop abort"
133
+
134
+#ifdef DELTA_CALIBRATION_MENU
135
+    #define MSG_DELTA_CALIBRATE             "Delta Calibration"
136
+    #define MSG_DELTA_CALIBRATE_X           "Calibrate X"
137
+    #define MSG_DELTA_CALIBRATE_Y           "Calibrate Y"
138
+    #define MSG_DELTA_CALIBRATE_Z           "Calibrate Z"
139
+    #define MSG_DELTA_CALIBRATE_CENTER      "Calibrate Center"
140
+#endif // DELTA_CALIBRATION_MENU
141
+
142
+#endif // LANGUAGE_KANA_UTF_H

+ 9
- 4
Marlin/language_nl.h View File

@@ -2,12 +2,17 @@
2 2
  * Dutch
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_NL_H
9 9
 #define LANGUAGE_NL_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " gereed."
12 17
 #define MSG_SD_INSERTED                     "Kaart ingestoken"
13 18
 #define MSG_SD_REMOVED                      "Kaart verwijderd"
@@ -46,9 +51,9 @@
46 51
 #define MSG_FAN_SPEED                       "Fan snelheid"
47 52
 #define MSG_FLOW                            "Flow"
48 53
 #define MSG_CONTROL                         "Control"
49
-#define MSG_MIN                             " \002 Min"
50
-#define MSG_MAX                             " \002 Max"
51
-#define MSG_FACTOR                          " \002 Fact"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
52 57
 #define MSG_AUTOTEMP                        "Autotemp"
53 58
 #define MSG_ON                              "Aan "
54 59
 #define MSG_OFF                             "Uit"

+ 10
- 5
Marlin/language_pl.h View File

@@ -2,12 +2,17 @@
2 2
  * Polish
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_PL_H
9 9
 #define LANGUAGE_PL_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " gotowy."
12 17
 #define MSG_SD_INSERTED                     "Karta wlozona"
13 18
 #define MSG_SD_REMOVED                      "Karta usunieta"
@@ -46,9 +51,9 @@
46 51
 #define MSG_FAN_SPEED                       "Obroty wiatraka"
47 52
 #define MSG_FLOW                            "Przeplyw"
48 53
 #define MSG_CONTROL                         "Ustawienia"
49
-#define MSG_MIN                             " \002 Min"
50
-#define MSG_MAX                             " \002 Max"
51
-#define MSG_FACTOR                          " \002 Mnoznik"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Mnoznik"
52 57
 #define MSG_AUTOTEMP                        "Auto. temperatura"
53 58
 #define MSG_ON                              "Wl. "
54 59
 #define MSG_OFF                             "Wyl."
@@ -84,7 +89,7 @@
84 89
 #define MSG_STORE_EPROM                     "Zapisz w pamieci"
85 90
 #define MSG_LOAD_EPROM                      "Wczytaj z pamieci"
86 91
 #define MSG_RESTORE_FAILSAFE                "Ustaw. fabryczne"
87
-#define MSG_REFRESH                         "\004Odswiez"
92
+#define MSG_REFRESH                         LCD_STR_REFRESH " Odswiez"
88 93
 #define MSG_WATCH                           "Ekran glowny"
89 94
 #define MSG_PREPARE                         "Przygotuj"
90 95
 #define MSG_TUNE                            "Strojenie"

+ 21
- 16
Marlin/language_pt-br.h View File

@@ -2,16 +2,21 @@
2 2
  * Portuguese (Brazil)
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_PT_BR_H
9 9
 #define LANGUAGE_PT_BR_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG							MACHINE_NAME " pronto."
12 17
 #define MSG_SD_INSERTED                     "Cartao inserido"
13 18
 #define MSG_SD_REMOVED                      "Cartao removido"
14
-#define MSG_MAIN                            " Menu principal \003"
19
+#define MSG_MAIN                            " Menu principal"
15 20
 #define MSG_AUTOSTART                       "Autostart"
16 21
 #define MSG_DISABLE_STEPPERS                " Apagar motores"
17 22
 #define MSG_AUTO_HOME                       "Ir para origen"
@@ -20,19 +25,19 @@
20 25
 #define MSG_PREHEAT_PLA                     "Pre-aquecer PLA"
21 26
 #define MSG_PREHEAT_PLA_N                   "Pre-aquecer PLA "
22 27
 #define MSG_PREHEAT_PLA_ALL                 "Pre-aq. PLA Tudo"
23
-#define MSG_PREHEAT_PLA_BEDONLY             "Pre-aq. PLA \002Base"
28
+#define MSG_PREHEAT_PLA_BEDONLY             "Pre-aq. PLA " LCD_STR_THERMOMETER "Base"
24 29
 #define MSG_PREHEAT_PLA_SETTINGS            "PLA setting"
25 30
 #define MSG_PREHEAT_ABS                     "Pre-aquecer ABS"
26 31
 #define MSG_PREHEAT_ABS_N                   "Pre-aquecer ABS "
27 32
 #define MSG_PREHEAT_ABS_ALL                 "Pre-aq. ABS Tudo"
28
-#define MSG_PREHEAT_ABS_BEDONLY             "Pre-aq. ABS \002Base"
33
+#define MSG_PREHEAT_ABS_BEDONLY             "Pre-aq. ABS " LCD_STR_THERMOMETER "Base"
29 34
 #define MSG_PREHEAT_ABS_SETTINGS            "ABS setting"
30 35
 #define MSG_COOLDOWN                        "Esfriar"
31 36
 #define MSG_SWITCH_PS_ON                    "Switch Power On"
32 37
 #define MSG_SWITCH_PS_OFF                   "Switch Power Off"
33 38
 #define MSG_EXTRUDE                         "Extrudar"
34 39
 #define MSG_RETRACT                         "Retrair"
35
-#define MSG_MOVE_AXIS                       "Mover eixo      \x7E"
40
+#define MSG_MOVE_AXIS                       "Mover eixo"
36 41
 #define MSG_MOVE_X                          "Move X"
37 42
 #define MSG_MOVE_Y                          "Move Y"
38 43
 #define MSG_MOVE_Z                          "Move Z"
@@ -41,14 +46,14 @@
41 46
 #define MSG_MOVE_1MM                        "Move 1mm"
42 47
 #define MSG_MOVE_10MM                       "Move 10mm"
43 48
 #define MSG_SPEED                           "Velocidade"
44
-#define MSG_NOZZLE                          "\002Nozzle"
45
-#define MSG_BED                             "\002Base"
49
+#define MSG_NOZZLE                          LCD_STR_THERMOMETER " Nozzle"
50
+#define MSG_BED                             LCD_STR_THERMOMETER " Base"
46 51
 #define MSG_FAN_SPEED                       "Velocidade vento."
47 52
 #define MSG_FLOW                            "Fluxo"
48
-#define MSG_CONTROL                         "Controle \003"
49
-#define MSG_MIN                             "\002 Min"
50
-#define MSG_MAX                             "\002 Max"
51
-#define MSG_FACTOR                          "\002 Fact"
53
+#define MSG_CONTROL                         "Controle"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
52 57
 #define MSG_AUTOTEMP                        "Autotemp"
53 58
 #define MSG_ON                              "On "
54 59
 #define MSG_OFF                             "Off"
@@ -76,7 +81,7 @@
76 81
 #define MSG_TEMPERATURE                     "Temperatura"
77 82
 #define MSG_MOTION                          "Movimento"
78 83
 #define MSG_VOLUMETRIC                      "Filament"
79
-#define MSG_VOLUMETRIC_ENABLED		        "E in mm3"
84
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
80 85
 #define MSG_FILAMENT_SIZE_EXTRUDER_0        "Fil. Dia. 1"
81 86
 #define MSG_FILAMENT_SIZE_EXTRUDER_1        "Fil. Dia. 2"
82 87
 #define MSG_FILAMENT_SIZE_EXTRUDER_2        "Fil. Dia. 3"
@@ -84,10 +89,10 @@
84 89
 #define MSG_STORE_EPROM                     "Guardar memoria"
85 90
 #define MSG_LOAD_EPROM                      "Carregar memoria"
86 91
 #define MSG_RESTORE_FAILSAFE                "Rest. de emergen."
87
-#define MSG_REFRESH                         "\004Recarregar"
88
-#define MSG_WATCH                           "Monitorar   \003"
89
-#define MSG_PREPARE                         "Preparar \x7E"
90
-#define MSG_TUNE                            "Tune    \x7E"
92
+#define MSG_REFRESH                         LCD_STR_REFRESH " Recarregar"
93
+#define MSG_WATCH                           "Monitorar"
94
+#define MSG_PREPARE                         "Preparar"
95
+#define MSG_TUNE                            "Tune"
91 96
 #define MSG_PAUSE_PRINT                     "Pausar impressao"
92 97
 #define MSG_RESUME_PRINT                    "Resumir impressao"
93 98
 #define MSG_STOP_PRINT                      "Parar impressao"

+ 21
- 16
Marlin/language_pt.h View File

@@ -2,16 +2,21 @@
2 2
  * Portuguese
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_PT_H
9 9
 #define LANGUAGE_PT_H
10 10
 
11
+#define MAPPER_NON
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_1
15
+
11 16
 #define WELCOME_MSG                         MACHINE_NAME " pronto."
12 17
 #define MSG_SD_INSERTED                     "Cartao inserido"
13 18
 #define MSG_SD_REMOVED                      "Cartao removido"
14
-#define MSG_MAIN                            " Menu principal \003"
19
+#define MSG_MAIN                            " Menu principal"
15 20
 #define MSG_AUTOSTART                       "Autostart"
16 21
 #define MSG_DISABLE_STEPPERS                " Desligar motores"
17 22
 #define MSG_AUTO_HOME                       "Ir para home"
@@ -20,19 +25,19 @@
20 25
 #define MSG_PREHEAT_PLA                     "Pre-aquecer PLA"
21 26
 #define MSG_PREHEAT_PLA_N                   "Pre-aquecer PLA "
22 27
 #define MSG_PREHEAT_PLA_ALL                 "Pre-aq. PLA Tudo"
23
-#define MSG_PREHEAT_PLA_BEDONLY             "Pre-aq. PLA \002Base"
28
+#define MSG_PREHEAT_PLA_BEDONLY             "Pre-aq. PLA " LCD_STR_THERMOMETER "Base"
24 29
 #define MSG_PREHEAT_PLA_SETTINGS            "PLA definicoes"
25 30
 #define MSG_PREHEAT_ABS                     "Pre-aquecer ABS"
26 31
 #define MSG_PREHEAT_ABS_N                   "Pre-aquecer ABS "
27 32
 #define MSG_PREHEAT_ABS_ALL                 "Pre-aq. ABS Tudo"
28
-#define MSG_PREHEAT_ABS_BEDONLY             "Pre-aq. ABS \002Base"
33
+#define MSG_PREHEAT_ABS_BEDONLY             "Pre-aq. ABS " LCD_STR_THERMOMETER "Base"
29 34
 #define MSG_PREHEAT_ABS_SETTINGS            "ABS definicoes"
30 35
 #define MSG_COOLDOWN                        "Arrefecer"
31 36
 #define MSG_SWITCH_PS_ON                    "Ligar"
32 37
 #define MSG_SWITCH_PS_OFF                   "Desligar"
33 38
 #define MSG_EXTRUDE                         "Extrudir"
34 39
 #define MSG_RETRACT                         "Retrair"
35
-#define MSG_MOVE_AXIS                       "Mover eixo      \x7E"
40
+#define MSG_MOVE_AXIS                       "Mover eixo"
36 41
 #define MSG_MOVE_X                          "Mover X"
37 42
 #define MSG_MOVE_Y                          "Mover Y"
38 43
 #define MSG_MOVE_Z                          "Mover Z"
@@ -41,14 +46,14 @@
41 46
 #define MSG_MOVE_1MM                        "Mover 1mm"
42 47
 #define MSG_MOVE_10MM                       "Mover 10mm"
43 48
 #define MSG_SPEED                           "Velocidade"
44
-#define MSG_NOZZLE                          "\002Bico"
45
-#define MSG_BED                             "\002Base"
49
+#define MSG_NOZZLE                          LCD_STR_THERMOMETER "Bico"
50
+#define MSG_BED                             LCD_STR_THERMOMETER "Base"
46 51
 #define MSG_FAN_SPEED                       "Velocidade do ar."
47 52
 #define MSG_FLOW                            "Fluxo"
48
-#define MSG_CONTROL                         "Controlo \003"
49
-#define MSG_MIN                             "\002 Min"
50
-#define MSG_MAX                             "\002 Max"
51
-#define MSG_FACTOR                          "\002 Fact"
53
+#define MSG_CONTROL                         "Controlo"
54
+#define MSG_MIN                             LCD_STR_THERMOMETER " Min"
55
+#define MSG_MAX                             LCD_STR_THERMOMETER " Max"
56
+#define MSG_FACTOR                          LCD_STR_THERMOMETER " Fact"
52 57
 #define MSG_AUTOTEMP                        "Autotemp"
53 58
 #define MSG_ON                              "On "
54 59
 #define MSG_OFF                             "Off"
@@ -76,7 +81,7 @@
76 81
 #define MSG_TEMPERATURE                     "Temperatura"
77 82
 #define MSG_MOTION                          "Movimento"
78 83
 #define MSG_VOLUMETRIC                      "Filamento"
79
-#define MSG_VOLUMETRIC_ENABLED		        "E in mm3"
84
+#define MSG_VOLUMETRIC_ENABLED              "E in mm3"
80 85
 #define MSG_FILAMENT_SIZE_EXTRUDER_0        "Fil. Diam. 1"
81 86
 #define MSG_FILAMENT_SIZE_EXTRUDER_1        "Fil. Diam. 2"
82 87
 #define MSG_FILAMENT_SIZE_EXTRUDER_2        "Fil. Diam. 3"
@@ -84,10 +89,10 @@
84 89
 #define MSG_STORE_EPROM                     "Guardar na memoria"
85 90
 #define MSG_LOAD_EPROM                      "Carregar da memoria"
86 91
 #define MSG_RESTORE_FAILSAFE                "Rest. de emergen."
87
-#define MSG_REFRESH                         "\004Recarregar"
88
-#define MSG_WATCH                           "Monitorar   \003"
89
-#define MSG_PREPARE                         "Preparar \x7E"
90
-#define MSG_TUNE                            "Afinar    \x7E"
92
+#define MSG_REFRESH                         LCD_STR_REFRESH " Recarregar"
93
+#define MSG_WATCH                           "Monitorar"
94
+#define MSG_PREPARE                         "Preparar"
95
+#define MSG_TUNE                            "Afinar"
91 96
 #define MSG_PAUSE_PRINT                     "Pausar impressao"
92 97
 #define MSG_RESUME_PRINT                    "Resumir impressao"
93 98
 #define MSG_STOP_PRINT                      "Parar impressao"

+ 5
- 2
Marlin/language_ru.h View File

@@ -2,13 +2,16 @@
2 2
  * Russian
3 3
  *
4 4
  * LCD Menu Messages
5
- * Please note these are limited to 17 characters!
5
+ * See also documentation/LCDLanguageFont.md
6 6
  *
7 7
  */
8 8
 #ifndef LANGUAGE_RU_H
9 9
 #define LANGUAGE_RU_H
10 10
 
11
-#define LANGUAGE_RU
11
+#define MAPPER_D0D1                // For Cyrillic
12
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
13
+//#define SIMULATE_ROMFONT
14
+#define DISPLAY_CHARSET_ISO10646_5
12 15
 
13 16
 #define WELCOME_MSG                         MACHINE_NAME " Готов."
14 17
 #define MSG_SD_INSERTED                     "Карта вставлена"

+ 215
- 0
Marlin/language_test.h View File

@@ -0,0 +1,215 @@
1
+/**
2
+ * TEST
3
+ *
4
+ * LCD Menu Messages
5
+ * See also documentation/LCDLanguageFont.md
6
+ *
7
+ */
8
+#ifndef LANGUAGE_TEST_H
9
+#define LANGUAGE_TEST_H
10
+
11
+// Select ONE of the following Mappers. 
12
+// They decide what to do with a symbol in the area of [0x80:0xFF]. They take a symbol of this language file and make them point 
13
+// into an array with 128 cells, where they'll find the place of the symbol of the font in use.
14
+//
15
+// a.)For ASCII coded Language_xx.h files like (en) there are no occurrences of symbols above 0x7F so no mapper is needed. 
16
+//   If such a symbol appears it is mapped directly into the font. This is the case for the language files we used until now, with all the STR_XX or
17
+//   "\xxx" symbols. All Symbols are only one byte long.
18
+// b.) For Unicoded Language_xx.h files (currently ru, de and kana_utf8 ) the non ASCII [0x00-0x7F] symbols are represented by more then one byte.
19
+//   In the case of two bytes the first is pointing to a 'codepage' and the second to a place in the codepage. These codepages contain 64 symbols.
20
+//   So two of them can be mapped. For most of the European languages the necessary symbols are contained in the pages C2 and C3. Cyrillic uses D0 
21
+//   and D1.
22
+// c.) For katakana (one of the Japanese symbol sets) Unicode uses 3 bytes. Here the second byte also points to a codepage and byte 3 to the symbol.
23
+//   I hope the pages E282 and E283 are sufficient to write katakana.
24
+//   Kanji (an other Japanese symbol set) uses far more than two codepages. So currently I don't see a chance to map the Unicodes. Its not
25
+//   impossible to have a close to direct mapping but will need giant conversion tables and fonts (we don't want to have in a embedded system).
26
+
27
+
28
+#define MAPPER_NON         // For direct asci codes ( until now all languages except ru, de, fi, kana_utf8, ... )
29
+//#define MAPPER_C2C3        // For most European languages when language file is in utf8
30
+//#define MAPPER_D0D1        // For Cyrillic
31
+//#define MAPPER_E382E383    // For Katakana
32
+
33
+// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
34
+//#define SIMULATE_ROMFONT
35
+
36
+// Select the better font for full graphic displays.
37
+//#define DISPLAY_CHARSET_ISO10646_1
38
+//#define DISPLAY_CHARSET_ISO10646_5
39
+//#define DISPLAY_CHARSET_ISO10646_KANA
40
+
41
+
42
+
43
+// next 5 lines select variants in this file only
44
+#define DISPLAYTEST
45
+//#define WEST
46
+//#define CYRIL
47
+//#define KANA
48
+
49
+
50
+// TESTSTRINGS
51
+
52
+#define STRG_ASCII_2 " !\"#$%&'()*+,-./"
53
+#define STRG_ASCII_3 "0123456789:;<=>?"
54
+#define STRG_ASCII_4 "@ABCDEFGHIJKLMNO"
55
+#define STRG_ASCII_5 "PQRSTUVWXYZ[\]^_"
56
+#define STRG_ASCII_6 "`abcdefghijklmno"
57
+#define STRG_ASCII_7 "pqrstuvwxyz{|}~"
58
+
59
+#define STRG_C2_8 ""
60
+#define STRG_C2_9 ""
61
+#define STRG_C2_a " ¡¢£¤¥¦§¨©ª«¬­®¯"
62
+#define STRG_C2_b "°±²³´µ¶·¸¹º»¼½¾¿"
63
+#define STRG_C3_8 "ÈÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ"
64
+#define STRG_C3_9 "ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß"
65
+#define STRG_C3_a "àáâãäåæçèéêëìíîï"
66
+#define STRG_C3_b "ðñòóôõö÷øùúûüýþÿ"
67
+
68
+#define STRG_D0_8 "ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ"
69
+#define STRG_D0_9 "АБВГДЕЖЗИЙКЛМНОП"
70
+#define STRG_D0_a "РСТУФХЦЧШЩЪЫЬЭЮЯ"
71
+#define STRG_D0_b "абвгдежзийклмноп"
72
+#define STRG_D1_8 "рстуфхцчшщъыьэюя"
73
+#define STRG_D1_9 "ѐёђѓєѕіїјљњћќѝўџ"
74
+#define STRG_D1_a "ѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯ"
75
+#define STRG_D1_b "ѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿ"
76
+
77
+#define STRG_E382_8 "よめもゃやゅゆょよらりるれろゎわ"
78
+#define STRG_E382_9 "ゐゑをんゔゕゖ゗゘゙゚゛ ゜ゝゞゟ"
79
+#define STRG_E382_a "゠ァアィイゥウェエォオカガキギク"
80
+#define STRG_E382_b "グケゲコゴサザシジスズセゼソゾタ"
81
+#define STRG_E383_8 "トチヂッツヅテデトドナニヌネノハ"
82
+#define STRG_E383_9 "バパヒビピフブプヘベペホボポマミ"
83
+#define STRG_E383_a "ムメモャヤュユョヨラリルレロヮワ"
84
+#define STRG_E383_b "ヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ"
85
+
86
+#define STRG_OKTAL_0 "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017"
87
+#define STRG_OKTAL_1 "\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
88
+#define STRG_OKTAL_2 "\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057"
89
+#define STRG_OKTAL_3 "\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077"
90
+#define STRG_OKTAL_4 "\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117"
91
+#define STRG_OKTAL_5 "\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137"
92
+#define STRG_OKTAL_6 "\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157"
93
+#define STRG_OKTAL_7 "\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177"
94
+#define STRG_OKTAL_8 "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217"
95
+#define STRG_OKTAL_9 "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237"
96
+#define STRG_OKTAL_a "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257"
97
+#define STRG_OKTAL_b "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277"
98
+#define STRG_OKTAL_c "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317"
99
+#define STRG_OKTAL_d "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337"
100
+#define STRG_OKTAL_e "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357"
101
+#define STRG_OKTAL_f "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
102
+
103
+#ifdef DISPLAYTEST
104
+  #define WELCOME_MSG                         "Language TEST"
105
+
106
+  #define MSG_WATCH                           "Display test"
107
+  #define MSG_PREPARE                         STRG_OKTAL_b
108
+  #define MSG_CONTROL                         STRG_OKTAL_c
109
+#endif
110
+
111
+#ifdef WEST
112
+  #define WELCOME_MSG                         "Language TEST"
113
+
114
+  #define MSG_WATCH                           "\001\002\003\004\005\006\007\010\011"
115
+  #define MSG_PREPARE                         "UTF8"
116
+  #define MSG_CONTROL                         "ASCII"
117
+
118
+  //#define MSG_MAIN                            ".."
119
+  #define MSG_DISABLE_STEPPERS                STRG_C2_8
120
+  #define MSG_AUTO_HOME                       STRG_C2_9
121
+  #define MSG_SET_HOME_OFFSETS                STRG_C2_a
122
+  #define MSG_PREHEAT_PLA                     STRG_C2_b
123
+  #define MSG_PREHEAT_ABS                     STRG_C3_8
124
+  #define MSG_COOLDOWN                        STRG_C3_9
125
+  #define MSG_SWITCH_PS_OFF                   STRG_C3_a
126
+  #define MSG_MOVE_AXIS                       STRG_C3_b
127
+  
128
+  #define MSG_MAIN                            STRG_OKTAL_2
129
+  #define MSG_TEMPERATURE                     STRG_OKTAL_3
130
+  #define MSG_MOTION                          STRG_OKTAL_4
131
+  #define MSG_VOLUMETRIC                      STRG_OKTAL_5
132
+  #define MSG_CONTRAST                        STRG_OKTAL_6
133
+  #define MSG_RESTORE_FAILSAFE                STRG_OKTAL_7
134
+  
135
+  #define MSG_NOZZLE                          STRG_OKTAL_8
136
+  #define MSG_FAN_SPEED                       STRG_OKTAL_9
137
+  #define MSG_AUTOTEMP                        STRG_OKTAL_a
138
+  #define MSG_MIN                             STRG_OKTAL_b
139
+  #define MSG_MAX                             STRG_OKTAL_c
140
+  #define MSG_FACTOR                          STRG_OKTAL_d
141
+  #define MSG_PID_P                           STRG_OKTAL_e
142
+  #define MSG_PID_I                           STRG_OKTAL_f
143
+
144
+#endif
145
+
146
+#ifdef CYRIL
147
+  #define WELCOME_MSG                         "Language TEST"
148
+
149
+  #define MSG_WATCH                           "\001\002\003\004\005\006\007\010\011"
150
+  #define MSG_PREPARE                         "UTF8"
151
+  #define MSG_CONTROL                         "ASCII"
152
+
153
+  //#define MSG_MAIN                            ".."
154
+  #define MSG_DISABLE_STEPPERS                STRG_D0_8
155
+  #define MSG_AUTO_HOME                       STRG_D0_9
156
+  #define MSG_SET_HOME_OFFSETS                STRG_D0_a
157
+  #define MSG_PREHEAT_PLA                     STRG_D0_b
158
+  #define MSG_PREHEAT_ABS                     STRG_D1_8
159
+  #define MSG_COOLDOWN                        STRG_D1_9
160
+  #define MSG_SWITCH_PS_OFF                   STRG_D1_a
161
+  #define MSG_MOVE_AXIS                       STRG_D1_b
162
+  
163
+  #define MSG_MAIN                            STRG_OKTAL_2
164
+  #define MSG_TEMPERATURE                     STRG_OKTAL_3
165
+  #define MSG_MOTION                          STRG_OKTAL_4
166
+  #define MSG_VOLUMETRIC                      STRG_OKTAL_5
167
+  #define MSG_CONTRAST                        STRG_OKTAL_6
168
+  #define MSG_RESTORE_FAILSAFE                STRG_OKTAL_7
169
+  
170
+  #define MSG_NOZZLE                          STRG_OKTAL_8
171
+  #define MSG_FAN_SPEED                       STRG_OKTAL_9
172
+  #define MSG_AUTOTEMP                        STRG_OKTAL_a
173
+  #define MSG_MIN                             STRG_OKTAL_b
174
+  #define MSG_MAX                             STRG_OKTAL_c
175
+  #define MSG_FACTOR                          STRG_OKTAL_d
176
+  #define MSG_PID_P                           STRG_OKTAL_e
177
+  #define MSG_PID_I                           STRG_OKTAL_f
178
+
179
+#endif
180
+
181
+#if defined( KANA )
182
+  #define WELCOME_MSG                         "Language TEST"
183
+
184
+  #define MSG_WATCH                           "\001\002\003\004\005\006\007\010\011"
185
+  #define MSG_PREPARE                         "UTF8"
186
+  #define MSG_CONTROL                         "ASCII"
187
+
188
+  //#define MSG_MAIN                            ".."
189
+  #define MSG_DISABLE_STEPPERS                STRG_E382_8
190
+  #define MSG_AUTO_HOME                       STRG_E382_9
191
+  #define MSG_SET_HOME_OFFSETS                STRG_E382_a
192
+  #define MSG_PREHEAT_PLA                     STRG_E382_b
193
+  #define MSG_PREHEAT_ABS                     STRG_E383_8
194
+  #define MSG_COOLDOWN                        STRG_E383_9
195
+  #define MSG_SWITCH_PS_OFF                   STRG_E383_a
196
+  #define MSG_MOVE_AXIS                       STRG_E383_b
197
+  
198
+  #define MSG_MAIN                            STRG_OKTAL_2
199
+  #define MSG_TEMPERATURE                     STRG_OKTAL_3
200
+  #define MSG_MOTION                          STRG_OKTAL_4
201
+  #define MSG_VOLUMETRIC                      STRG_OKTAL_5
202
+  #define MSG_CONTRAST                        STRG_OKTAL_6
203
+  #define MSG_RESTORE_FAILSAFE                STRG_OKTAL_7
204
+  
205
+  #define MSG_NOZZLE                          STRG_OKTAL_8
206
+  #define MSG_FAN_SPEED                       STRG_OKTAL_9
207
+  #define MSG_AUTOTEMP                        STRG_OKTAL_a
208
+  #define MSG_MIN                             STRG_OKTAL_b
209
+  #define MSG_MAX                             STRG_OKTAL_c
210
+  #define MSG_FACTOR                          STRG_OKTAL_d
211
+  #define MSG_PID_P                           STRG_OKTAL_e
212
+  #define MSG_PID_I                           STRG_OKTAL_f
213
+#endif
214
+
215
+#endif // LANGUAGE_TEST_H

+ 9
- 13
Marlin/mesh_bed_leveling.cpp View File

@@ -1,20 +1,16 @@
1 1
 #include "mesh_bed_leveling.h"
2 2
 
3
-#if defined(MESH_BED_LEVELING)
3
+#ifdef MESH_BED_LEVELING
4 4
 
5
-mesh_bed_leveling mbl;
5
+  mesh_bed_leveling mbl;
6 6
 
7
-mesh_bed_leveling::mesh_bed_leveling() {
8
-    reset();
9
-}
10
-    
11
-void mesh_bed_leveling::reset() {
12
-    for (int y=0; y<MESH_NUM_Y_POINTS; y++) {
13
-        for (int x=0; x<MESH_NUM_X_POINTS; x++) {
14
-            z_values[y][x] = 0;
15
-        }
16
-    }
7
+  mesh_bed_leveling::mesh_bed_leveling() { reset(); }
8
+      
9
+  void mesh_bed_leveling::reset() {
17 10
     active = 0;
18
-}
11
+    for (int y = 0; y < MESH_NUM_Y_POINTS; y++)
12
+      for (int x = 0; x < MESH_NUM_X_POINTS; x++)
13
+        z_values[y][x] = 0;
14
+  }
19 15
 
20 16
 #endif  // MESH_BED_LEVELING

+ 29
- 33
Marlin/mesh_bed_leveling.h View File

@@ -2,11 +2,11 @@
2 2
 
3 3
 #if defined(MESH_BED_LEVELING)
4 4
 
5
-#define MESH_X_DIST ((MESH_MAX_X - MESH_MIN_X)/(MESH_NUM_X_POINTS - 1))
6
-#define MESH_Y_DIST ((MESH_MAX_Y - MESH_MIN_Y)/(MESH_NUM_Y_POINTS - 1))
5
+  #define MESH_X_DIST ((MESH_MAX_X - MESH_MIN_X)/(MESH_NUM_X_POINTS - 1))
6
+  #define MESH_Y_DIST ((MESH_MAX_Y - MESH_MIN_Y)/(MESH_NUM_Y_POINTS - 1))
7 7
 
8
-class mesh_bed_leveling {
9
-public:
8
+  class mesh_bed_leveling {
9
+  public:
10 10
     uint8_t active;
11 11
     float z_values[MESH_NUM_Y_POINTS][MESH_NUM_X_POINTS];
12 12
     
@@ -14,48 +14,44 @@ public:
14 14
     
15 15
     void reset();
16 16
     
17
-    float get_x(int i) { return MESH_MIN_X + MESH_X_DIST*i; }
18
-    float get_y(int i) { return MESH_MIN_Y + MESH_Y_DIST*i; }
17
+    float get_x(int i) { return MESH_MIN_X + MESH_X_DIST * i; }
18
+    float get_y(int i) { return MESH_MIN_Y + MESH_Y_DIST * i; }
19 19
     void set_z(int ix, int iy, float z) { z_values[iy][ix] = z; }
20 20
     
21 21
     int select_x_index(float x) {
22
-        int i = 1;
23
-        while (x > get_x(i) && i < MESH_NUM_X_POINTS-1) {
24
-            i++;
25
-        }
26
-        return i-1;
22
+      int i = 1;
23
+      while (x > get_x(i) && i < MESH_NUM_X_POINTS-1) i++;
24
+      return i - 1;
27 25
     }
28 26
     
29 27
     int select_y_index(float y) {
30
-        int i = 1;
31
-        while (y > get_y(i) && i < MESH_NUM_Y_POINTS-1) {
32
-            i++;
33
-        }
34
-        return i-1;
28
+      int i = 1;
29
+      while (y > get_y(i) && i < MESH_NUM_Y_POINTS - 1) i++;
30
+      return i - 1;
35 31
     }
36 32
     
37 33
     float calc_z0(float a0, float a1, float z1, float a2, float z2) {
38
-        float delta_z = (z2 - z1)/(a2 - a1);
39
-        float delta_a = a0 - a1;
40
-        return z1 + delta_a * delta_z;
34
+      float delta_z = (z2 - z1)/(a2 - a1);
35
+      float delta_a = a0 - a1;
36
+      return z1 + delta_a * delta_z;
41 37
     }
42 38
     
43 39
     float get_z(float x0, float y0) {
44
-        int x_index = select_x_index(x0);
45
-        int y_index = select_y_index(y0);
46
-        float z1 = calc_z0(x0,
47
-                           get_x(x_index), z_values[y_index][x_index],
48
-                           get_x(x_index+1), z_values[y_index][x_index+1]);
49
-        float z2 = calc_z0(x0,
50
-                           get_x(x_index), z_values[y_index+1][x_index],
51
-                           get_x(x_index+1), z_values[y_index+1][x_index+1]);
52
-        float z0 = calc_z0(y0,
53
-                           get_y(y_index), z1,
54
-                           get_y(y_index+1), z2);
55
-        return z0;
40
+      int x_index = select_x_index(x0);
41
+      int y_index = select_y_index(y0);
42
+      float z1 = calc_z0(x0,
43
+                         get_x(x_index), z_values[y_index][x_index],
44
+                         get_x(x_index+1), z_values[y_index][x_index+1]);
45
+      float z2 = calc_z0(x0,
46
+                         get_x(x_index), z_values[y_index+1][x_index],
47
+                         get_x(x_index+1), z_values[y_index+1][x_index+1]);
48
+      float z0 = calc_z0(y0,
49
+                         get_y(y_index), z1,
50
+                         get_y(y_index+1), z2);
51
+      return z0;
56 52
     }
57
-};
53
+  };
58 54
 
59
-extern mesh_bed_leveling mbl;
55
+  extern mesh_bed_leveling mbl;
60 56
 
61 57
 #endif  // MESH_BED_LEVELING

+ 1
- 1
Marlin/stepper.cpp View File

@@ -161,7 +161,7 @@ volatile signed char count_direction[NUM_AXIS] = { 1, 1, 1, 1 };
161 161
       Z2_STEP_WRITE(v); \
162 162
     }
163 163
   #else
164
-    #define Z_APPLY_STEP(v,Q) Z_STEP_WRITE(v), Z2_STEP_WRITE(v)
164
+    #define Z_APPLY_STEP(v,Q) { Z_STEP_WRITE(v); Z2_STEP_WRITE(v); }
165 165
   #endif
166 166
 #else
167 167
   #define Z_APPLY_DIR(v,Q) Z_DIR_WRITE(v)

+ 6
- 5
Marlin/temperature.cpp View File

@@ -53,10 +53,10 @@
53 53
 //============================= public variables ============================
54 54
 //===========================================================================
55 55
 
56
-int target_temperature[EXTRUDERS] = { 0 };
56
+int target_temperature[4] = { 0 };
57 57
 int target_temperature_bed = 0;
58
-int current_temperature_raw[EXTRUDERS] = { 0 };
59
-float current_temperature[EXTRUDERS] = { 0.0 };
58
+int current_temperature_raw[4] = { 0 };
59
+float current_temperature[4] = { 0.0 };
60 60
 int current_temperature_bed_raw = 0;
61 61
 float current_temperature_bed = 0.0;
62 62
 #ifdef TEMP_SENSOR_1_AS_REDUNDANT
@@ -1181,9 +1181,10 @@ static void set_current_temp_raw() {
1181 1181
   #endif
1182 1182
   #if HAS_TEMP_1
1183 1183
     #ifdef TEMP_SENSOR_1_AS_REDUNDANT
1184
-      redundant_temperature_raw =
1184
+      redundant_temperature_raw = raw_temp_value[1];
1185
+    #else
1186
+      current_temperature_raw[1] = raw_temp_value[1];
1185 1187
     #endif
1186
-    current_temperature_raw[1] = raw_temp_value[1];
1187 1188
     #if HAS_TEMP_2
1188 1189
       current_temperature_raw[2] = raw_temp_value[2];
1189 1190
       #if HAS_TEMP_3

+ 3
- 3
Marlin/temperature.h View File

@@ -41,10 +41,10 @@ void manage_heater(); //it is critical that this is called periodically.
41 41
 
42 42
 // low level conversion routines
43 43
 // do not use these routines and variables outside of temperature.cpp
44
-extern int target_temperature[EXTRUDERS];  
45
-extern float current_temperature[EXTRUDERS];
44
+extern int target_temperature[4];  
45
+extern float current_temperature[4];
46 46
 #ifdef SHOW_TEMP_ADC_VALUES
47
-  extern int current_temperature_raw[EXTRUDERS];
47
+  extern int current_temperature_raw[4];
48 48
   extern int current_temperature_bed_raw;
49 49
 #endif
50 50
 extern int target_temperature_bed;

+ 28
- 3
Marlin/ultralcd.cpp View File

@@ -911,7 +911,7 @@ static void lcd_control_motion_menu() {
911 911
   START_MENU();
912 912
   MENU_ITEM(back, MSG_CONTROL, lcd_control_menu);
913 913
   #ifdef ENABLE_AUTO_BED_LEVELING
914
-    MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, 0.0, 50);
914
+    MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
915 915
   #endif
916 916
   MENU_ITEM_EDIT(float5, MSG_ACC, &acceleration, 10, 99000);
917 917
   MENU_ITEM_EDIT(float3, MSG_VXY_JERK, &max_xy_jerk, 1, 990);
@@ -1137,7 +1137,32 @@ menu_edit_type(unsigned long, long5, ftostr5, 0.01)
1137 1137
 static void lcd_quick_feedback() {
1138 1138
   lcdDrawUpdate = 2;
1139 1139
   blocking_enc = millis() + 500;
1140
-  lcd_implementation_quick_feedback();
1140
+    
1141
+  #ifdef LCD_USE_I2C_BUZZER
1142
+    #ifndef LCD_FEEDBACK_FREQUENCY_HZ
1143
+      #define LCD_FEEDBACK_FREQUENCY_HZ 100
1144
+    #endif
1145
+    #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
1146
+      #define LCD_FEEDBACK_FREQUENCY_DURATION_MS (1000/6)
1147
+    #endif    
1148
+    lcd_buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ);
1149
+  #elif defined(BEEPER) && BEEPER > -1
1150
+    SET_OUTPUT(BEEPER);
1151
+    #ifndef LCD_FEEDBACK_FREQUENCY_HZ
1152
+      #define LCD_FEEDBACK_FREQUENCY_HZ 500
1153
+    #endif
1154
+    #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
1155
+      #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 50
1156
+    #endif
1157
+    const unsigned int delay = 1000000 / LCD_FEEDBACK_FREQUENCY_HZ / 2;
1158
+    int i = LCD_FEEDBACK_FREQUENCY_DURATION_MS * LCD_FEEDBACK_FREQUENCY_HZ / 1000;
1159
+    while (i--) {
1160
+      WRITE(BEEPER,HIGH);
1161
+      delayMicroseconds(delay);
1162
+      WRITE(BEEPER,LOW);
1163
+      delayMicroseconds(delay);
1164
+     }
1165
+  #endif
1141 1166
 }
1142 1167
 
1143 1168
 /** Menu action functions **/
@@ -1330,7 +1355,7 @@ void lcd_update() {
1330 1355
       blink++;     // Variable for fan animation and alive dot
1331 1356
       u8g.firstPage();
1332 1357
       do {
1333
-        u8g.setFont(FONT_MENU);
1358
+        lcd_setFont(FONT_MENU);
1334 1359
         u8g.setPrintPos(125, 0);
1335 1360
         if (blink % 2) u8g.setColorIndex(1); else u8g.setColorIndex(0); // Set color for the alive dot
1336 1361
         u8g.drawPixel(127, 63); // draw alive dot

+ 41
- 55
Marlin/ultralcd_implementation_hitachi_HD44780.h View File

@@ -179,25 +179,20 @@
179 179
 // 2 wire Non-latching LCD SR from:
180 180
 // https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection 
181 181
 #elif defined(SR_LCD_2W_NL)
182
-
183 182
   extern "C" void __cxa_pure_virtual() { while (1); }
184 183
   #include <LCD.h>
185 184
   #include <LiquidCrystal_SR.h>
186 185
   #define LCD_CLASS LiquidCrystal_SR
187 186
   LCD_CLASS lcd(SR_DATA_PIN, SR_CLK_PIN);
188
-
189 187
 #else
190 188
   // Standard directly connected LCD implementations
191
-  #ifdef LANGUAGE_RU
192
-    #include "LiquidCrystalRus.h"
193
-    #define LCD_CLASS LiquidCrystalRus
194
-  #else 
195
-    #include <LiquidCrystal.h>
196
-    #define LCD_CLASS LiquidCrystal
197
-  #endif  
189
+  #include <LiquidCrystal.h>
190
+  #define LCD_CLASS LiquidCrystal
198 191
   LCD_CLASS lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7);  //RS,Enable,D4,D5,D6,D7
199 192
 #endif
200 193
 
194
+#include "utf_mapper.h"
195
+
201 196
 #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT)
202 197
   static uint16_t progressBarTick = 0;
203 198
   #if PROGRESS_MSG_EXPIRE > 0
@@ -207,7 +202,7 @@
207 202
 #endif
208 203
 
209 204
 /* Custom characters defined in the first 8 characters of the LCD */
210
-#define LCD_STR_BEDTEMP     "\x00"
205
+#define LCD_STR_BEDTEMP     "\x00"  // this will have 'unexpected' results when used in a string!
211 206
 #define LCD_STR_DEGREE      "\x01"
212 207
 #define LCD_STR_THERMOMETER "\x02"
213 208
 #define LCD_STR_UPLEVEL     "\x03"
@@ -215,7 +210,8 @@
215 210
 #define LCD_STR_FOLDER      "\x05"
216 211
 #define LCD_STR_FEEDRATE    "\x06"
217 212
 #define LCD_STR_CLOCK       "\x07"
218
-#define LCD_STR_ARROW_RIGHT "\x7E"  /* from the default character set */
213
+//#define LCD_STR_ARROW_RIGHT "\x7E"  /* from the default character set. Only available on DISPLAY_CHARSET_HD44780_JAPAN - at this place!*/
214
+#define LCD_STR_ARROW_RIGHT ">"  /* from the default character set */
219 215
 
220 216
 static void lcd_set_custom_characters(
221 217
   #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT)
@@ -405,15 +401,30 @@ static void lcd_implementation_clear()
405 401
 {
406 402
     lcd.clear();
407 403
 }
404
+
408 405
 /* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */
409
-static void lcd_printPGM(const char* str)
410
-{
411
-    char c;
412
-    while((c = pgm_read_byte(str++)) != '\0')
413
-    {
414
-        lcd.write(c);
415
-    }
406
+char lcd_printPGM(const char* str) {
407
+  char c;
408
+  char n = 0;
409
+  while((c = pgm_read_byte(str++))) {
410
+      n += charset_mapper(c);
411
+  }
412
+  return n;
413
+}
414
+
415
+char lcd_print(char* str) {
416
+  char c, n = 0;;
417
+  unsigned char i = 0;
418
+  while((c = str[i++])) {
419
+      n += charset_mapper(c);
420
+  }
421
+  return n;
422
+}
423
+
424
+unsigned lcd_print(char c) {
425
+    return charset_mapper(c);
416 426
 }
427
+
417 428
 /*
418 429
 Possible status screens:
419 430
 16x2   |0123456789012345|
@@ -608,7 +619,7 @@ static void lcd_implementation_status_screen()
608 619
     }
609 620
   #endif //FILAMENT_LCD_DISPLAY
610 621
 
611
-  lcd.print(lcd_status_message);
622
+  lcd_print(lcd_status_message);
612 623
 }
613 624
 
614 625
 static void lcd_implementation_drawmenu_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char post_char) {
@@ -617,27 +628,26 @@ static void lcd_implementation_drawmenu_generic(bool sel, uint8_t row, const cha
617 628
   lcd.setCursor(0, row);
618 629
   lcd.print(sel ? pre_char : ' ');
619 630
   while ((c = pgm_read_byte(pstr)) && n > 0) {
620
-    lcd.print(c);
631
+    n -= lcd_print(c);
621 632
     pstr++;
622
-    if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--;
623 633
   }
624 634
   while(n--) lcd.print(' ');
625 635
   lcd.print(post_char);
626 636
   lcd.print(' ');
627 637
 }
638
+
628 639
 static void lcd_implementation_drawmenu_setting_edit_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char* data) {
629 640
   char c;
630 641
   uint8_t n = LCD_WIDTH - 1 - (LCD_WIDTH < 20 ? 1 : 2) - lcd_strlen(data);
631 642
   lcd.setCursor(0, row);
632 643
   lcd.print(sel ? pre_char : ' ');
633 644
   while ((c = pgm_read_byte(pstr)) && n > 0) {
634
-    lcd.print(c);
645
+    n -= lcd_print(c);
635 646
     pstr++;
636
-    if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--;
637 647
   }
638 648
   lcd.print(':');
639 649
   while (n--) lcd.print(' ');
640
-  lcd.print(data);
650
+  lcd_print(data);
641 651
 }
642 652
 static void lcd_implementation_drawmenu_setting_edit_generic_P(bool sel, uint8_t row, const char* pstr, char pre_char, const char* data) {
643 653
   char c;
@@ -645,14 +655,14 @@ static void lcd_implementation_drawmenu_setting_edit_generic_P(bool sel, uint8_t
645 655
   lcd.setCursor(0, row);
646 656
   lcd.print(sel ? pre_char : ' ');
647 657
   while ((c = pgm_read_byte(pstr)) && n > 0) {
648
-    lcd.print(c);
658
+    n -= lcd_print(c);
649 659
     pstr++;
650
-    if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--;
651 660
   }
652 661
   lcd.print(':');
653 662
   while (n--) lcd.print(' ');
654 663
   lcd_printPGM(data);
655 664
 }
665
+
656 666
 #define lcd_implementation_drawmenu_setting_edit_int3(sel, row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, '>', itostr3(*(data)))
657 667
 #define lcd_implementation_drawmenu_setting_edit_float3(sel, row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, '>', ftostr3(*(data)))
658 668
 #define lcd_implementation_drawmenu_setting_edit_float32(sel, row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, '>', ftostr32(*(data)))
@@ -679,8 +689,9 @@ void lcd_implementation_drawedit(const char* pstr, char* value) {
679 689
   lcd_printPGM(pstr);
680 690
   lcd.print(':');
681 691
   lcd.setCursor(LCD_WIDTH - (LCD_WIDTH < 20 ? 0 : 1) - lcd_strlen(value), 1);
682
-  lcd.print(value);
692
+  lcd_print(value);
683 693
 }
694
+
684 695
 static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename, uint8_t concat) {
685 696
   char c;
686 697
   uint8_t n = LCD_WIDTH - concat;
@@ -691,9 +702,8 @@ static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* ps
691 702
     longFilename[n] = '\0';
692 703
   }
693 704
   while ((c = *filename) && n > 0) {
694
-    lcd.print(c);
705
+    n -= lcd_print(c);
695 706
     filename++;
696
-    n--;
697 707
   }
698 708
   while (n--) lcd.print(' ');
699 709
 }
@@ -701,40 +711,16 @@ static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* ps
701 711
 static void lcd_implementation_drawmenu_sdfile(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename) {
702 712
   lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 1);
703 713
 }
714
+
704 715
 static void lcd_implementation_drawmenu_sddirectory(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename) {
705 716
   lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 2);
706 717
 }
718
+
707 719
 #define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0])
708 720
 #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
709 721
 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
710 722
 #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
711 723
 
712
-static void lcd_implementation_quick_feedback()
713
-{
714
-  #ifdef LCD_USE_I2C_BUZZER
715
-    #if defined(LCD_FEEDBACK_FREQUENCY_DURATION_MS) && defined(LCD_FEEDBACK_FREQUENCY_HZ)
716
-      lcd_buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ);
717
-    #else
718
-      lcd_buzz(1000/6, 100);
719
-    #endif
720
-  #elif defined(BEEPER) && BEEPER > -1
721
-    SET_OUTPUT(BEEPER);
722
-    #if !defined(LCD_FEEDBACK_FREQUENCY_HZ) || !defined(LCD_FEEDBACK_FREQUENCY_DURATION_MS)
723
-      const unsigned int delay = 100;
724
-      uint8_t i = 10;
725
-    #else
726
-      const unsigned int delay = 1000000 / LCD_FEEDBACK_FREQUENCY_HZ / 2;
727
-      int8_t i = LCD_FEEDBACK_FREQUENCY_DURATION_MS * LCD_FEEDBACK_FREQUENCY_HZ / 1000;
728
-    #endif
729
-    while (i--) {
730
-      WRITE(BEEPER,HIGH);
731
-      delayMicroseconds(delay);
732
-      WRITE(BEEPER,LOW);
733
-      delayMicroseconds(delay);
734
-    }
735
-  #endif
736
-}
737
-
738 724
 #ifdef LCD_HAS_STATUS_INDICATORS
739 725
 static void lcd_implementation_update_indicators()
740 726
 {

+ 252
- 0
Marlin/utf_mapper.h View File

@@ -0,0 +1,252 @@
1
+#ifndef UTF_MAPPER_H
2
+#define UTF_MAPPER_H
3
+
4
+#include  "language.h"
5
+
6
+#ifdef DOGLCD
7
+  #define HARDWARE_CHAR_OUT u8g.print
8
+#else
9
+  #define HARDWARE_CHAR_OUT lcd.write
10
+#endif
11
+
12
+#if !(defined( SIMULATE_ROMFONT )) && defined( DOGLCD )
13
+  #if defined( DISPLAY_CHARSET_ISO10646_1 )
14
+    #define MAPPER_ONE_TO_ONE
15
+  #elif defined( DISPLAY_CHARSET_ISO10646_5 )
16
+    #define MAPPER_ONE_TO_ONE
17
+  #elif defined( DISPLAY_CHARSET_ISO10646_KANA )
18
+    #define MAPPER_ONE_TO_ONE
19
+  #endif
20
+#else // SIMULATE_ROMFONT
21
+  #if defined( DISPLAY_CHARSET_HD44780_JAPAN )
22
+    #if defined( MAPPER_C2C3 )
23
+      const PROGMEM uint8_t utf_recode[] =
24
+           { // 0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f          This is fair for symbols
25
+             0x20,0x3f,0xec,0xed,0x3f,0x5c,0x7c,0x3f,0x22,0x63,0x61,0x7f,0x3f,0x3f,0x52,0xb0,  // c2a
26
+  //          ' '       ¢    £         ­    l         "    c    a    «              R
27
+             0xdf,0x3f,0x32,0x33,0x27,0xe4,0xf1,0xa5,0x2c,0x31,0xdf,0x7e,0x3f,0x3f,0x3f,0x3f,  // c2b but relatively bad for letters.
28
+  //          °         2    3    `    N    p    .    ,    1    °    »
29
+             0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,  // c38
30
+  //                              ä
31
+             0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xef,0x78,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0xe2,  // c39 missing characters display as '?'
32
+  //                                        ö     x                       ü              ß
33
+             0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,  // c3a
34
+  //                              ä
35
+             0x3f,0xee,0x3f,0x3f,0x3f,0x3f,0xef,0xfd,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0x3f   // c3b
36
+  //               n                        ö    ÷                        ü
37
+           };
38
+    #elif defined( MAPPER_E382E383 )
39
+      const PROGMEM uint8_t utf_recode[] =
40
+           { // 0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f
41
+             0x3d,0xb1,0xb1,0xa8,0xb2,0xa9,0xb3,0xaa,0xb4,0xab,0xb5,0xb6,0xb6,0xb7,0xb7,0xb8,  // e382a Please test and correct
42
+  //          =    ア    ア    ィ    イ    ゥ    ウ    ェ    エ    ォ    オ   ガ    ガ    キ   キ    ク
43
+             0xb8,0xb9,0xb9,0xba,0xba,0xbb,0xbb,0xbc,0xbc,0xbd,0xbd,0xbe,0xbe,0xbf,0xbf,0xc0,  // e382b
44
+  //          ク    ケ    ケ   コ    コ    サ    サ    シ    シ   ス    ス    セ    セ    ソ   ソ    タ
45
+             0xc0,0xc1,0xc1,0xc2,0xc2,0xc2,0xc3,0xc3,0xc4,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,  // e3838
46
+  //          タ    チ    チ    ッ    ッ    ッ    テ   テ    ト    ト    ナ    ニ    ヌ    ネ   ノ    ハ
47
+             0xca,0xca,0xcb,0xcb,0xcb,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xce,0xce,0xce,0xcf,0xd0,  // e3839
48
+  //          ハ    ハ    ヒ   ヒ    ヒ     フ    フ   フ    ヘ    ヘ    ヘ    ホ    ホ    ホ   マ    ミ
49
+             0xd1,0xd2,0xd3,0xd4,0xd4,0xd5,0xd5,0xae,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdc,  // e383a
50
+  //          ム    メ    モ    ャ   ャ    ユ    ユ    ョ    ヨ    ラ    リ    ル    レ    ロ   ワ    ワ
51
+             0xec,0xa7,0xa6,0xdd,0xcc,0x3f,0x3f,0x3f,0x3f,0x3f,0xa6,0xa5,0xb0,0xa4,0xa4,0x3f   // e383b
52
+  //          ヰ    ヱ    ヲ    ン    フ    ?    ?   ?    ?    ?    ヲ    ・    ー    ヽ    ヽ   ?
53
+           };
54
+    #elif defined( MAPPER_D0D1 )
55
+      #error( "Cyrillic on a japanese dsplay makes no sense. There are no matching symbols.");
56
+    #endif
57
+
58
+  #elif defined( DISPLAY_CHARSET_HD44780_WESTERN )
59
+    #if defined( MAPPER_C2C3 )
60
+    :
61
+      const PROGMEM uint8_t utf_recode[] =
62
+           { // 0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f   This is relative complete.
63
+             0x20,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0x22,0xa9,0xaa,0xab,0x3f,0x3f,0xae,0x3f,  // c2a ¡¢£¤¥¦§¨©ª«¬­®¯
64
+  //         ' '   ¡    ¢    £    ¤    ¥    ¦    §    "    ©    ª    «    ?    ?    ®    ?
65
+             0xb0,0xb1,0xb2,0xb3,0x27,0xb5,0xb6,0xb7,0x2c,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,  // c2b °±²³´µ¶·¸¹º»¼½¾¿
66
+  //          °    ±    ³    ²    ?    µ    ¶    ·    ,    ¹    º    »    ¼    ½    ¾    ¿
67
+             0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,  // c38 ÀÁÃÄÅÆÇÈÉÊËÌÍÎÏ
68
+  //          À    Á    Â    Ã    Ä    Å    Æ    Ç    È    É    Ê    Ë    Ì    Í    Î    Ï
69
+             0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,  // c39 ÐÑÓÔÕÖ×ØÙÚÛÜÝÞß
70
+  //          Ð    Ñ    Ò    Ó    Ô    Õ    Ö    ×    Ø    Ù    Ú    Û    Ü    Ý    Þ    ß
71
+             0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,  // c3a àáãäåæçèéêëìíîï 
72
+  //          à    á    â    ã    ä    å    æ    ç    è    é    ê    ë    ì    í    î    ï
73
+             0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff   // c3b ðñóôõö÷øùúûüýþÿ
74
+  //          ð    ñ    ò    ó    ô    õ    ö    ÷    ø    ù    ú    û    ü    ý    þ    ÿ
75
+           };
76
+    #elif defined( MAPPER_D0D1 )
77
+      #define MAPPER_D0D1_MOD
78
+      const PROGMEM uint8_t utf_recode[] =
79
+           {//0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f
80
+             0x41,0x80,0x42,0x92,0x81,0x45,0x82,0x83,0x84,0x85,0x4b,0x86,0x4d,0x48,0x4f,0x87,  // d0a
81
+  //          A    Б    B    Г    Д    E    Ж    З    И    Й    K    Л    M    H    O    П
82
+             0x50,0x43,0x54,0x88,0xd8,0x58,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad,  // d0b
83
+  //          P    C    T    У    Ф    X    Ч    ч    Ш    Щ    Ъ    Ы    b    Э    Ю    Я
84
+             0x61,0x36,0x42,0x92,0x81,0x65,0x82,0xb3,0x84,0x85,0x6b,0x86,0x4d,0x48,0x6f,0x87,  // d18
85
+  //          a    6    B    Г    Д    e    Ж    ³    И    Й    k    Л    M    H    o    П
86
+             0x70,0x63,0x54,0x79,0xd8,0x78,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad   // d19
87
+  //          p    c    T    y    Ф    x    Ч    ч    Ш    Щ    Ъ    Ы    b    Э    Ю    Я
88
+            };
89
+    #elif defined( MAPPER_E382E383 )
90
+      #error( "Katakana on a western display makes no sense. There are no matching symbols." );
91
+    #endif
92
+
93
+  #elif defined( DISPLAY_CHARSET_HD44780_CYRILLIC )
94
+    #if defined( MAPPER_D0D1 )
95
+      #define MAPPER_D0D1_MOD
96
+      // it is a Russian alphabet translation
97
+      // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё
98
+      const PROGMEM uint8_t utf_recode[] =
99
+             { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,   // unicode U+0400 to U+047f
100
+  //            A   Б->Ё  B    Г    Д    E    Ж    З      // 0  Ѐ Ё Ђ Ѓ Є Ѕ І Ї
101
+               0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8,   //    Ј Љ Њ Ћ Ќ Ѝ Ў Џ
102
+  //            И    Й    K    Л    M    H    O    П      // 1  А Б В Г Д Е Ж З
103
+               0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,   //    И Й К Л М Н О П
104
+  //            P    C    T    У    Ф    X    Ч    ч      // 2  Р С Т У Ф Х Г Ч
105
+               0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1,   //    Ш Щ Ъ Ы Ь Э Ю Я
106
+  //            Ш    Щ    Ъ    Ы    b    Э    Ю    Я      // 3  а б в г д е ж з
107
+               0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,   //    и й к л м н о п
108
+  //            a   б->ё  в    г    д    e    ж    з      // 4  р с т у ф х ц ч
109
+               0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe,   //    ш щ ъ ы ь э ю я
110
+  //            и    й    к    л    м    н    o    п      // 5  ѐ ё ђ ѓ є ѕ і ї
111
+               0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,   //    ј љ њ ћ ќ ѝ ў џ
112
+  //            p    c    т    y    ф    x    ц    ч      // 6  Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ
113
+               0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7    //    Ѫ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ
114
+  //            ш    щ    ъ    ы    ь    э    ю    я      // 7  Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ
115
+             };                                           //    ѻ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ
116
+    #elif defined( MAPPER_C2C3 )
117
+      #error( "Western languages on a cyrillic display makes no sense. There are no matching symbols." );
118
+    #elif defined( MAPPER_E382E383 )
119
+      #error( "Katakana on a cyrillic display makes no sense. There are no matching symbols." );
120
+    #endif
121
+  #else
122
+    #error("Something went wrong in the selection of DISPLAY_CHARSET_HD44780's");
123
+  #endif // DISPLAY_CHARSET_HD44780_CYRILLIC
124
+#endif // SIMULATE_ROMFONT
125
+
126
+#if defined( MAPPER_NON )
127
+  char charset_mapper(char c){
128
+    HARDWARE_CHAR_OUT( c );
129
+    return 1;
130
+  }
131
+#elif defined( MAPPER_C2C3 )
132
+  uint8_t utf_hi_char; // UTF-8 high part
133
+  bool seen_c2 = false;
134
+  char charset_mapper(char c){
135
+    uint8_t d = c;
136
+    if ( d >= 0x80 ) { // UTF-8 handling
137
+      if ( (d >= 0xc0) && (!seen_c2) ) {
138
+        utf_hi_char = d - 0xc2;
139
+        seen_c2 = true;
140
+        return 0;
141
+      }
142
+      else if (seen_c2){
143
+        d &= 0x3f;
144
+        #ifndef MAPPER_ONE_TO_ONE
145
+          HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) );
146
+        #else
147
+          HARDWARE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ;
148
+        #endif
149
+      }
150
+      else {
151
+          HARDWARE_CHAR_OUT('?');
152
+      }
153
+    }
154
+    else {
155
+      HARDWARE_CHAR_OUT((char) c );
156
+    }
157
+    seen_c2 = false;
158
+    return 1;
159
+  }
160
+#elif defined( MAPPER_D0D1_MOD )
161
+  uint8_t utf_hi_char; // UTF-8 high part
162
+  bool seen_d5 = false;
163
+  char charset_mapper(char c){
164
+    // it is a Russian alphabet translation
165
+    // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё
166
+    uint8_t d = c;
167
+    if ( d >= 0x80 ) { // UTF-8 handling
168
+      if ((d >= 0xd0) && (!seen_d5)) {
169
+        utf_hi_char = d - 0xd0;
170
+        seen_d5 = true;
171
+        return 0;
172
+      } else if (seen_d5) {
173
+          d &= 0x3f;
174
+          if ( !utf_hi_char && ( d == 1 )) {
175
+            HARDWARE_CHAR_OUT((char) 0xa2 ); // Ё
176
+        } else if ((utf_hi_char == 1) && (d == 0x11)) {
177
+            HARDWARE_CHAR_OUT((char) 0xb5 ); // ё
178
+          } else {
179
+            HARDWARE_CHAR_OUT((char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x10 ) );
180
+          }
181
+        }
182
+        else {
183
+          HARDWARE_CHAR_OUT('?');
184
+        }
185
+    } else {
186
+      HARDWARE_CHAR_OUT((char) c );
187
+    }
188
+    seen_d5 = false;
189
+    return 1;
190
+  }
191
+#elif defined( MAPPER_D0D1 )
192
+  uint8_t utf_hi_char; // UTF-8 high part
193
+  bool seen_d5 = false;
194
+  char charset_mapper(char c){
195
+    uint8_t d = c;
196
+    if ( d >= 0x80u ) { // UTF-8 handling
197
+      if ((d >= 0xd0u) && (!seen_d5)) {
198
+        utf_hi_char = d - 0xd0u;
199
+        seen_d5 = true;
200
+        return 0;
201
+      } else if (seen_d5) {
202
+          d &= 0x3fu;
203
+        #ifndef MAPPER_ONE_TO_ONE
204
+          HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) );
205
+        #else
206
+          HARDWARE_CHAR_OUT( (char) (0xa0u + ( utf_hi_char << 6 ) + d ) ) ;
207
+        #endif
208
+      } else {
209
+        HARDWARE_CHAR_OUT('?');
210
+      }
211
+    } else {
212
+      HARDWARE_CHAR_OUT((char) c );
213
+    }
214
+    seen_d5 = false;
215
+    return 1;
216
+  }
217
+#elif defined( MAPPER_E382E383 )
218
+  uint8_t utf_hi_char; // UTF-8 high part
219
+  bool seen_e3 = false;
220
+  bool seen_82_83 = false;
221
+  char charset_mapper(char c){
222
+  uint8_t d = c;
223
+    if ( d >= 0x80 ) { // UTF-8 handling
224
+      if ( (d == 0xe3) && (seen_e3 == false)) {
225
+        seen_e3 = true;
226
+        return 0;      // eat 0xe3
227
+      } else if ( (d >= 0x82) && (seen_e3 == true) && (seen_82_83 == false)) {
228
+        utf_hi_char = d - 0x82;
229
+        seen_82_83 = true;
230
+        return 0;
231
+      } else if ((seen_e3 == true) && (seen_82_83 == true)){
232
+        d &= 0x3f;
233
+        #ifndef MAPPER_ONE_TO_ONE
234
+          HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) );
235
+        #else
236
+          HARDWARE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d ) ) ;
237
+        #endif
238
+      } else {
239
+        HARDWARE_CHAR_OUT((char) '?' );
240
+      }
241
+    } else {
242
+      HARDWARE_CHAR_OUT((char) c );
243
+    }
244
+    seen_e3 = false;
245
+    seen_82_83 = false;
246
+    return 1;
247
+  }
248
+#else
249
+  #error "You have to define one of the DISPLAY_INPUT_CODE_MAPPERs in your language_xx.h file" // should not occur because (en) will set.
250
+#endif // code mappers
251
+
252
+#endif // UTF_MAPPER_H

+ 31
- 55
Marlin/vector_3.cpp View File

@@ -26,57 +26,40 @@ vector_3::vector_3() : x(0), y(0), z(0) { }
26 26
 
27 27
 vector_3::vector_3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) { }
28 28
 
29
-vector_3 vector_3::cross(vector_3 left, vector_3 right)
30
-{
29
+vector_3 vector_3::cross(vector_3 left, vector_3 right) {
31 30
 	return vector_3(left.y * right.z - left.z * right.y,
32 31
 		left.z * right.x - left.x * right.z,
33 32
 		left.x * right.y - left.y * right.x);
34 33
 }
35 34
 
36
-vector_3 vector_3::operator+(vector_3 v) 
37
-{
38
-	return vector_3((x + v.x), (y + v.y), (z + v.z));
39
-}
40
-
41
-vector_3 vector_3::operator-(vector_3 v) 
42
-{
43
-	return vector_3((x - v.x), (y - v.y), (z - v.z));
44
-}
35
+vector_3 vector_3::operator+(vector_3 v) { return vector_3((x + v.x), (y + v.y), (z + v.z)); }
36
+vector_3 vector_3::operator-(vector_3 v) { return vector_3((x - v.x), (y - v.y), (z - v.z)); }
45 37
 
46
-vector_3 vector_3::get_normal() 
47
-{
38
+vector_3 vector_3::get_normal() {
48 39
 	vector_3 normalized = vector_3(x, y, z);
49 40
 	normalized.normalize();
50 41
 	return normalized;
51 42
 }
52 43
 
53
-float vector_3::get_length() 
54
-{
55
-	float length = sqrt((x * x) + (y * y) + (z * z));
56
-	return length;
57
-}
58
- 
59
-void vector_3::normalize()
60
-{
44
+float vector_3::get_length() { return sqrt((x * x) + (y * y) + (z * z)); }
45
+
46
+void vector_3::normalize() {
61 47
 	float length = get_length();
62 48
 	x /= length;
63 49
 	y /= length;
64 50
 	z /= length;
65 51
 }
66 52
 
67
-void vector_3::apply_rotation(matrix_3x3 matrix)
68
-{
53
+void vector_3::apply_rotation(matrix_3x3 matrix) {
69 54
 	float resultX = x * matrix.matrix[3*0+0] + y * matrix.matrix[3*1+0] + z * matrix.matrix[3*2+0];
70 55
 	float resultY = x * matrix.matrix[3*0+1] + y * matrix.matrix[3*1+1] + z * matrix.matrix[3*2+1];
71 56
 	float resultZ = x * matrix.matrix[3*0+2] + y * matrix.matrix[3*1+2] + z * matrix.matrix[3*2+2];
72
-
73 57
 	x = resultX;
74 58
 	y = resultY;
75 59
 	z = resultZ;
76 60
 }
77 61
 
78
-void vector_3::debug(char* title)
79
-{
62
+void vector_3::debug(const char title[]) {
80 63
 	SERIAL_PROTOCOL(title);
81 64
 	SERIAL_PROTOCOLPGM(" x: ");
82 65
 	SERIAL_PROTOCOL_F(x, 6);
@@ -87,8 +70,7 @@ void vector_3::debug(char* title)
87 70
 	SERIAL_EOL;
88 71
 }
89 72
 
90
-void apply_rotation_xyz(matrix_3x3 matrix, float &x, float& y, float& z)
91
-{
73
+void apply_rotation_xyz(matrix_3x3 matrix, float &x, float& y, float& z) {
92 74
 	vector_3 vector = vector_3(x, y, z);
93 75
 	vector.apply_rotation(matrix);
94 76
 	x = vector.x;
@@ -96,48 +78,41 @@ void apply_rotation_xyz(matrix_3x3 matrix, float &x, float& y, float& z)
96 78
 	z = vector.z;
97 79
 }
98 80
 
99
-matrix_3x3 matrix_3x3::create_from_rows(vector_3 row_0, vector_3 row_1, vector_3 row_2)
100
-{
101
-        //row_0.debug("row_0");
102
-        //row_1.debug("row_1");
103
-        //row_2.debug("row_2");
81
+matrix_3x3 matrix_3x3::create_from_rows(vector_3 row_0, vector_3 row_1, vector_3 row_2) {
82
+  //row_0.debug("row_0");
83
+  //row_1.debug("row_1");
84
+  //row_2.debug("row_2");
104 85
 	matrix_3x3 new_matrix;
105 86
 	new_matrix.matrix[0] = row_0.x; new_matrix.matrix[1] = row_0.y; new_matrix.matrix[2] = row_0.z; 
106 87
 	new_matrix.matrix[3] = row_1.x; new_matrix.matrix[4] = row_1.y; new_matrix.matrix[5] = row_1.z; 
107 88
 	new_matrix.matrix[6] = row_2.x; new_matrix.matrix[7] = row_2.y; new_matrix.matrix[8] = row_2.z; 
108
-        //new_matrix.debug("new_matrix");
109
-        
89
+  //new_matrix.debug("new_matrix");
110 90
 	return new_matrix;
111 91
 }
112 92
 
113
-void matrix_3x3::set_to_identity()
114
-{
93
+void matrix_3x3::set_to_identity() {
115 94
 	matrix[0] = 1; matrix[1] = 0; matrix[2] = 0;
116 95
 	matrix[3] = 0; matrix[4] = 1; matrix[5] = 0;
117 96
 	matrix[6] = 0; matrix[7] = 0; matrix[8] = 1;
118 97
 }
119 98
 
120
-matrix_3x3 matrix_3x3::create_look_at(vector_3 target)
121
-{
122
-    vector_3 z_row = target.get_normal();
123
-    vector_3 x_row = vector_3(1, 0, -target.x/target.z).get_normal();
124
-    vector_3 y_row = vector_3::cross(z_row, x_row).get_normal();
99
+matrix_3x3 matrix_3x3::create_look_at(vector_3 target) {
100
+  vector_3 z_row = target.get_normal();
101
+  vector_3 x_row = vector_3(1, 0, -target.x/target.z).get_normal();
102
+  vector_3 y_row = vector_3::cross(z_row, x_row).get_normal();
125 103
 
126
-   // x_row.debug("x_row");
127
-   // y_row.debug("y_row");
128
-   // z_row.debug("z_row");
104
+  // x_row.debug("x_row");
105
+  // y_row.debug("y_row");
106
+  // z_row.debug("z_row");
129 107
 
130
- 
131
-     // create the matrix already correctly transposed
132
-    matrix_3x3 rot = matrix_3x3::create_from_rows(x_row, y_row, z_row);
108
+  // create the matrix already correctly transposed
109
+  matrix_3x3 rot = matrix_3x3::create_from_rows(x_row, y_row, z_row);
133 110
 
134
- //   rot.debug("rot");
135
-    return rot;
111
+  // rot.debug("rot");
112
+  return rot;
136 113
 }
137 114
 
138
-
139
-matrix_3x3 matrix_3x3::transpose(matrix_3x3 original)
140
-{
115
+matrix_3x3 matrix_3x3::transpose(matrix_3x3 original) {
141 116
   matrix_3x3 new_matrix;
142 117
   new_matrix.matrix[0] = original.matrix[0]; new_matrix.matrix[1] = original.matrix[3]; new_matrix.matrix[2] = original.matrix[6]; 
143 118
   new_matrix.matrix[3] = original.matrix[1]; new_matrix.matrix[4] = original.matrix[4]; new_matrix.matrix[5] = original.matrix[7]; 
@@ -145,11 +120,12 @@ matrix_3x3 matrix_3x3::transpose(matrix_3x3 original)
145 120
   return new_matrix;
146 121
 }
147 122
 
148
-void matrix_3x3::debug(char* title) {
123
+void matrix_3x3::debug(const char title[]) {
149 124
   SERIAL_PROTOCOLLN(title);
150 125
   int count = 0;
151 126
   for(int i=0; i<3; i++) {
152 127
     for(int j=0; j<3; j++) {
128
+      if (matrix[count] >= 0.0) SERIAL_PROTOCOLPGM("+");
153 129
       SERIAL_PROTOCOL_F(matrix[count], 6);
154 130
       SERIAL_PROTOCOLPGM(" ");
155 131
       count++;
@@ -158,5 +134,5 @@ void matrix_3x3::debug(char* title) {
158 134
   }
159 135
 }
160 136
 
161
-#endif // #ifdef ENABLE_AUTO_BED_LEVELING
137
+#endif // ENABLE_AUTO_BED_LEVELING
162 138
 

+ 2
- 2
Marlin/vector_3.h View File

@@ -37,7 +37,7 @@ struct vector_3
37 37
 	float get_length();
38 38
 	vector_3 get_normal();
39 39
 
40
-	void debug(char* title);
40
+	void debug(const char title[]);
41 41
 	
42 42
 	void apply_rotation(matrix_3x3 matrix);
43 43
 };
@@ -52,7 +52,7 @@ struct matrix_3x3
52 52
 
53 53
 	void set_to_identity();
54 54
 
55
-	void debug(char* title);
55
+	void debug(const char title[]);
56 56
 };
57 57
 
58 58
 

+ 1
- 0
README.md View File

@@ -10,6 +10,7 @@
10 10
     * [Auto Bed Leveling](/Documentation/BedLeveling.md)
11 11
     * [Filament Sensor](/Documentation/FilamentSensor.md)
12 12
     * [Ramps Servo Power](/Documentation/RampsServoPower.md)
13
+    * [LCD Language - Font - System](Documentation/LCDLanguageFont.md)
13 14
     * [Mesh Bed Leveling](/Documentation/MeshBedLeveling.md)
14 15
 
15 16
 ##### [RepRap.org Wiki Page](http://reprap.org/wiki/Marlin)

Loading…
Cancel
Save