diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md new file mode 100644 index 000000000..a1acfb63f --- /dev/null +++ b/Documentation/LCDLanguageFont.md @@ -0,0 +1,145 @@ +# LCD Language Font System + +We deal with a variety of different displays. +And we try to display a lot of different languages in different scripts on them. +This system is ought to solve some of the related problems. + +## The Displays +We have two different technologies for the displays: + +* Character based displays: + Have a fixed set of symbols (charset - font) in their ROM. + All of them have a similar but not identical symbol set at the positions 0 to 127 similar to US-ASCII. + On the other hand symbols at places higher than 127 have mayor differences. + Until now we know of (and support): + * 1.) HD44780 and similar with Kana charset A00 https://www.sparkfun.com/datasheets/LCD/HD44780.pdf Page 17 + These are very common, but sadly not very useful when writing in European languages. + * 2.) HD44780 and similar with Western charset A02 https://www.sparkfun.com/datasheets/LCD/HD44780.pdf Page 18 + These are rare, but fairly useful for European languages. Also a limited number of Cyrillic symbols is available. + * 3.) HD44780 and similar with Cyrillic charset http://store.comet.bg/download-file.php?id=466 Page 14 + Some of our Russian friends use them. + + At all of them you can define 8 different symbols by yourself. In Marlin they are used for the Feedrate-, Thermometer-, ... symbols + +* Full graphic displays: + Where we have the full freedom to display whatever we want, when we can make a program for it. + Currently we deal with 128x64 Pixel Displays and divide this area in about 5 Lines with about 22 columns. + Therefore we need fonts with a bounding box of about 6x10. + Until now we used a + * 1.) Marlin-font similar to ISO10646-1 but with special Symbols at the end, what made 'ü' and 'ä' inaccessible, in the size 6x10. + * 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) + * 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. + +## The Languages + For the moment Marlin wants to support a lot of languages: + * en English + * pl Polish + * fr French + * de German + * es Spanish + * ru Russian + * it Italian + * pt Portuguese + * pt-br Portuguese (Brazil) + * fi Finnish + * an Aragonese + * nl Dutch + * ca Catalan + * eu Basque-Euskera + + and recently on [Thingiverse](http://www.thingiverse.com/) a new port to + * jp [Japanese](http://www.thingiverse.com/thing:664397) + + appeared. + +## The Problem + All of this languages, except the English, normally use extended symbol sets, not contained in US-ASCII. + Even the English translation uses some Symbols not in US-ASCII. ( '\002' for Thermometer, STR_h3 for '³') + 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.) + The Germans want to use "ÄäÖöÜüß" the Finnish at least "äö". Other European languages want to see their accents on their letters. + For other scripts like Cyrillic, Japanese, Greek, Hebrew, ... you have to find totally different symbol sets. + + Until now the problems where ignored widely. + The German translation used utf8 'ä' and 'ö' and did not care about showing garbage on ALL displays. + 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(). + 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. + 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. + +## The (partial) Solution + 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. + +### Aims: + * 1.) Make the input for translators as convenient as possible. (Unicode UTF8) + * 2.) Make the displays show the scripts as good as they can. (fonts, mapping tables) + * 3.) Don't destroy the existing language files. + * 3.) Don't loose to much speed + * 4.) Don't loose to much memory. + +### Actions: + * a.) Declare the display hardware we use. (Configuration.h) + * b.) Declare the language ore script we use. (Configuration.h) + * 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) + * d.) Declare the needed translations. (language_xx.h) + * e.) Make strlen() work with UTF8. (ultralcd.cpp) + * f.) Seperate the Marlin Symbols to their own font. (dogm_font_data_Marlin_symbols.h) + * g.) Make the fontswitch function remember the last used font. (dogm_lcd_implementation.h) + * 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) + * 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. + * 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. + * k.) Make mapping functions and tables to convert from UTF8 to the fonts and integrate in the new output functions. (utf_mapper.h) + * l.) Delete the not needed any more 'LiquidCrystalRus.xxx' files and their calls in 'ultralcd_implementation_hitachi_HD44780.h'. + * 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) + * n.) Do a bit of preprocessor magic to match displays - fonts and mappers in 'utf_mapper.h'. + +## Translators handbook + * a.) Check is there already is a language_xx.h file for your language (-> b.) or not (-> e.) + * b.) Ether their is declared MAPPER_NON (-> c.) or an other mapper (-> d.) + * 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' + 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). + Even on the full graphic displays one of these will be used when SIMULATE_ROMFONT is defined. + 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. + 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) + Be careful with the characters 0x5c = '\', and 0x7b - 0x7f. "{|}"These are not the same on all variants. + MAPPER_NON is the fastest an least memory consuming variant. + 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. + * 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" + 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. + * MAPPER_C2C3 correspondents good with west European languages the possible symbols are listed at (http://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)) + * MAPPER_D0D1 correspondents well with the Cyrillic languages. See (http://en.wikipedia.org/wiki/Cyrillic_(Unicode_block)) + * MAPPER_E382E383 works with the Japanese Katakana script. See (http://en.wikipedia.org/wiki/Katakana_(Unicode_block)) + + 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. + 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. + 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. + 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. + 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. + * MAPPER_NON is the fastest and least memory consuming variant. + * 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. + * Mappers together with the HD44780_fonts use about additional 128 bytes for the mapping_table. + * 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. + * 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. + Find a matching charset. (http://en.wikipedia.org/wiki/Greek_and_Coptic) + Provide a font containing the symbols in the right size. Normal ASCII in the lower 127 places, the upper with your selection. + Write a mapper catching, in this case, 0xcd to 0xcf and add it to 'utf_mapper.h'. + In case of a ISO10646 font we have a MAPPER_ONE_TO_ONE and don't have to make a table. + * 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. + * h.) If you want to integrate an entirely new variant of a Hitachi based display. + Add it in 'Configuration.h'. Define mapper tables in 'utf_mapper.h'. Maybe you need a new mapper function. + + 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. + + 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') + + 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. + +## User Instructions + Define your hardware and the wanted language in 'Configuration.h'. + To find out what charset your hardware is, define language 'test' and compile. In the menu you will see two lines from the upper half of the charset. + * DISPLAY_CHARSET_HD44780_JAPAN locks like "バパヒビピフブプヘベペホボポマミ" + * DISPLAY_CHARSET_HD44780_WESTERN locks like "ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß" + * DISPLAY_CHARSET_HD44780_CYRILIC locks like "РСТУФХЦЧШЩЪЫЬЭЮЯ" + + 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. + + English works on all hardware. + diff --git a/Marlin/Conditionals.h b/Marlin/Conditionals.h index c471ec436..c72f9d13e 100644 --- a/Marlin/Conditionals.h +++ b/Marlin/Conditionals.h @@ -362,7 +362,7 @@ #define HAS_AUTO_FAN_1 (defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN >= 0) #define HAS_AUTO_FAN_2 (defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN >= 0) #define HAS_AUTO_FAN_3 (defined(EXTRUDER_3_AUTO_FAN_PIN) && EXTRUDER_3_AUTO_FAN_PIN >= 0) - #define HAS_AUTO_FAN HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 + #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3) #define HAS_FAN (defined(FAN_PIN) && FAN_PIN >= 0) /** diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index c02392be4..ad7ec4590 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -532,9 +532,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -20 + #define Z_PROBE_OFFSET_RANGE_MAX 20 + #endif #endif @@ -561,13 +563,16 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o //==============================LCD and SD support============================= // Define your display language below. Replace (en) with your language code and uncomment. -// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu +// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test // See also language.h -//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en) +#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en) -// Character based displays can have different extended charsets. -#define DISPLAY_CHARSET_HD44780_JAPAN // "ääööüüß23°" -//#define DISPLAY_CHARSET_HD44780_WESTERN // "ÄäÖöÜüß²³°" if you see a '~' instead of a 'arrow_right' at the right of submenuitems - this is the right one. +// 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. +// 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. +// See also documentation/LCDLanguageFont.md + #define DISPLAY_CHARSET_HD44780_JAPAN // this is the most common hardware + //#define DISPLAY_CHARSET_HD44780_WESTERN + //#define DISPLAY_CHARSET_HD44780_CYRILLIC //#define ULTRA_LCD //general LCD support, also 16x2 //#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 //#define ULTIPANEL //the UltiPanel as on Thingiverse //#define LCD_FEEDBACK_FREQUENCY_HZ 1000 // this is the tone frequency the buzzer plays when on UI feedback. ie Screen Click //#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100 // the duration the buzzer plays the UI feedback sound. ie Screen Click + // 0 to disable buzzer feedback // PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3) // http://reprap.org/wiki/PanelOne diff --git a/Marlin/ConfigurationStore.cpp b/Marlin/ConfigurationStore.cpp index fc485e226..3872b505d 100644 --- a/Marlin/ConfigurationStore.cpp +++ b/Marlin/ConfigurationStore.cpp @@ -11,7 +11,7 @@ * max_acceleration_units_per_sq_second (x4) * acceleration * retract_acceleration - * travel_aceeleration + * travel_acceleration * minimumfeedrate * mintravelfeedrate * minsegmenttime @@ -25,6 +25,7 @@ * mesh_num_x * mesh_num_y * z_values[][] + * zprobe_zoffset * * DELTA: * endstop_adj (x3) @@ -39,7 +40,6 @@ * absPreheatHotendTemp * absPreheatHPBTemp * absPreheatFanSpeed - * zprobe_zoffset * * PIDTEMP: * Kp[0], Ki[0], Kd[0], Kc[0] @@ -118,7 +118,7 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) { // wrong data being written to the variables. // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. -#define EEPROM_VERSION "V17" +#define EEPROM_VERSION "V18" #ifdef EEPROM_SETTINGS @@ -143,7 +143,7 @@ void Config_StoreSettings() { uint8_t mesh_num_x = 3; uint8_t mesh_num_y = 3; - #if defined(MESH_BED_LEVELING) + #ifdef MESH_BED_LEVELING // Compile time test that sizeof(mbl.z_values) is as expected typedef char c_assert[(sizeof(mbl.z_values) == MESH_NUM_X_POINTS*MESH_NUM_Y_POINTS*sizeof(dummy)) ? 1 : -1]; mesh_num_x = MESH_NUM_X_POINTS; @@ -161,7 +161,12 @@ void Config_StoreSettings() { for (int q=0; q -#include -#include -#include - -#if defined(ARDUINO) && ARDUINO >= 100 - #include "Arduino.h" -#else - #include "WProgram.h" -#endif - -// it is a Russian alphabet translation -// except 0401 --> 0xa2 = ╗, 0451 --> 0xb5 -const PROGMEM uint8_t utf_recode[] = - { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4, - 0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8, - 0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab, - 0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1, - 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7, - 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe, - 0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0, - 0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7 - }; - -// When the display powers up, it is configured as follows: -// -// 1. Display clear -// 2. Function set: -// DL = 1; 8-bit interface data -// N = 0; 1-line display -// F = 0; 5x8 dot character font -// 3. Display on/off control: -// D = 0; Display off -// C = 0; Cursor off -// B = 0; Blinking off -// 4. Entry mode set: -// I/D = 1; Increment by 1 -// S = 0; No shift -// -// Note, however, that resetting the Arduino doesn't reset the LCD, so we -// can't assume that it's in that state when a sketch starts (and the -// LiquidCrystal constructor is called). -// -// modified 27 Jul 2011 -// by Ilya V. Danilov http://mk90.ru/ - - -LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); -} - -LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); -} - -LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) -{ - init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); -} - -LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) -{ - init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); -} - -void LiquidCrystalRus::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - _rs_pin = rs; - _rw_pin = rw; - _enable_pin = enable; - - _data_pins[0] = d0; - _data_pins[1] = d1; - _data_pins[2] = d2; - _data_pins[3] = d3; - _data_pins[4] = d4; - _data_pins[5] = d5; - _data_pins[6] = d6; - _data_pins[7] = d7; - - pinMode(_rs_pin, OUTPUT); - // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# - if (_rw_pin != 255) { - pinMode(_rw_pin, OUTPUT); - } - pinMode(_enable_pin, OUTPUT); - - if (fourbitmode) - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - else - _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; - - begin(16, 1); -} - -void LiquidCrystalRus::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { - if (lines > 1) { - _displayfunction |= LCD_2LINE; - } - _numlines = lines; - _currline = 0; - - // for some 1 line displays you can select a 10 pixel high font - if ((dotsize != 0) && (lines == 1)) { - _displayfunction |= LCD_5x10DOTS; - } - - // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! - // according to datasheet, we need at least 40ms after power rises above 2.7V - // before sending commands. Arduino can turn on way before 4.5V so we'll wait 50 - delayMicroseconds(50000); - // Now we pull both RS and R/W low to begin commands - digitalWrite(_rs_pin, LOW); - digitalWrite(_enable_pin, LOW); - if (_rw_pin != 255) { - digitalWrite(_rw_pin, LOW); - } - - //put the LCD into 4 bit or 8 bit mode - if (! (_displayfunction & LCD_8BITMODE)) { - // this is according to the Hitachi HD44780 datasheet - // figure 24, pg 46 - - // we start in 8bit mode, try to set 4 bit mode - writeNbits(0x03,4); - delayMicroseconds(4500); // wait min 4.1ms - - // second try - writeNbits(0x03,4); - delayMicroseconds(4500); // wait min 4.1ms - - // third go! - writeNbits(0x03,4); - delayMicroseconds(150); - - // finally, set to 8-bit interface - writeNbits(0x02,4); - } else { - // this is according to the Hitachi HD44780 datasheet - // page 45 figure 23 - - // Send function set command sequence - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(4500); // wait more than 4.1ms - - // second try - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(150); - - // third go - command(LCD_FUNCTIONSET | _displayfunction); - } - - // finally, set # lines, font size, etc. - command(LCD_FUNCTIONSET | _displayfunction); - - // turn the display on with no cursor or blinking default - _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; - display(); - - // clear it off - clear(); - - // Initialize to default text direction (for romance languages) - _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; - // set the entry mode - command(LCD_ENTRYMODESET | _displaymode); - -} - -void LiquidCrystalRus::setDRAMModel(uint8_t model) { - _dram_model = model; -} - -/********** high level commands, for the user! */ -void LiquidCrystalRus::clear() -{ - command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystalRus::home() -{ - command(LCD_RETURNHOME); // set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystalRus::setCursor(uint8_t col, uint8_t row) -{ - int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; - if ( row >= _numlines ) { - row = _numlines-1; // we count rows starting w/0 - } - - command(LCD_SETDDRAMADDR | (col + row_offsets[row])); -} - -// Turn the display on/off (quickly) -void LiquidCrystalRus::noDisplay() { - _displaycontrol &= ~LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystalRus::display() { - _displaycontrol |= LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turns the underline cursor on/off -void LiquidCrystalRus::noCursor() { - _displaycontrol &= ~LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystalRus::cursor() { - _displaycontrol |= LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turn on and off the blinking cursor -void LiquidCrystalRus::noBlink() { - _displaycontrol &= ~LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystalRus::blink() { - _displaycontrol |= LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// These commands scroll the display without changing the RAM -void LiquidCrystalRus::scrollDisplayLeft(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); -} -void LiquidCrystalRus::scrollDisplayRight(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); -} - -// This is for text that flows Left to Right -void LiquidCrystalRus::leftToRight(void) { - _displaymode |= LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This is for text that flows Right to Left -void LiquidCrystalRus::rightToLeft(void) { - _displaymode &= ~LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'right justify' text from the cursor -void LiquidCrystalRus::autoscroll(void) { - _displaymode |= LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'left justify' text from the cursor -void LiquidCrystalRus::noAutoscroll(void) { - _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// Allows us to fill the first 8 CGRAM locations -// with custom characters -void LiquidCrystalRus::createChar(uint8_t location, uint8_t charmap[]) { - location &= 0x7; // we only have 8 locations 0-7 - command(LCD_SETCGRAMADDR | (location << 3)); - for (int i=0; i<8; i++) { - write(charmap[i]); - } -} - -/*********** mid level commands, for sending data/cmds */ - -inline void LiquidCrystalRus::command(uint8_t value) { - send(value, LOW); -} - -#if defined(ARDUINO) && ARDUINO >= 100 - size_t LiquidCrystalRus::write(uint8_t value) -#else - void LiquidCrystalRus::write(uint8_t value) -#endif -{ - uint8_t out_char=value; - - if (_dram_model == LCD_DRAM_WH1601) { - uint8_t ac=recv(LOW) & 0x7f; - if (ac>7 && ac<0x14) command(LCD_SETDDRAMADDR | (0x40+ac-8)); - } - - if (value>=0x80) { // UTF-8 handling - if (value >= 0xc0) { - utf_hi_char = value - 0xd0; - } else { - value &= 0x3f; - if (!utf_hi_char && (value == 1)) - send(0xa2,HIGH); // ╗ - else if ((utf_hi_char == 1) && (value == 0x11)) - send(0xb5,HIGH); // ╦ - else - send(pgm_read_byte_near(utf_recode + value + (utf_hi_char<<6) - 0x10), HIGH); - } - } else send(out_char, HIGH); -#if defined(ARDUINO) && ARDUINO >= 100 - return 1; // assume success -#endif -} - -/************ low level data pushing commands **********/ - -// write either command or data, with automatic 4/8-bit selection -void LiquidCrystalRus::send(uint8_t value, uint8_t mode) { - digitalWrite(_rs_pin, mode); - - // if there is a RW pin indicated, set it low to Write - if (_rw_pin != 255) { - digitalWrite(_rw_pin, LOW); - } - - if (_displayfunction & LCD_8BITMODE) { - writeNbits(value,8); - } else { - writeNbits(value>>4,4); - writeNbits(value,4); - } -} - -// read data, with automatic 4/8-bit selection -uint8_t LiquidCrystalRus::recv(uint8_t mode) { - uint8_t retval; - digitalWrite(_rs_pin, mode); - - // if there is a RW pin indicated, set it low to Write - if (_rw_pin != 255) { - digitalWrite(_rw_pin, HIGH); - } - - if (_displayfunction & LCD_8BITMODE) { - retval = readNbits(8); - } else { - retval = readNbits(4) << 4; - retval |= readNbits(4); - } - return retval; -} -void LiquidCrystalRus::pulseEnable() { - digitalWrite(_enable_pin, LOW); - delayMicroseconds(1); - digitalWrite(_enable_pin, HIGH); - delayMicroseconds(1); // enable pulse must be >450ns - digitalWrite(_enable_pin, LOW); - delayMicroseconds(100); // commands need > 37us to settle -} - -void LiquidCrystalRus::writeNbits(uint8_t value, uint8_t n) { - for (int i = 0; i < n; i++) { - pinMode(_data_pins[i], OUTPUT); - digitalWrite(_data_pins[i], (value >> i) & 0x01); - } - - pulseEnable(); -} - -uint8_t LiquidCrystalRus::readNbits(uint8_t n) { - uint8_t retval=0; - for (int i = 0; i < n; i++) { - pinMode(_data_pins[i], INPUT); - } - - digitalWrite(_enable_pin, LOW); - delayMicroseconds(1); - digitalWrite(_enable_pin, HIGH); - delayMicroseconds(1); // enable pulse must be >450ns - - for (int i = 0; i < n; i++) { - retval |= (digitalRead(_data_pins[i]) == HIGH)?(1 << i):0; - } - - digitalWrite(_enable_pin, LOW); - - return retval; -} - diff --git a/Marlin/LiquidCrystalRus.h b/Marlin/LiquidCrystalRus.h deleted file mode 100644 index ad85394ae..000000000 --- a/Marlin/LiquidCrystalRus.h +++ /dev/null @@ -1,129 +0,0 @@ -// -// based on LiquidCrystal library from ArduinoIDE, see http://arduino.cc -// modified 27 Jul 2011 -// by Ilya V. Danilov http://mk90.ru/ -// - -#ifndef LiquidCrystalRus_h -#define LiquidCrystalRus_h - -#include -#include "Print.h" - -// commands -#define LCD_CLEARDISPLAY 0x01 -#define LCD_RETURNHOME 0x02 -#define LCD_ENTRYMODESET 0x04 -#define LCD_DISPLAYCONTROL 0x08 -#define LCD_CURSORSHIFT 0x10 -#define LCD_FUNCTIONSET 0x20 -#define LCD_SETCGRAMADDR 0x40 -#define LCD_SETDDRAMADDR 0x80 - -// flags for display entry mode -#define LCD_ENTRYRIGHT 0x00 -#define LCD_ENTRYLEFT 0x02 -#define LCD_ENTRYSHIFTINCREMENT 0x01 -#define LCD_ENTRYSHIFTDECREMENT 0x00 - -// flags for display on/off control -#define LCD_DISPLAYON 0x04 -#define LCD_DISPLAYOFF 0x00 -#define LCD_CURSORON 0x02 -#define LCD_CURSOROFF 0x00 -#define LCD_BLINKON 0x01 -#define LCD_BLINKOFF 0x00 - -// flags for display/cursor shift -#define LCD_DISPLAYMOVE 0x08 -#define LCD_CURSORMOVE 0x00 -#define LCD_MOVERIGHT 0x04 -#define LCD_MOVELEFT 0x00 - -// flags for function set -#define LCD_8BITMODE 0x10 -#define LCD_4BITMODE 0x00 -#define LCD_2LINE 0x08 -#define LCD_1LINE 0x00 -#define LCD_5x10DOTS 0x04 -#define LCD_5x8DOTS 0x00 - -// enum for -#define LCD_DRAM_Normal 0x00 -#define LCD_DRAM_WH1601 0x01 - - -class LiquidCrystalRus : public Print { -public: - LiquidCrystalRus(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); - LiquidCrystalRus(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); - - void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - - void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); - - void clear(); - void home(); - - void noDisplay(); - void display(); - void noBlink(); - void blink(); - void noCursor(); - void cursor(); - void scrollDisplayLeft(); - void scrollDisplayRight(); - void leftToRight(); - void rightToLeft(); - void autoscroll(); - void noAutoscroll(); - - void createChar(uint8_t, uint8_t[]); - void setCursor(uint8_t, uint8_t); - -#if defined(ARDUINO) && ARDUINO >= 100 - virtual size_t write(uint8_t); - using Print::write; -#else - virtual void write(uint8_t); -#endif - - void command(uint8_t); - - void setDRAMModel(uint8_t); - -private: - void send(uint8_t, uint8_t); - void writeNbits(uint8_t, uint8_t); - uint8_t recv(uint8_t); - uint8_t readNbits(uint8_t); - void pulseEnable(); - - uint8_t _rs_pin; // LOW: command. HIGH: character. - uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. - uint8_t _enable_pin; // activated by a HIGH pulse. - uint8_t _data_pins[8]; - - uint8_t _displayfunction; - uint8_t _displaycontrol; - uint8_t _displaymode; - - uint8_t _initialized; - - uint8_t _numlines,_currline; - - uint8_t _dram_model; - uint8_t utf_hi_char; // UTF-8 high part -}; - -#endif diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index bbd7ac3db..46720d9a3 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -251,7 +251,9 @@ extern float z_endstop_adj; extern float min_pos[3]; extern float max_pos[3]; extern bool axis_known_position[3]; -extern float zprobe_zoffset; +#ifdef ENABLE_AUTO_BED_LEVELING + extern float zprobe_zoffset; +#endif extern int fanSpeed; #ifdef BARICUDA extern int ValvePressure; diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 2391b8b50..708333883 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -203,7 +203,8 @@ float homing_feedrate[] = HOMING_FEEDRATE; #ifdef ENABLE_AUTO_BED_LEVELING -int xy_travel_speed = XY_TRAVEL_SPEED; + int xy_travel_speed = XY_TRAVEL_SPEED; + float zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER; #endif int homing_bump_divisor[] = HOMING_BUMP_DIVISOR; bool axis_relative_modes[] = AXIS_RELATIVE_MODES; @@ -255,7 +256,6 @@ float home_offset[3] = { 0, 0, 0 }; float min_pos[3] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS }; float max_pos[3] = { X_MAX_POS, Y_MAX_POS, Z_MAX_POS }; bool axis_known_position[3] = { false, false, false }; -float zprobe_zoffset; // Extruder offset #if EXTRUDERS > 1 @@ -1101,9 +1101,6 @@ static void set_bed_level_equation_lsq(double *plane_equation_coefficients) current_position[Y_AXIS] = corrected_position.y; current_position[Z_AXIS] = corrected_position.z; - // put the bed at 0 so we don't go below it. - current_position[Z_AXIS] = zprobe_zoffset; // in the lsq we reach here after raising the extruder due to the loop structure - plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); } #endif @@ -1117,11 +1114,13 @@ static void set_bed_level_equation_3pts(float z_at_pt_1, float z_at_pt_2, float vector_3 pt1 = vector_3(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, z_at_pt_1); vector_3 pt2 = vector_3(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, z_at_pt_2); vector_3 pt3 = vector_3(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, z_at_pt_3); + vector_3 planeNormal = vector_3::cross(pt1 - pt2, pt3 - pt2).get_normal(); - vector_3 from_2_to_1 = (pt1 - pt2).get_normal(); - vector_3 from_2_to_3 = (pt3 - pt2).get_normal(); - vector_3 planeNormal = vector_3::cross(from_2_to_1, from_2_to_3).get_normal(); - planeNormal = vector_3(planeNormal.x, planeNormal.y, abs(planeNormal.z)); + if (planeNormal.z < 0) { + planeNormal.x = -planeNormal.x; + planeNormal.y = -planeNormal.y; + planeNormal.z = -planeNormal.z; + } plan_bed_level_matrix = matrix_3x3::create_look_at(planeNormal); @@ -1130,11 +1129,7 @@ static void set_bed_level_equation_3pts(float z_at_pt_1, float z_at_pt_2, float current_position[Y_AXIS] = corrected_position.y; current_position[Z_AXIS] = corrected_position.z; - // put the bed at 0 so we don't go below it. - current_position[Z_AXIS] = zprobe_zoffset; - plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); - } #endif // AUTO_BED_LEVELING_GRID @@ -2017,8 +2012,19 @@ inline void gcode_G28() { endstops_hit_on_purpose(); } -#if defined(MESH_BED_LEVELING) +#ifdef MESH_BED_LEVELING + /** + * G29: Mesh-based Z-Probe, probes a grid and produces a + * mesh to compensate for variable bed height + * + * Parameters With MESH_BED_LEVELING: + * + * S0 Produce a mesh report + * S1 Start probing mesh points + * S2 Probe the next mesh point + * + */ inline void gcode_G29() { static int probe_point = -1; int state = 0; @@ -2060,7 +2066,7 @@ inline void gcode_G28() { } else if (state == 2) { // Goto next point if (probe_point < 0) { - SERIAL_PROTOCOLPGM("Mesh probing not started.\n"); + SERIAL_PROTOCOLPGM("Start mesh probing with \"G29 S1\" first.\n"); return; } int ix, iy; @@ -2070,16 +2076,14 @@ inline void gcode_G28() { } else { ix = (probe_point-1) % MESH_NUM_X_POINTS; iy = (probe_point-1) / MESH_NUM_X_POINTS; - if (iy&1) { // Zig zag - ix = (MESH_NUM_X_POINTS - 1) - ix; - } + if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // zig-zag mbl.set_z(ix, iy, current_position[Z_AXIS]); current_position[Z_AXIS] = MESH_HOME_SEARCH_Z; 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); st_synchronize(); } - if (probe_point == MESH_NUM_X_POINTS*MESH_NUM_Y_POINTS) { - SERIAL_PROTOCOLPGM("Mesh done.\n"); + if (probe_point == MESH_NUM_X_POINTS * MESH_NUM_Y_POINTS) { + SERIAL_PROTOCOLPGM("Mesh probing done.\n"); probe_point = -1; mbl.active = 1; enquecommands_P(PSTR("G28")); @@ -2087,9 +2091,7 @@ inline void gcode_G28() { } ix = probe_point % MESH_NUM_X_POINTS; iy = probe_point / MESH_NUM_X_POINTS; - if (iy&1) { // Zig zag - ix = (MESH_NUM_X_POINTS - 1) - ix; - } + if (iy & 1) ix = (MESH_NUM_X_POINTS - 1) - ix; // zig-zag current_position[X_AXIS] = mbl.get_x(ix); current_position[Y_AXIS] = mbl.get_y(iy); 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() { } } -#endif - -#ifdef ENABLE_AUTO_BED_LEVELING +#elif defined(ENABLE_AUTO_BED_LEVELING) /** * G29: Detailed Z-Probe, probes the bed at 3 or more points. @@ -2116,8 +2116,9 @@ inline void gcode_G28() { * * S Set the XY travel speed between probe points (in mm/min) * - * D Dry-Run mode. Just evaluate the bed Topology - It does not apply or clean the rotation Matrix - * Useful to check the topology after a first run of G29. + * D Dry-Run mode. Just evaluate the bed Topology - Don't apply + * or clean the rotation Matrix. Useful to check the topology + * after a first run of G29. * * V Set the verbose level (0-4). Example: "G29 V3" * @@ -2164,9 +2165,9 @@ inline void gcode_G28() { #ifdef AUTO_BED_LEVELING_GRID - #ifndef DELTA - bool do_topography_map = verbose_level > 2 || code_seen('T') || code_seen('t'); - #endif + #ifndef DELTA + bool do_topography_map = verbose_level > 2 || code_seen('T') || code_seen('t'); + #endif if (verbose_level > 0) { @@ -2223,7 +2224,7 @@ inline void gcode_G28() { #ifdef Z_PROBE_SLED dock_sled(false); // engage (un-dock) the probe - #elif defined(Z_PROBE_ALLEN_KEY) + #elif defined(Z_PROBE_ALLEN_KEY) //|| defined(SERVO_LEVELING) engage_z_probe(); #endif @@ -2233,19 +2234,18 @@ inline void gcode_G28() { { #ifdef DELTA reset_bed_level(); - #else - - // make sure the bed_level_rotation_matrix is identity or the planner will get it incorectly - //vector_3 corrected_position = plan_get_position_mm(); - //corrected_position.debug("position before G29"); - plan_bed_level_matrix.set_to_identity(); - vector_3 uncorrected_position = plan_get_position(); -// uncorrected_position.debug("position during G29"); - - current_position[X_AXIS] = uncorrected_position.x; - current_position[Y_AXIS] = uncorrected_position.y; - current_position[Z_AXIS] = uncorrected_position.z; - plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); + #else //!DELTA + + // make sure the bed_level_rotation_matrix is identity or the planner will get it incorectly + //vector_3 corrected_position = plan_get_position_mm(); + //corrected_position.debug("position before G29"); + plan_bed_level_matrix.set_to_identity(); + vector_3 uncorrected_position = plan_get_position(); + //uncorrected_position.debug("position during G29"); + current_position[X_AXIS] = uncorrected_position.x; + current_position[Y_AXIS] = uncorrected_position.y; + current_position[Z_AXIS] = uncorrected_position.z; + plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); #endif } @@ -2260,26 +2260,24 @@ inline void gcode_G28() { const int xGridSpacing = (right_probe_bed_position - left_probe_bed_position) / (auto_bed_leveling_grid_points-1); const int yGridSpacing = (back_probe_bed_position - front_probe_bed_position) / (auto_bed_leveling_grid_points-1); - #ifndef DELTA - // solve the plane equation ax + by + d = z - // A is the matrix with rows [x y 1] for all the probed points - // B is the vector of the Z positions - // 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 - // so Vx = -a Vy = -b Vz = 1 (we want the vector facing towards positive Z - - int abl2 = auto_bed_leveling_grid_points * auto_bed_leveling_grid_points; - - double eqnAMatrix[abl2 * 3], // "A" matrix of the linear system of equations - eqnBVector[abl2], // "B" vector of Z points - mean = 0.0; - - #else - delta_grid_spacing[0] = xGridSpacing; - delta_grid_spacing[1] = yGridSpacing; - - float z_offset = Z_PROBE_OFFSET_FROM_EXTRUDER; - if (code_seen(axis_codes[Z_AXIS])) z_offset += code_value(); - #endif + #ifdef DELTA + delta_grid_spacing[0] = xGridSpacing; + delta_grid_spacing[1] = yGridSpacing; + float z_offset = Z_PROBE_OFFSET_FROM_EXTRUDER; + if (code_seen(axis_codes[Z_AXIS])) z_offset += code_value(); + #else // !DELTA + // solve the plane equation ax + by + d = z + // A is the matrix with rows [x y 1] for all the probed points + // B is the vector of the Z positions + // 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 + // so Vx = -a Vy = -b Vz = 1 (we want the vector facing towards positive Z + + int abl2 = auto_bed_leveling_grid_points * auto_bed_leveling_grid_points; + + double eqnAMatrix[abl2 * 3], // "A" matrix of the linear system of equations + eqnBVector[abl2], // "B" vector of Z points + mean = 0.0; + #endif // !DELTA int probePointCounter = 0; bool zig = true; @@ -2312,12 +2310,12 @@ inline void gcode_G28() { float measured_z, z_before = probePointCounter == 0 ? Z_RAISE_BEFORE_PROBING : current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS; - #ifdef DELTA - // Avoid probing the corners (outside the round or hexagon print surface) on a delta printer. - float distance_from_center = sqrt(xProbe*xProbe + yProbe*yProbe); - if (distance_from_center > DELTA_PROBABLE_RADIUS) - continue; - #endif //DELTA + #ifdef DELTA + // Avoid probing the corners (outside the round or hexagon print surface) on a delta printer. + float distance_from_center = sqrt(xProbe*xProbe + yProbe*yProbe); + if (distance_from_center > DELTA_PROBABLE_RADIUS) + continue; + #endif //DELTA // Enhanced G29 - Do not retract servo between probes ProbeAction act; @@ -2334,16 +2332,16 @@ inline void gcode_G28() { measured_z = probe_pt(xProbe, yProbe, z_before, act, verbose_level); - #ifndef DELTA - mean += measured_z; + #ifndef DELTA + mean += measured_z; - eqnBVector[probePointCounter] = measured_z; - eqnAMatrix[probePointCounter + 0 * abl2] = xProbe; - eqnAMatrix[probePointCounter + 1 * abl2] = yProbe; - eqnAMatrix[probePointCounter + 2 * abl2] = 1; - #else - bed_level[xCount][yCount] = measured_z + z_offset; - #endif + eqnBVector[probePointCounter] = measured_z; + eqnAMatrix[probePointCounter + 0 * abl2] = xProbe; + eqnAMatrix[probePointCounter + 1 * abl2] = yProbe; + eqnAMatrix[probePointCounter + 2 * abl2] = 1; + #else + bed_level[xCount][yCount] = measured_z + z_offset; + #endif probePointCounter++; } //xProbe @@ -2351,60 +2349,64 @@ inline void gcode_G28() { clean_up_after_endstop_move(); - #ifndef DELTA - // solve lsq problem - double *plane_equation_coefficients = qr_solve(abl2, 3, eqnAMatrix, eqnBVector); - - mean /= abl2; - - if (verbose_level) { - SERIAL_PROTOCOLPGM("Eqn coefficients: a: "); - SERIAL_PROTOCOL_F(plane_equation_coefficients[0], 8); - SERIAL_PROTOCOLPGM(" b: "); - SERIAL_PROTOCOL_F(plane_equation_coefficients[1], 8); - SERIAL_PROTOCOLPGM(" d: "); - SERIAL_PROTOCOL_F(plane_equation_coefficients[2], 8); - SERIAL_EOL; - if (verbose_level > 2) { - SERIAL_PROTOCOLPGM("Mean of sampled points: "); - SERIAL_PROTOCOL_F(mean, 8); + #ifdef DELTA + + if (!dryrun) extrapolate_unprobed_bed_level(); + print_bed_level(); + + #else // !DELTA + + // solve lsq problem + double *plane_equation_coefficients = qr_solve(abl2, 3, eqnAMatrix, eqnBVector); + + mean /= abl2; + + if (verbose_level) { + SERIAL_PROTOCOLPGM("Eqn coefficients: a: "); + SERIAL_PROTOCOL_F(plane_equation_coefficients[0], 8); + SERIAL_PROTOCOLPGM(" b: "); + SERIAL_PROTOCOL_F(plane_equation_coefficients[1], 8); + SERIAL_PROTOCOLPGM(" d: "); + SERIAL_PROTOCOL_F(plane_equation_coefficients[2], 8); SERIAL_EOL; + if (verbose_level > 2) { + SERIAL_PROTOCOLPGM("Mean of sampled points: "); + SERIAL_PROTOCOL_F(mean, 8); + SERIAL_EOL; + } } - } - // Show the Topography map if enabled - if (do_topography_map) { - - SERIAL_PROTOCOLPGM(" \nBed Height Topography: \n"); - SERIAL_PROTOCOLPGM("+-----------+\n"); - SERIAL_PROTOCOLPGM("|...Back....|\n"); - SERIAL_PROTOCOLPGM("|Left..Right|\n"); - SERIAL_PROTOCOLPGM("|...Front...|\n"); - SERIAL_PROTOCOLPGM("+-----------+\n"); - - for (int yy = auto_bed_leveling_grid_points - 1; yy >= 0; yy--) { - for (int xx = 0; xx < auto_bed_leveling_grid_points; xx++) { - int ind = yy * auto_bed_leveling_grid_points + xx; - float diff = eqnBVector[ind] - mean; - if (diff >= 0.0) - SERIAL_PROTOCOLPGM(" +"); // Include + for column alignment - else - SERIAL_PROTOCOLPGM(" "); - SERIAL_PROTOCOL_F(diff, 5); - } // xx + // Show the Topography map if enabled + if (do_topography_map) { + + SERIAL_PROTOCOLPGM(" \nBed Height Topography: \n"); + SERIAL_PROTOCOLPGM("+-----------+\n"); + SERIAL_PROTOCOLPGM("|...Back....|\n"); + SERIAL_PROTOCOLPGM("|Left..Right|\n"); + SERIAL_PROTOCOLPGM("|...Front...|\n"); + SERIAL_PROTOCOLPGM("+-----------+\n"); + + for (int yy = auto_bed_leveling_grid_points - 1; yy >= 0; yy--) { + for (int xx = 0; xx < auto_bed_leveling_grid_points; xx++) { + int ind = yy * auto_bed_leveling_grid_points + xx; + float diff = eqnBVector[ind] - mean; + if (diff >= 0.0) + SERIAL_PROTOCOLPGM(" +"); // Include + for column alignment + else + SERIAL_PROTOCOLPGM(" "); + SERIAL_PROTOCOL_F(diff, 5); + } // xx + SERIAL_EOL; + } // yy SERIAL_EOL; - } // yy - SERIAL_EOL; - } //do_topography_map + } //do_topography_map - if (!dryrun) set_bed_level_equation_lsq(plane_equation_coefficients); - free(plane_equation_coefficients); - #else //Delta - if (!dryrun) extrapolate_unprobed_bed_level(); - print_bed_level(); - #endif //Delta + if (!dryrun) set_bed_level_equation_lsq(plane_equation_coefficients); + free(plane_equation_coefficients); + + #endif //!DELTA #else // !AUTO_BED_LEVELING_GRID @@ -2427,36 +2429,37 @@ inline void gcode_G28() { #endif // !AUTO_BED_LEVELING_GRID - #ifndef DELTA - if (verbose_level > 0) plan_bed_level_matrix.debug(" \n\nBed Level Correction Matrix:"); + #ifndef DELTA + if (verbose_level > 0) + plan_bed_level_matrix.debug(" \n\nBed Level Correction Matrix:"); - // Correct the Z height difference from z-probe position and hotend tip position. - // The Z height on homing is measured by Z-Probe, but the probe is quite far from the hotend. - // When the bed is uneven, this height must be corrected. - if (!dryrun) - { - float x_tmp, y_tmp, z_tmp, real_z; - 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) - x_tmp = current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER; - y_tmp = current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER; - z_tmp = current_position[Z_AXIS]; - - apply_rotation_xyz(plan_bed_level_matrix, x_tmp, y_tmp, z_tmp); //Apply the correction sending the probe offset - current_position[Z_AXIS] = z_tmp - real_z + current_position[Z_AXIS]; //The difference is added to current position and sent to planner. - plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); - } - #endif + // Correct the Z height difference from z-probe position and hotend tip position. + // The Z height on homing is measured by Z-Probe, but the probe is quite far from the hotend. + // When the bed is uneven, this height must be corrected. + if (!dryrun) + { + float x_tmp, y_tmp, z_tmp, real_z; + 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) + x_tmp = current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER; + y_tmp = current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER; + z_tmp = current_position[Z_AXIS]; + + apply_rotation_xyz(plan_bed_level_matrix, x_tmp, y_tmp, z_tmp); //Apply the correction sending the probe offset + current_position[Z_AXIS] = z_tmp - real_z + current_position[Z_AXIS]; //The difference is added to current position and sent to planner. + plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); + } + #endif // !DELTA - #ifdef Z_PROBE_SLED - dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel - #elif defined(Z_PROBE_ALLEN_KEY) - retract_z_probe(); - #endif - - #ifdef Z_PROBE_END_SCRIPT - enquecommands_P(PSTR(Z_PROBE_END_SCRIPT)); - st_synchronize(); - #endif + #ifdef Z_PROBE_SLED + dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel + #elif defined(Z_PROBE_ALLEN_KEY) //|| defined(SERVO_LEVELING) + retract_z_probe(); + #endif + + #ifdef Z_PROBE_END_SCRIPT + enquecommands_P(PSTR(Z_PROBE_END_SCRIPT)); + st_synchronize(); + #endif } #ifndef Z_PROBE_SLED @@ -2919,7 +2922,7 @@ inline void gcode_M42() { do_blocking_move_to( X_probe_location, Y_probe_location, Z_start_location); // Make sure we are at the probe location if (n_legs) { - double radius=0.0, theta=0.0, x_sweep, y_sweep; + double radius=0.0, theta=0.0; int l; int rotational_direction = (unsigned long) millis() & 0x0001; // clockwise or counter clockwise radius = (unsigned long)millis() % (long)(X_MAX_LENGTH / 4); // limit how far out to go @@ -5182,18 +5185,16 @@ void ClearToSend() SERIAL_PROTOCOLLNPGM(MSG_OK); } -void get_coordinates() -{ - for(int8_t i=0; i < NUM_AXIS; i++) { - if(code_seen(axis_codes[i])) - { - destination[i] = (float)code_value() + (axis_relative_modes[i] || relative_mode)*current_position[i]; - } - else destination[i] = current_position[i]; //Are these else lines really needed? +void get_coordinates() { + for (int i = 0; i < NUM_AXIS; i++) { + if (code_seen(axis_codes[i])) + destination[i] = code_value() + (axis_relative_modes[i] || relative_mode ? current_position[i] : 0); + else + destination[i] = current_position[i]; } - if(code_seen('F')) { + if (code_seen('F')) { next_feedrate = code_value(); - if(next_feedrate > 0.0) feedrate = next_feedrate; + if (next_feedrate > 0.0) feedrate = next_feedrate; } } diff --git a/Marlin/SanityCheck.h b/Marlin/SanityCheck.h index d228bdf99..d5183abba 100644 --- a/Marlin/SanityCheck.h +++ b/Marlin/SanityCheck.h @@ -104,13 +104,13 @@ // Make sure probing points are reachable #if LEFT_PROBE_BED_POSITION < MIN_PROBE_X - #error The given LEFT_PROBE_BED_POSITION can not be reached by the probe. + #error "The given LEFT_PROBE_BED_POSITION can't be reached by the probe." #elif RIGHT_PROBE_BED_POSITION > MAX_PROBE_X - #error The given RIGHT_PROBE_BED_POSITION can not be reached by the probe. + #error "The given RIGHT_PROBE_BED_POSITION can't be reached by the probe." #elif FRONT_PROBE_BED_POSITION < MIN_PROBE_Y - #error The given FRONT_PROBE_BED_POSITION can not be reached by the probe. + #error "The given FRONT_PROBE_BED_POSITION can't be reached by the probe." #elif BACK_PROBE_BED_POSITION > MAX_PROBE_Y - #error The given BACK_PROBE_BED_POSITION can not be reached by the probe. + #error "The given BACK_PROBE_BED_POSITION can't be reached by the probe." #endif #define PROBE_SIZE_X (X_PROBE_OFFSET_FROM_EXTRUDER * (AUTO_BED_LEVELING_GRID_POINTS-1)) diff --git a/Marlin/configurator/config/Configuration.h b/Marlin/configurator/config/Configuration.h index bfc62f578..35eafff76 100644 --- a/Marlin/configurator/config/Configuration.h +++ b/Marlin/configurator/config/Configuration.h @@ -569,9 +569,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif // @section extras diff --git a/Marlin/dogm_font_data_6x9_marlin.h b/Marlin/dogm_font_data_6x9_marlin.h new file mode 100644 index 000000000..a3b16ecb4 --- /dev/null +++ b/Marlin/dogm_font_data_6x9_marlin.h @@ -0,0 +1,157 @@ +/* + Fontname: -Misc-Fixed-Medium-R-Normal--9-90-75-75-C-60-ISO10646-1 + Copyright: Public domain font. Share and enjoy. + Capital A Height: 6, '1' Height: 6 + Calculated Max Values w= 6 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 7 len= 9 + Font Bounding box w= 6 h= 9 x= 0 y=-2 + Calculated Min Values x= 0 y=-2 dx= 0 dy= 0 + Pure Font ascent = 6 descent=-2 + X Font ascent = 6 descent=-2 + Max Font ascent = 7 descent=-2 +*/ +#include +const u8g_fntpgm_uint8_t u8g_font_6x9[2300] U8G_SECTION(".progmem.u8g_font_6x9") = { + 0,6,9,0,254,6,1,137,2,254,32,255,254,7,254,6, + 254,0,0,0,6,0,7,1,6,6,6,2,0,128,128,128, + 128,0,128,3,3,3,6,1,3,160,160,160,5,7,7,6, + 0,255,80,80,248,80,248,80,80,5,9,9,6,0,254,32, + 112,168,160,112,40,168,112,32,6,8,8,6,0,255,64,168, + 72,16,32,72,84,8,5,7,7,6,0,255,96,144,144,96, + 152,144,104,1,3,3,6,2,3,128,128,128,2,7,7,6, + 2,255,64,128,128,128,128,128,64,2,7,7,6,2,255,128, + 64,64,64,64,64,128,5,5,5,6,0,0,136,80,248,80, + 136,5,5,5,6,0,0,32,32,248,32,32,2,4,4,6, + 2,254,192,64,64,128,5,1,1,6,0,2,248,2,2,2, + 6,2,0,192,192,4,6,6,6,1,0,16,16,32,64,128, + 128,4,6,6,6,1,0,96,144,144,144,144,96,3,6,6, + 6,1,0,64,192,64,64,64,224,4,6,6,6,1,0,96, + 144,16,32,64,240,4,6,6,6,1,0,240,32,96,16,16, + 224,5,6,6,6,0,0,16,48,80,144,248,16,4,6,6, + 6,1,0,240,128,224,16,16,224,4,6,6,6,1,0,96, + 128,224,144,144,96,4,6,6,6,1,0,240,16,16,32,64, + 64,4,6,6,6,1,0,96,144,96,144,144,96,4,6,6, + 6,1,0,96,144,144,112,16,96,2,5,5,6,2,0,192, + 192,0,192,192,2,7,7,6,2,254,192,192,0,192,64,64, + 128,5,5,5,6,0,0,24,96,128,96,24,5,3,3,6, + 0,1,248,0,248,5,5,5,6,0,0,192,48,8,48,192, + 4,7,7,6,1,0,96,144,16,96,64,0,64,5,6,6, + 6,0,0,112,144,168,176,128,112,5,6,6,6,0,0,32, + 80,136,248,136,136,5,6,6,6,0,0,240,136,240,136,136, + 240,4,6,6,6,1,0,96,144,128,128,144,96,4,6,6, + 6,1,0,224,144,144,144,144,224,4,6,6,6,1,0,240, + 128,224,128,128,240,4,6,6,6,1,0,240,128,224,128,128, + 128,4,6,6,6,1,0,96,144,128,176,144,96,4,6,6, + 6,1,0,144,144,240,144,144,144,3,6,6,6,1,0,224, + 64,64,64,64,224,5,6,6,6,0,0,56,16,16,16,144, + 96,4,6,6,6,1,0,144,160,192,160,144,144,4,6,6, + 6,1,0,128,128,128,128,128,240,5,6,6,6,0,0,136, + 216,168,168,136,136,4,6,6,6,1,0,144,208,176,144,144, + 144,5,6,6,6,0,0,112,136,136,136,136,112,4,6,6, + 6,1,0,224,144,144,224,128,128,4,7,7,6,1,255,96, + 144,144,208,176,96,16,4,6,6,6,1,0,224,144,144,224, + 144,144,4,6,6,6,1,0,96,144,64,32,144,96,5,6, + 6,6,0,0,248,32,32,32,32,32,4,6,6,6,1,0, + 144,144,144,144,144,96,4,6,6,6,1,0,144,144,144,240, + 96,96,5,6,6,6,0,0,136,136,168,168,216,136,5,6, + 6,6,0,0,136,80,32,32,80,136,5,6,6,6,0,0, + 136,136,80,32,32,32,4,6,6,6,1,0,240,16,32,64, + 128,240,3,6,6,6,1,0,224,128,128,128,128,224,4,6, + 6,6,1,0,128,128,64,32,16,16,3,6,6,6,1,0, + 224,32,32,32,32,224,5,3,3,6,0,3,32,80,136,5, + 1,1,6,0,254,248,2,2,2,6,2,4,128,64,4,4, + 4,6,1,0,112,144,144,112,4,6,6,6,1,0,128,128, + 224,144,144,224,4,4,4,6,1,0,112,128,128,112,4,6, + 6,6,1,0,16,16,112,144,144,112,4,4,4,6,1,0, + 96,176,192,112,4,6,6,6,1,0,32,80,64,224,64,64, + 4,6,6,6,1,254,96,144,144,112,16,96,4,6,6,6, + 1,0,128,128,224,144,144,144,3,6,6,6,1,0,64,0, + 192,64,64,224,3,8,8,6,1,254,32,0,96,32,32,32, + 160,64,4,6,6,6,1,0,128,128,160,192,160,144,3,6, + 6,6,1,0,192,64,64,64,64,224,5,4,4,6,0,0, + 208,168,168,136,4,4,4,6,1,0,224,144,144,144,4,4, + 4,6,1,0,96,144,144,96,4,6,6,6,1,254,224,144, + 144,224,128,128,4,6,6,6,1,254,112,144,144,112,16,16, + 4,4,4,6,1,0,160,208,128,128,4,4,4,6,1,0, + 112,192,48,224,4,6,6,6,1,0,64,64,224,64,80,32, + 4,4,4,6,1,0,144,144,144,112,4,4,4,6,1,0, + 144,144,96,96,5,4,4,6,0,0,136,168,168,80,4,4, + 4,6,1,0,144,96,96,144,4,6,6,6,1,254,144,144, + 144,112,144,96,4,4,4,6,1,0,240,32,64,240,3,7, + 7,6,1,0,32,64,64,128,64,64,32,1,7,7,6,2, + 255,128,128,128,128,128,128,128,3,7,7,6,1,0,128,64, + 64,32,64,64,128,4,2,2,6,1,3,80,160,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, + 255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0, + 0,6,0,7,1,6,6,6,2,0,128,0,128,128,128,128, + 4,6,6,6,1,255,32,112,160,160,112,32,5,7,7,6, + 0,255,48,72,64,240,64,64,248,5,5,5,6,0,0,168, + 80,136,80,168,5,6,6,6,0,0,136,80,248,32,248,32, + 1,7,7,6,2,255,128,128,128,0,128,128,128,4,7,7, + 6,1,255,112,128,96,144,96,16,224,3,1,1,6,1,5, + 160,6,7,7,6,0,0,120,132,148,164,148,132,120,3,5, + 5,6,1,1,96,160,96,0,224,5,5,5,6,0,0,40, + 80,160,80,40,4,3,3,6,1,0,240,16,16,4,1,1, + 6,1,2,240,6,7,7,6,0,0,120,132,180,164,164,132, + 120,4,1,1,6,1,5,240,4,3,3,6,1,2,96,144, + 96,5,7,7,6,0,255,32,32,248,32,32,0,248,3,5, + 5,6,1,1,64,160,32,64,224,3,5,5,6,1,1,192, + 32,64,32,192,2,2,2,6,2,4,64,128,4,5,5,6, + 1,255,144,144,176,208,128,5,6,6,6,0,0,120,232,232, + 104,40,40,1,1,1,6,2,2,128,2,2,2,6,2,254, + 64,128,3,5,5,6,1,1,64,192,64,64,224,3,5,5, + 6,1,1,64,160,64,0,224,5,5,5,6,0,0,160,80, + 40,80,160,5,8,8,6,0,255,64,192,64,80,112,48,120, + 16,5,8,8,6,0,255,64,192,64,80,104,8,16,56,5, + 8,8,6,0,255,192,32,64,48,240,48,120,16,4,7,7, + 6,1,0,32,0,32,96,128,144,96,5,7,7,6,0,0, + 64,32,32,80,112,136,136,5,7,7,6,0,0,16,32,32, + 80,112,136,136,5,7,7,6,0,0,32,80,32,80,112,136, + 136,5,7,7,6,0,0,40,80,32,80,112,136,136,5,7, + 7,6,0,0,80,0,32,80,112,136,136,5,7,7,6,0, + 0,32,80,32,80,112,136,136,5,6,6,6,0,0,120,160, + 240,160,160,184,4,8,8,6,1,254,96,144,128,128,144,96, + 32,64,4,7,7,6,1,0,64,32,240,128,224,128,240,4, + 7,7,6,1,0,32,64,240,128,224,128,240,4,7,7,6, + 1,0,32,80,240,128,224,128,240,4,7,7,6,1,0,80, + 0,240,128,224,128,240,3,7,7,6,1,0,128,64,224,64, + 64,64,224,3,7,7,6,1,0,32,64,224,64,64,64,224, + 3,7,7,6,1,0,64,160,224,64,64,64,224,3,7,7, + 6,1,0,160,0,224,64,64,64,224,5,6,6,6,0,0, + 112,72,232,72,72,112,4,7,7,6,1,0,80,160,144,208, + 176,144,144,4,7,7,6,1,0,64,32,96,144,144,144,96, + 4,7,7,6,1,0,32,64,96,144,144,144,96,4,7,7, + 6,1,0,32,80,96,144,144,144,96,4,7,7,6,1,0, + 80,160,96,144,144,144,96,4,7,7,6,1,0,80,0,96, + 144,144,144,96,5,5,5,6,0,0,136,80,32,80,136,4, + 8,8,6,1,255,16,112,176,176,208,208,224,128,4,7,7, + 6,1,0,64,32,144,144,144,144,96,4,7,7,6,1,0, + 32,64,144,144,144,144,96,4,7,7,6,1,0,32,80,144, + 144,144,144,96,4,7,7,6,1,0,80,0,144,144,144,144, + 96,5,7,7,6,0,0,16,32,136,80,32,32,32,4,6, + 6,6,1,0,128,224,144,144,224,128,4,6,6,6,1,0, + 96,144,160,160,144,160,4,7,7,6,1,0,64,32,0,112, + 144,144,112,4,7,7,6,1,0,32,64,0,112,144,144,112, + 4,7,7,6,1,0,32,80,0,112,144,144,112,4,7,7, + 6,1,0,80,160,0,112,144,144,112,4,6,6,6,1,0, + 80,0,112,144,144,112,4,7,7,6,1,0,32,80,32,112, + 144,144,112,5,4,4,6,0,0,112,168,176,120,4,6,6, + 6,1,254,112,128,128,112,32,64,4,7,7,6,1,0,64, + 32,0,96,176,192,112,4,7,7,6,1,0,32,64,0,96, + 176,192,112,4,7,7,6,1,0,32,80,0,96,176,192,112, + 4,6,6,6,1,0,80,0,96,176,192,112,3,7,7,6, + 1,0,128,64,0,192,64,64,224,3,7,7,6,1,0,32, + 64,0,192,64,64,224,3,7,7,6,1,0,64,160,0,192, + 64,64,224,3,6,6,6,1,0,160,0,192,64,64,224,4, + 7,7,6,1,0,48,96,16,112,144,144,96,4,7,7,6, + 1,0,80,160,0,224,144,144,144,4,7,7,6,1,0,64, + 32,0,96,144,144,96,4,7,7,6,1,0,32,64,0,96, + 144,144,96,4,7,7,6,1,0,32,80,0,96,144,144,96, + 4,7,7,6,1,0,80,160,0,96,144,144,96,4,6,6, + 6,1,0,80,0,96,144,144,96,5,5,5,6,0,0,32, + 0,248,0,32,4,4,4,6,1,0,112,176,208,224,4,7, + 7,6,1,0,64,32,0,144,144,144,112,4,7,7,6,1, + 0,32,64,0,144,144,144,112,4,7,7,6,1,0,32,80, + 0,144,144,144,112,4,6,6,6,1,0,80,0,144,144,144, + 112,4,9,9,6,1,254,32,64,0,144,144,144,112,144,96, + 4,8,8,6,1,254,128,128,224,144,144,224,128,128,4,8, + 8,6,1,254,80,0,144,144,144,112,144,96}; diff --git a/Marlin/dogm_font_data_HD44780_C.h b/Marlin/dogm_font_data_HD44780_C.h new file mode 100644 index 000000000..bc6af9150 --- /dev/null +++ b/Marlin/dogm_font_data_HD44780_C.h @@ -0,0 +1,171 @@ +/* + Fontname: HD44780_C v1.2 + Copyright: A. Hardtung, public domain + Capital A Height: 7, '1' Height: 7 + Calculated Max Values w= 5 h= 8 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 8 + Font Bounding box w= 6 h= 9 x= 0 y=-2 + Calculated Min Values x= 0 y=-1 dx= 0 dy= 0 + Pure Font ascent = 7 descent=-1 + X Font ascent = 7 descent=-1 + Max Font ascent = 8 descent=-1 +*/ +#include +const u8g_fntpgm_uint8_t HD44780_C_5x7[2522] U8G_SECTION(".progmem.HD44780_C_5x7") = { + 0,6,9,0,254,7,1,145,3,34,32,255,255,8,255,7, + 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, + 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, + 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, + 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, + 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, + 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, + 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, + 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, + 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, + 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, + 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, + 0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64, + 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, + 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, + 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, + 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, + 48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16, + 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, + 112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5, + 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, + 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, + 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, + 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, + 8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168, + 112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7, + 7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0, + 0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144, + 136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128, + 128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5, + 7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6, + 0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128, + 128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16, + 16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136, + 5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7, + 6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0, + 136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136, + 136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128, + 128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7, + 7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0, + 0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32, + 32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136, + 136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5, + 7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6, + 0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136, + 136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32, + 64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224, + 5,7,7,6,0,0,32,112,160,160,168,112,32,3,7,7, + 6,1,0,224,32,32,32,32,32,224,5,3,3,6,0,4, + 32,80,136,5,1,1,6,0,0,248,2,2,2,6,2,5, + 128,64,5,5,5,6,0,0,112,8,120,136,120,5,7,7, + 6,0,0,128,128,176,200,136,136,240,5,5,5,6,0,0, + 112,128,128,136,112,5,7,7,6,0,0,8,8,104,152,136, + 136,120,5,5,5,6,0,0,112,136,248,128,112,5,7,7, + 6,0,0,48,72,224,64,64,64,64,5,6,6,6,0,255, + 112,136,136,120,8,112,5,7,7,6,0,0,128,128,176,200, + 136,136,136,1,7,7,6,2,0,128,0,128,128,128,128,128, + 3,8,8,6,1,255,32,0,32,32,32,32,160,64,4,7, + 7,6,0,0,128,128,144,160,192,160,144,3,7,7,6,1, + 0,192,64,64,64,64,64,224,5,5,5,6,0,0,208,168, + 168,168,168,5,5,5,6,0,0,176,200,136,136,136,5,5, + 5,6,0,0,112,136,136,136,112,5,6,6,6,0,255,240, + 136,136,240,128,128,5,6,6,6,0,255,120,136,136,120,8, + 8,5,5,5,6,0,0,176,200,128,128,128,5,5,5,6, + 0,0,112,128,112,8,240,5,7,7,6,0,0,64,64,224, + 64,64,72,48,5,5,5,6,0,0,136,136,136,152,104,5, + 5,5,6,0,0,136,136,136,80,32,5,5,5,6,0,0, + 136,136,168,168,80,5,5,5,6,0,0,136,80,32,80,136, + 5,6,6,6,0,255,136,136,136,120,8,112,5,5,5,6, + 0,0,248,16,32,64,248,5,5,5,6,0,2,184,168,168, + 168,184,5,5,5,6,0,2,184,136,184,160,184,5,5,5, + 6,0,2,184,160,184,136,184,5,6,6,6,0,1,8,40, + 72,248,64,32,5,5,5,6,0,0,56,112,224,136,240,0, + 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, + 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, + 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, + 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, + 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, + 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, + 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, + 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, + 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, + 0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0, + 0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0, + 6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,5, + 7,7,6,0,0,248,136,128,240,136,136,240,5,7,7,6, + 0,0,248,136,128,128,128,128,128,5,7,7,6,0,0,80, + 0,248,128,240,128,248,5,7,7,6,0,0,168,168,168,112, + 168,168,168,5,7,7,6,0,0,240,8,8,112,8,8,240, + 5,7,7,6,0,0,136,136,152,168,200,136,136,5,8,8, + 6,0,0,80,32,136,152,168,168,200,136,5,7,7,6,0, + 0,120,40,40,40,40,168,72,5,7,7,6,0,0,248,136, + 136,136,136,136,136,5,7,7,6,0,0,136,136,136,80,32, + 64,128,5,7,7,6,0,0,32,112,168,168,168,112,32,5, + 7,7,6,0,0,136,136,136,120,8,8,8,5,7,7,6, + 0,0,168,168,168,168,168,168,248,5,7,7,6,0,0,192, + 64,64,112,72,72,112,5,7,7,6,0,0,136,136,136,200, + 168,168,200,5,7,7,6,0,0,112,136,8,56,8,136,112, + 5,7,7,6,0,0,144,168,168,232,168,168,144,5,7,7, + 6,0,0,120,136,136,120,40,72,136,5,7,7,6,0,0, + 24,96,128,240,136,136,112,4,5,5,6,0,0,224,144,224, + 144,224,5,5,5,6,0,0,248,136,128,128,128,5,7,7, + 6,0,0,80,0,112,136,248,128,112,5,5,5,6,0,0, + 168,168,112,168,168,5,5,5,6,0,0,240,8,48,8,240, + 5,5,5,6,0,0,136,152,168,200,136,5,7,7,6,0, + 0,80,32,136,152,168,200,136,4,5,5,6,0,0,144,160, + 192,160,144,5,5,5,6,0,0,248,40,40,168,72,5,5, + 5,6,0,0,136,216,168,136,136,5,5,5,6,0,0,136, + 136,248,136,136,5,5,5,6,0,0,248,136,136,136,136,5, + 5,5,6,0,0,248,32,32,32,32,5,5,5,6,0,0, + 136,136,120,8,8,5,5,5,6,0,0,168,168,168,168,248, + 5,5,5,6,0,0,192,64,112,72,112,5,5,5,6,0, + 0,136,136,200,168,200,4,5,5,6,0,0,128,128,224,144, + 224,5,5,5,6,0,0,112,136,56,136,112,5,5,5,6, + 0,0,144,168,232,168,144,5,5,5,6,0,0,120,136,120, + 40,72,5,5,5,6,0,1,32,72,144,72,32,5,5,5, + 6,0,1,32,144,72,144,32,5,3,3,6,0,0,72,144, + 216,5,3,3,6,0,4,216,72,144,5,7,7,6,0,0, + 144,208,176,144,56,40,56,5,7,7,6,0,0,32,0,32, + 64,128,136,112,5,7,7,6,0,0,24,32,32,112,32,32, + 192,5,7,7,6,0,0,32,80,64,240,64,64,120,1,2, + 2,6,2,0,128,128,1,4,4,6,2,0,128,128,128,128, + 3,5,5,6,1,0,160,160,160,0,224,3,5,5,6,1, + 0,160,160,160,0,160,5,7,7,6,0,0,160,0,232,16, + 32,64,128,5,5,5,6,0,1,216,112,32,112,216,5,7, + 7,6,0,0,160,64,168,16,32,64,128,3,6,6,6,1, + 1,224,64,64,64,64,224,5,6,6,6,0,1,248,80,80, + 80,80,248,5,7,7,6,0,0,32,112,168,32,32,32,32, + 5,7,7,6,0,0,32,32,32,32,168,112,32,5,7,7, + 6,0,0,128,144,176,248,176,144,128,5,7,7,6,0,0, + 8,72,104,248,104,72,8,5,7,7,6,0,0,128,136,168, + 248,168,136,128,5,7,7,6,0,0,128,224,136,16,32,64, + 128,2,2,2,6,2,2,192,192,5,8,8,6,0,255,120, + 40,40,40,72,136,248,136,5,8,8,6,0,255,136,136,136, + 136,136,136,248,8,5,8,8,6,0,255,168,168,168,168,168, + 168,248,8,5,6,6,6,0,255,120,40,72,136,248,136,5, + 7,7,6,0,255,32,32,112,168,168,112,32,5,6,6,6, + 0,255,136,136,136,136,248,8,5,6,6,6,0,255,168,168, + 168,168,248,8,2,2,2,6,2,6,64,128,3,1,1,6, + 1,7,160,5,2,2,6,0,6,72,176,5,8,8,6,0, + 0,16,32,0,112,136,248,128,112,5,6,6,6,0,255,112, + 128,136,112,32,96,3,7,7,6,1,0,160,0,160,160,160, + 32,192,5,6,6,6,0,1,32,112,112,112,248,32,5,5, + 5,6,0,1,80,0,136,0,80,5,5,5,6,0,1,112, + 136,136,136,112,5,7,7,6,0,0,136,144,168,88,184,8, + 8,5,7,7,6,0,0,136,144,184,72,184,8,56,5,7, + 7,6,0,0,136,144,184,72,152,32,56,5,8,8,6,0, + 0,192,64,192,72,216,56,8,8,5,7,7,6,0,0,136, + 248,136,248,136,248,136,4,5,5,6,0,2,192,0,48,0, + 96,5,8,8,6,0,0,64,160,224,168,8,40,120,32,5, + 8,8,6,0,0,64,112,64,120,64,112,64,224,5,8,8, + 6,0,0,32,112,32,248,32,112,32,112,5,7,7,6,0, + 0,104,0,232,0,104,16,56,5,8,8,6,0,0,16,112, + 16,240,16,112,16,56,5,7,7,6,0,1,32,112,32,248, + 32,112,32,5,8,8,6,0,0,16,144,80,48,80,144,16, + 56,5,8,8,6,0,0,48,72,32,80,80,32,144,96,5, + 7,7,6,0,0,120,168,168,120,40,40,40,5,8,8,6, + 0,0,248,248,248,248,248,248,248,248}; diff --git a/Marlin/dogm_font_data_HD44780_J.h b/Marlin/dogm_font_data_HD44780_J.h new file mode 100644 index 000000000..84f568161 --- /dev/null +++ b/Marlin/dogm_font_data_HD44780_J.h @@ -0,0 +1,169 @@ +/* + Fontname: HD44780_J + Copyright: A. Hardtung, public domain + Capital A Height: 7, '1' Height: 7 + Calculated Max Values w= 6 h=10 x= 2 y= 8 dx= 6 dy= 0 ascent= 8 len= 8 + Font Bounding box w= 6 h= 9 x= 0 y=-2 + Calculated Min Values x= 0 y=-2 dx= 0 dy= 0 + Pure Font ascent = 7 descent=-1 + X Font ascent = 7 descent=-1 + Max Font ascent = 8 descent=-2 +*/ +#include +const u8g_fntpgm_uint8_t HD44780_J_5x7[2491] U8G_SECTION(".progmem.HD44780_J_5x7") = { + 0,6,9,0,254,7,1,145,3,34,32,255,255,8,254,7, + 255,0,0,0,6,0,8,1,7,7,6,2,0,128,128,128, + 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, + 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, + 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, + 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, + 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, + 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, + 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, + 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, + 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, + 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, + 0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64, + 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, + 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, + 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, + 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, + 48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16, + 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, + 112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5, + 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, + 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, + 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, + 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, + 8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168, + 112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7, + 7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0, + 0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144, + 136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128, + 128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5, + 7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6, + 0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128, + 128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16, + 16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136, + 5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7, + 6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0, + 136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136, + 136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128, + 128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7, + 7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0, + 0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32, + 32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136, + 136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5, + 7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6, + 0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136, + 136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32, + 64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224, + 5,7,7,6,0,0,136,80,248,32,248,32,32,3,7,7, + 6,1,0,224,32,32,32,32,32,224,5,3,3,6,0,4, + 32,80,136,5,1,1,6,0,0,248,2,2,2,6,2,5, + 128,64,5,5,5,6,0,0,112,8,120,136,120,5,7,7, + 6,0,0,128,128,176,200,136,136,240,5,5,5,6,0,0, + 112,128,128,136,112,5,7,7,6,0,0,8,8,104,152,136, + 136,120,5,5,5,6,0,0,112,136,248,128,112,5,7,7, + 6,0,0,48,72,224,64,64,64,64,5,6,6,6,0,255, + 112,136,136,120,8,112,5,7,7,6,0,0,128,128,176,200, + 136,136,136,1,7,7,6,2,0,128,0,128,128,128,128,128, + 3,8,8,6,1,255,32,0,32,32,32,32,160,64,4,7, + 7,6,0,0,128,128,144,160,192,160,144,3,7,7,6,1, + 0,192,64,64,64,64,64,224,5,5,5,6,0,0,208,168, + 168,168,168,5,5,5,6,0,0,176,200,136,136,136,5,5, + 5,6,0,0,112,136,136,136,112,5,6,6,6,0,255,240, + 136,136,240,128,128,5,6,6,6,0,255,120,136,136,120,8, + 8,5,5,5,6,0,0,176,200,128,128,128,5,5,5,6, + 0,0,112,128,112,8,240,5,7,7,6,0,0,64,64,224, + 64,64,72,48,5,5,5,6,0,0,136,136,136,152,104,5, + 5,5,6,0,0,136,136,136,80,32,5,5,5,6,0,0, + 136,136,168,168,80,5,5,5,6,0,0,136,80,32,80,136, + 5,6,6,6,0,255,136,136,136,120,8,112,5,5,5,6, + 0,0,248,16,32,64,248,3,7,7,6,1,0,32,64,64, + 128,64,64,32,1,7,7,6,2,0,128,128,128,128,128,128, + 128,3,7,7,6,1,0,128,64,64,32,64,64,128,5,5, + 5,6,0,1,32,16,248,16,32,5,5,5,6,0,1,32, + 64,248,64,32,0,0,0,6,0,8,0,0,0,6,0,8, + 0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6, + 0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0, + 0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8, + 0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6, + 0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0, + 0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8, + 0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6, + 0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0, + 0,6,0,8,0,0,0,6,0,8,0,0,0,6,0,8, + 0,0,0,6,0,8,0,0,0,6,0,8,0,0,0,6, + 0,8,0,0,0,6,0,8,0,0,0,6,0,8,0,0, + 0,6,0,8,0,0,0,6,0,8,3,3,3,6,0,0, + 224,160,224,3,4,4,6,2,3,224,128,128,128,3,4,4, + 6,0,0,32,32,32,224,3,3,3,6,0,0,128,64,32, + 2,2,2,6,1,2,192,192,5,6,6,6,0,0,248,8, + 248,8,16,32,5,5,5,6,0,0,248,8,48,32,64,4, + 5,5,6,0,0,16,32,96,160,32,5,5,5,6,0,0, + 32,248,136,8,48,5,4,4,6,0,0,248,32,32,248,5, + 5,5,6,0,0,16,248,48,80,144,5,5,5,6,0,0, + 64,248,72,80,64,5,4,4,6,0,0,112,16,16,248,4, + 5,5,6,0,0,240,16,240,16,240,5,4,4,6,0,0, + 168,168,8,48,5,1,1,6,0,4,248,5,7,7,6,0, + 0,248,8,40,48,32,32,64,5,7,7,6,0,0,8,16, + 32,96,160,32,32,5,7,7,6,0,0,32,248,136,136,8, + 16,32,5,6,6,6,0,0,248,32,32,32,32,248,5,7, + 7,6,0,0,16,248,16,48,80,144,16,5,7,7,6,0, + 0,64,248,72,72,72,72,144,5,7,7,6,0,0,32,248, + 32,248,32,32,32,5,6,6,6,0,0,120,72,136,8,16, + 96,5,7,7,6,0,0,64,120,144,16,16,16,32,5,6, + 6,6,0,0,248,8,8,8,8,248,5,7,7,6,0,0, + 80,248,80,80,16,32,64,5,6,6,6,0,0,192,8,200, + 8,16,224,5,6,6,6,0,0,248,8,16,32,80,136,5, + 7,7,6,0,0,64,248,72,80,64,64,56,5,6,6,6, + 0,0,136,136,72,8,16,96,5,6,6,6,0,0,120,72, + 168,24,16,96,5,7,7,6,0,0,16,224,32,248,32,32, + 64,5,6,6,6,0,0,168,168,168,8,16,32,5,7,7, + 6,0,0,112,0,248,32,32,32,64,3,7,7,6,1,0, + 128,128,128,192,160,128,128,5,7,7,6,0,0,32,32,248, + 32,32,64,128,5,6,6,6,0,0,112,0,0,0,0,248, + 5,6,6,6,0,0,248,8,80,32,80,128,5,6,6,6, + 0,1,32,248,16,32,112,168,3,7,7,6,1,0,32,32, + 32,32,32,64,128,5,6,6,6,0,0,32,16,136,136,136, + 136,5,7,7,6,0,0,128,128,248,128,128,128,120,5,6, + 6,6,0,0,248,8,8,8,16,96,5,5,5,6,0,1, + 64,160,16,8,8,5,7,7,6,0,0,32,248,32,32,168, + 168,32,5,6,6,6,0,0,248,8,8,80,32,16,4,6, + 6,6,1,0,224,0,224,0,224,16,5,6,6,6,0,0, + 32,64,128,136,248,8,5,6,6,6,0,0,8,8,80,32, + 80,128,5,6,6,6,0,0,248,64,248,64,64,56,5,7, + 7,6,0,0,64,64,248,72,80,64,64,5,7,7,6,0, + 0,112,16,16,16,16,16,248,5,6,6,6,0,0,248,8, + 248,8,8,248,5,7,7,6,0,0,112,0,248,8,8,16, + 32,4,7,7,6,0,0,144,144,144,144,16,32,64,5,6, + 6,6,0,0,32,160,160,168,168,176,5,7,7,6,0,0, + 128,128,128,136,144,160,192,5,6,6,6,0,0,248,136,136, + 136,136,248,5,6,6,6,0,0,248,136,136,8,16,32,5, + 6,6,6,0,0,192,0,8,8,16,224,4,3,3,6,0, + 4,32,144,64,3,3,3,6,0,4,224,160,224,5,5,5, + 6,0,1,72,168,144,144,104,5,7,7,6,0,0,80,0, + 112,8,120,136,120,4,8,8,6,1,255,96,144,144,224,144, + 144,224,128,5,5,5,6,0,0,112,128,96,136,112,5,6, + 6,6,0,255,136,136,152,232,136,128,5,5,5,6,0,0, + 120,160,144,136,112,5,7,7,6,0,254,48,72,136,136,240, + 128,128,5,8,8,6,0,254,120,136,136,136,120,8,8,112, + 5,5,5,6,0,1,56,32,32,160,64,4,3,3,6,0, + 3,16,208,16,4,8,8,6,0,255,16,0,48,16,16,16, + 144,96,3,3,3,6,0,4,160,64,160,5,7,7,6,0, + 0,32,112,160,160,168,112,32,5,7,7,6,0,0,64,64, + 224,64,224,64,120,5,7,7,6,0,0,112,0,176,200,136, + 136,136,5,7,7,6,0,0,80,0,112,136,136,136,112,5, + 7,7,6,0,255,176,200,136,136,240,128,128,5,7,7,6, + 0,255,104,152,136,136,120,8,8,5,6,6,6,0,0,112, + 136,248,136,136,112,5,3,3,6,0,2,88,168,208,5,5, + 5,6,0,0,112,136,136,80,216,5,7,7,6,0,0,80, + 0,136,136,136,152,104,5,7,7,6,0,0,248,128,64,32, + 64,128,248,5,5,5,6,0,0,248,80,80,80,152,5,7, + 7,6,0,0,248,0,136,80,32,80,136,5,7,7,6,0, + 255,136,136,136,136,120,8,112,5,6,6,6,0,1,8,240, + 32,248,32,32,5,5,5,6,0,0,248,64,120,72,136,5, + 5,5,6,0,0,248,168,248,136,136,5,5,5,6,0,1, + 32,0,248,0,32,0,0,0,6,0,8,6,10,10,6,0, + 254,252,252,252,252,252,252,252,252,252,252}; diff --git a/Marlin/dogm_font_data_HD44780_W.h b/Marlin/dogm_font_data_HD44780_W.h new file mode 100644 index 000000000..2a52429a6 --- /dev/null +++ b/Marlin/dogm_font_data_HD44780_W.h @@ -0,0 +1,203 @@ +/* + Fontname: HD44780_W + Copyright: A.Hardtung, public domain + Capital A Height: 7, '1' Height: 7 + Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9 + Font Bounding box w= 6 h= 9 x= 0 y=-2 + Calculated Min Values x= 0 y=-1 dx= 0 dy= 0 + Pure Font ascent = 7 descent=-1 + X Font ascent = 7 descent=-1 + Max Font ascent = 8 descent=-1 +*/ +#include +const u8g_fntpgm_uint8_t HD44780_W_5x7[3034] U8G_SECTION(".progmem.HD44780_W_5x7") = { + 0,6,9,0,254,7,2,79,3,222,16,255,255,8,255,7, + 255,4,7,7,6,0,0,16,48,112,240,112,48,16,4,7, + 7,6,1,0,128,192,224,240,224,192,128,5,3,3,6,0, + 4,216,72,144,5,3,3,6,0,4,216,144,72,5,7,7, + 6,0,0,32,112,248,0,32,112,248,5,7,7,6,0,0, + 248,112,32,0,248,112,32,5,5,5,6,0,1,112,248,248, + 248,112,5,7,7,6,0,0,8,8,40,72,248,64,32,5, + 7,7,6,0,0,32,112,168,32,32,32,32,5,7,7,6, + 0,0,32,32,32,32,168,112,32,5,5,5,6,0,1,32, + 64,248,64,32,5,5,5,6,0,1,32,16,248,16,32,5, + 7,7,6,0,0,16,32,64,32,16,0,248,5,7,7,6, + 0,0,64,32,16,32,64,0,248,5,5,5,6,0,1,32, + 32,112,112,248,5,5,5,6,0,0,248,112,112,32,32,0, + 0,0,6,0,0,1,7,7,6,2,0,128,128,128,128,128, + 0,128,3,2,2,6,1,5,160,160,5,7,7,6,0,0, + 80,80,248,80,248,80,80,5,7,7,6,0,0,32,120,160, + 112,40,240,32,5,7,7,6,0,0,192,200,16,32,64,152, + 24,5,7,7,6,0,0,96,144,160,64,168,144,104,2,3, + 3,6,1,4,192,64,128,3,7,7,6,1,0,32,64,128, + 128,128,64,32,3,7,7,6,1,0,128,64,32,32,32,64, + 128,5,5,5,6,0,1,32,168,112,168,32,5,5,5,6, + 0,1,32,32,248,32,32,2,3,3,6,2,255,192,64,128, + 5,1,1,6,0,3,248,2,2,2,6,2,0,192,192,5, + 5,5,6,0,1,8,16,32,64,128,5,7,7,6,0,0, + 112,136,152,168,200,136,112,3,7,7,6,1,0,64,192,64, + 64,64,64,224,5,7,7,6,0,0,112,136,8,112,128,128, + 248,5,7,7,6,0,0,248,16,32,16,8,8,240,5,7, + 7,6,0,0,16,48,80,144,248,16,16,5,7,7,6,0, + 0,248,128,240,8,8,136,112,5,7,7,6,0,0,48,64, + 128,240,136,136,112,5,7,7,6,0,0,248,8,16,32,32, + 32,32,5,7,7,6,0,0,112,136,136,112,136,136,112,5, + 7,7,6,0,0,112,136,136,120,8,16,96,2,5,5,6, + 2,0,192,192,0,192,192,2,6,6,6,2,255,192,192,0, + 192,64,128,4,7,7,6,0,0,16,32,64,128,64,32,16, + 5,3,3,6,0,2,248,0,248,4,7,7,6,1,0,128, + 64,32,16,32,64,128,5,7,7,6,0,0,112,136,8,16, + 32,0,32,5,6,6,6,0,0,112,136,8,104,168,112,5, + 7,7,6,0,0,112,136,136,248,136,136,136,5,7,7,6, + 0,0,240,136,136,240,136,136,240,5,7,7,6,0,0,112, + 136,128,128,128,136,112,5,7,7,6,0,0,224,144,136,136, + 136,144,224,5,7,7,6,0,0,248,128,128,240,128,128,248, + 5,7,7,6,0,0,248,128,128,240,128,128,128,5,7,7, + 6,0,0,112,136,128,184,136,136,112,5,7,7,6,0,0, + 136,136,136,248,136,136,136,1,7,7,6,2,0,128,128,128, + 128,128,128,128,5,7,7,6,0,0,56,16,16,16,16,144, + 96,5,7,7,6,0,0,136,144,160,192,160,144,136,5,7, + 7,6,0,0,128,128,128,128,128,128,248,5,7,7,6,0, + 0,136,216,168,136,136,136,136,5,7,7,6,0,0,136,136, + 200,168,152,136,136,5,7,7,6,0,0,112,136,136,136,136, + 136,112,5,7,7,6,0,0,240,136,136,240,128,128,128,5, + 7,7,6,0,0,112,136,136,136,168,144,104,5,7,7,6, + 0,0,240,136,136,240,160,144,136,5,7,7,6,0,0,120, + 128,128,112,8,8,240,5,7,7,6,0,0,248,32,32,32, + 32,32,32,5,7,7,6,0,0,136,136,136,136,136,136,112, + 5,7,7,6,0,0,136,136,136,136,136,80,32,5,7,7, + 6,0,0,136,136,136,136,136,168,80,5,7,7,6,0,0, + 136,136,80,32,80,136,136,5,7,7,6,0,0,136,136,136, + 80,32,32,32,5,7,7,6,0,0,248,8,16,32,64,128, + 248,3,7,7,6,1,0,224,128,128,128,128,128,224,5,5, + 5,6,0,1,128,64,32,16,8,3,7,7,6,1,0,224, + 32,32,32,32,32,224,5,3,3,6,0,4,32,80,136,5, + 1,1,6,0,0,248,2,2,2,6,2,5,128,64,5,5, + 5,6,0,0,112,8,120,136,120,5,7,7,6,0,0,128, + 128,176,200,136,136,240,5,5,5,6,0,0,112,128,128,136, + 112,5,7,7,6,0,0,8,8,104,152,136,136,120,5,5, + 5,6,0,0,112,136,248,128,112,5,7,7,6,0,0,48, + 72,224,64,64,64,64,5,6,6,6,0,255,112,136,136,120, + 8,112,5,7,7,6,0,0,128,128,176,200,136,136,136,1, + 7,7,6,2,0,128,0,128,128,128,128,128,3,8,8,6, + 1,255,32,0,32,32,32,32,160,64,4,7,7,6,0,0, + 128,128,144,160,192,160,144,3,7,7,6,1,0,192,64,64, + 64,64,64,224,5,5,5,6,0,0,208,168,168,168,168,5, + 5,5,6,0,0,176,200,136,136,136,5,5,5,6,0,0, + 112,136,136,136,112,5,6,6,6,0,255,240,136,136,240,128, + 128,5,6,6,6,0,255,120,136,136,120,8,8,5,5,5, + 6,0,0,176,200,128,128,128,5,5,5,6,0,0,112,128, + 112,8,240,5,7,7,6,0,0,64,64,224,64,64,72,48, + 5,5,5,6,0,0,136,136,136,152,104,5,5,5,6,0, + 0,136,136,136,80,32,5,5,5,6,0,0,136,136,168,168, + 80,5,5,5,6,0,0,136,80,32,80,136,5,6,6,6, + 0,255,136,136,136,120,8,112,5,5,5,6,0,0,248,16, + 32,64,248,3,7,7,6,1,0,32,64,64,128,64,64,32, + 1,7,7,6,2,0,128,128,128,128,128,128,128,3,7,7, + 6,1,0,128,64,64,32,64,64,128,5,6,6,6,0,1, + 8,40,72,248,64,32,5,7,7,6,0,0,32,80,136,136, + 136,136,248,5,7,7,6,0,0,248,136,128,240,136,136,240, + 5,8,8,6,0,255,120,40,40,40,72,136,248,136,5,7, + 7,6,0,0,168,168,168,112,168,168,168,5,7,7,6,0, + 0,240,8,8,112,8,8,240,5,7,7,6,0,0,136,136, + 152,168,200,136,136,5,8,8,6,0,0,80,32,136,152,168, + 168,200,136,5,7,7,6,0,0,120,40,40,40,40,168,72, + 5,7,7,6,0,0,248,136,136,136,136,136,136,5,7,7, + 6,0,0,136,136,136,80,32,64,128,5,8,8,6,0,255, + 136,136,136,136,136,136,248,8,5,7,7,6,0,0,136,136, + 136,120,8,8,8,5,7,7,6,0,0,168,168,168,168,168, + 168,248,5,8,8,6,0,255,168,168,168,168,168,168,248,8, + 5,7,7,6,0,0,192,64,64,112,72,72,112,5,7,7, + 6,0,0,136,136,136,200,168,168,200,5,7,7,6,0,0, + 112,136,40,80,8,136,112,5,5,5,6,0,0,64,160,144, + 144,104,5,7,7,6,0,0,32,48,40,40,32,224,224,5, + 7,7,6,0,0,248,136,128,128,128,128,128,5,5,5,6, + 0,0,248,80,80,80,152,5,7,7,6,0,0,248,128,64, + 32,64,128,248,5,5,5,6,0,0,120,144,144,144,96,5, + 7,7,6,0,0,48,40,56,40,200,216,24,5,6,6,6, + 0,0,8,112,160,32,32,16,5,6,6,6,0,1,32,112, + 112,112,248,32,5,7,7,6,0,0,112,136,136,248,136,136, + 112,5,5,5,6,0,0,112,136,136,80,216,5,7,7,6, + 0,0,48,72,32,80,136,136,112,5,3,3,6,0,2,88, + 168,208,5,6,6,6,0,0,80,248,248,248,112,32,5,5, + 5,6,0,0,112,128,96,136,112,5,7,7,6,0,0,112, + 136,136,136,136,136,136,5,7,7,6,0,0,216,216,216,216, + 216,216,216,1,7,7,6,2,0,128,0,128,128,128,128,128, + 5,7,7,6,0,0,32,112,160,160,168,112,32,5,7,7, + 6,0,0,48,64,64,224,64,80,168,5,5,5,6,0,0, + 136,112,80,112,136,5,7,7,6,0,0,136,80,248,32,248, + 32,32,1,7,7,6,2,0,128,128,128,0,128,128,128,5, + 8,8,6,0,0,48,72,32,80,80,32,144,96,5,7,7, + 6,0,0,24,32,32,112,32,32,192,5,7,7,6,0,0, + 248,136,184,184,184,136,248,5,7,7,6,0,0,112,8,120, + 136,120,0,248,5,5,5,6,0,1,40,80,160,80,40,5, + 7,7,6,0,0,144,168,168,232,168,168,144,5,7,7,6, + 0,0,120,136,136,120,40,72,136,5,7,7,6,0,0,248, + 136,168,136,152,168,248,2,3,3,6,2,4,64,128,192,4, + 5,5,6,0,3,96,144,144,144,96,5,7,7,6,0,0, + 32,32,248,32,32,0,248,4,5,5,6,0,3,96,144,32, + 64,240,3,5,5,6,0,3,224,32,224,32,224,5,8,8, + 6,0,0,224,144,224,128,144,184,144,24,5,8,8,6,0, + 255,136,136,136,136,152,232,128,128,5,7,7,6,0,0,120, + 152,152,120,24,24,24,2,2,2,6,2,2,192,192,5,5, + 5,6,0,0,80,136,168,168,80,3,5,5,6,0,3,64, + 192,64,64,224,5,7,7,6,0,0,112,136,136,136,112,0, + 248,5,5,5,6,0,1,160,80,40,80,160,5,7,7,6, + 0,0,136,144,168,88,184,8,8,5,7,7,6,0,0,136, + 144,184,72,152,32,56,5,8,8,6,0,0,192,64,192,72, + 216,56,8,8,5,7,7,6,0,0,32,0,32,64,128,136, + 112,5,8,8,6,0,0,64,32,32,80,136,248,136,136,5, + 8,8,6,0,0,16,32,32,80,136,248,136,136,5,8,8, + 6,0,0,32,80,0,112,136,248,136,136,5,8,8,6,0, + 0,104,144,0,112,136,248,136,136,5,8,8,6,0,0,80, + 0,32,80,136,248,136,136,5,8,8,6,0,0,32,80,32, + 112,136,248,136,136,5,7,7,6,0,0,56,96,160,184,224, + 160,184,5,8,8,6,0,255,112,136,128,128,136,112,32,96, + 5,8,8,6,0,0,64,32,0,248,128,240,128,248,5,8, + 8,6,0,0,8,16,0,248,128,240,128,248,5,8,8,6, + 0,0,32,80,0,248,128,240,128,248,5,7,7,6,0,0, + 80,0,248,128,240,128,248,3,8,8,6,1,0,128,64,0, + 224,64,64,64,224,3,8,8,6,1,0,32,64,0,224,64, + 64,64,224,3,8,8,6,1,0,64,160,0,224,64,64,64, + 224,3,7,7,6,1,0,160,0,224,64,64,64,224,5,7, + 7,6,0,0,112,72,72,232,72,72,112,5,8,8,6,0, + 0,104,144,0,136,200,168,152,136,5,8,8,6,0,0,64, + 32,112,136,136,136,136,112,5,8,8,6,0,0,16,32,112, + 136,136,136,136,112,5,8,8,6,0,0,32,80,0,112,136, + 136,136,112,5,8,8,6,0,0,104,144,0,112,136,136,136, + 112,5,8,8,6,0,0,80,0,112,136,136,136,136,112,5, + 5,5,6,0,1,136,80,32,80,136,5,7,7,6,0,0, + 112,32,112,168,112,32,112,5,8,8,6,0,0,64,32,136, + 136,136,136,136,112,5,8,8,6,0,0,16,32,136,136,136, + 136,136,112,5,8,8,6,0,0,32,80,0,136,136,136,136, + 112,5,8,8,6,0,0,80,0,136,136,136,136,136,112,5, + 8,8,6,0,0,16,32,136,80,32,32,32,32,5,8,8, + 6,0,0,192,64,112,72,72,112,64,224,5,7,7,6,0, + 0,48,72,72,112,72,72,176,5,8,8,6,0,0,64,32, + 0,112,8,120,136,120,5,8,8,6,0,0,16,32,0,112, + 8,120,136,120,5,8,8,6,0,0,32,80,0,112,8,120, + 136,120,5,8,8,6,0,0,104,144,0,112,8,120,136,120, + 5,7,7,6,0,0,80,0,112,8,120,136,120,5,8,8, + 6,0,0,32,80,32,112,8,120,136,120,5,6,6,6,0, + 0,208,40,120,160,168,80,5,6,6,6,0,255,112,128,136, + 112,32,96,5,8,8,6,0,0,64,32,0,112,136,248,128, + 112,5,8,8,6,0,0,16,32,0,112,136,248,128,112,5, + 8,8,6,0,0,32,80,0,112,136,248,128,112,5,7,7, + 6,0,0,80,0,112,136,248,128,112,3,8,8,6,1,0, + 128,64,0,64,192,64,64,224,3,8,8,6,1,0,32,64, + 0,64,192,64,64,224,3,8,8,6,1,0,64,160,0,64, + 192,64,64,224,3,7,7,6,1,0,160,0,64,192,64,64, + 224,5,7,7,6,0,0,160,64,160,16,120,136,112,5,8, + 8,6,0,0,104,144,0,176,200,136,136,136,5,8,8,6, + 0,0,64,32,0,112,136,136,136,112,5,8,8,6,0,0, + 16,32,0,112,136,136,136,112,5,8,8,6,0,0,32,80, + 0,112,136,136,136,112,5,8,8,6,0,0,104,144,0,112, + 136,136,136,112,5,7,7,6,0,0,80,0,112,136,136,136, + 112,5,5,5,6,0,1,32,0,248,0,32,5,7,7,6, + 0,0,16,32,112,168,112,32,64,5,8,8,6,0,0,64, + 32,0,136,136,136,152,104,5,8,8,6,0,0,16,32,0, + 136,136,136,152,104,5,8,8,6,0,0,32,80,0,136,136, + 136,152,104,5,7,7,6,0,0,80,0,136,136,136,152,104, + 5,9,9,6,0,255,16,32,0,136,136,136,248,8,112,4, + 7,7,6,1,0,192,64,96,80,96,64,224,5,8,8,6, + 0,255,80,0,136,136,136,248,8,112}; diff --git a/Marlin/dogm_font_data_ISO10646_1_Marlin.h b/Marlin/dogm_font_data_ISO10646_1.h similarity index 91% rename from Marlin/dogm_font_data_ISO10646_1_Marlin.h rename to Marlin/dogm_font_data_ISO10646_1.h index eeec3b2de..2e973cc51 100644 --- a/Marlin/dogm_font_data_ISO10646_1_Marlin.h +++ b/Marlin/dogm_font_data_ISO10646_1.h @@ -1,17 +1,17 @@ /* - Fontname: ISO10646-1-Marlin + Fontname: ISO10646-1 Copyright: A.Hardtung, public domain Capital A Height: 7, '1' Height: 7 - Calculated Max Values w= 5 h=10 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9 + Calculated Max Values w= 5 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9 Font Bounding box w= 6 h= 9 x= 0 y=-2 - Calculated Min Values x= 0 y=-2 dx= 0 dy= 0 + Calculated Min Values x= 0 y=-1 dx= 0 dy= 0 Pure Font ascent = 7 descent=-1 X Font ascent = 7 descent=-1 - Max Font ascent = 8 descent=-2 + Max Font ascent = 8 descent=-1 */ #include -const u8g_fntpgm_uint8_t ISO10646_1_Marlin_5x7[2596] U8G_SECTION(".progmem.ISO10646_1_Marlin_5x7") = { - 0,6,9,0,254,7,1,146,3,33,32,255,255,8,254,7, +const u8g_fntpgm_uint8_t ISO10646_1_5x7[2592] U8G_SECTION(".progmem.ISO10646_1_5x7") = { + 0,6,9,0,254,7,1,146,3,33,32,255,255,8,255,7, 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, @@ -166,11 +166,11 @@ const u8g_fntpgm_uint8_t ISO10646_1_Marlin_5x7[2596] U8G_SECTION(".progmem.ISO10 8,6,0,0,32,80,0,112,136,136,136,112,5,8,8,6, 0,0,104,144,0,112,136,136,136,112,5,7,7,6,0,0, 80,0,112,136,136,136,112,5,5,5,6,0,1,32,0,248, - 0,32,5,8,8,6,0,0,64,240,200,136,136,152,120,16, - 5,8,8,6,0,0,192,248,136,136,136,136,136,248,5,5, - 5,6,0,1,32,48,248,48,32,5,8,8,6,0,0,32, - 112,248,32,32,32,32,224,5,9,9,6,0,255,32,112,168, - 168,184,136,136,112,32,5,9,9,6,0,255,224,128,192,176, - 168,40,48,40,40,5,9,9,6,0,255,248,168,136,136,136, - 136,136,168,248,5,10,10,6,0,254,32,80,80,80,80,136, - 168,168,136,112}; + 0,32,5,7,7,6,0,255,16,112,168,168,168,112,64,5, + 8,8,6,0,0,64,32,0,136,136,136,152,104,5,8,8, + 6,0,0,16,32,0,136,136,136,152,104,5,8,8,6,0, + 0,32,80,0,136,136,136,152,104,5,7,7,6,0,0,80, + 0,136,136,136,152,104,5,9,9,6,0,255,16,32,0,136, + 136,136,248,8,112,4,7,7,6,1,255,192,64,96,80,96, + 64,224,5,8,8,6,0,255,80,0,136,136,136,120,8,112 + }; diff --git a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h new file mode 100644 index 000000000..b44936cef --- /dev/null +++ b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h @@ -0,0 +1,174 @@ +/* + Fontname: ISO10646_5_Cyrillic + Copyright: A. Hardtung, public domain + Capital A Height: 7, '1' Height: 7 + Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9 + Font Bounding box w= 6 h= 9 x= 0 y=-2 + Calculated Min Values x= 0 y=-1 dx= 0 dy= 0 + Pure Font ascent = 7 descent=-1 + X Font ascent = 7 descent=-1 + Max Font ascent = 8 descent=-1 +*/ +#include +const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2560] U8G_SECTION(".progmem.ISO10646_5_Cyrillic_5x7") = { + 0,6,9,0,254,7,1,145,3,32,32,255,255,8,255,7, + 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, + 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, + 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, + 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, + 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, + 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, + 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, + 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, + 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, + 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, + 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, + 0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64, + 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, + 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, + 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, + 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, + 48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16, + 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, + 112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5, + 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, + 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, + 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, + 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, + 8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168, + 112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7, + 7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0, + 0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144, + 136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128, + 128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5, + 7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6, + 0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128, + 128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16, + 16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136, + 5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7, + 6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0, + 136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136, + 136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128, + 128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7, + 7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0, + 0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32, + 32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136, + 136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5, + 7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6, + 0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136, + 136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32, + 64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224, + 5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,1, + 0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,80, + 136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,64, + 5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,0, + 0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,128, + 128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,120, + 5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,0, + 0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,136, + 136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,136, + 136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,8, + 8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,6, + 0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,192, + 64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,168, + 168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,6, + 0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,136, + 240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,5, + 5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,0, + 112,128,112,8,240,5,7,7,6,0,0,64,64,224,64,64, + 72,48,5,5,5,6,0,0,136,136,136,152,104,5,5,5, + 6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,136, + 168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,6, + 6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,0, + 248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,64, + 64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,3, + 7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,6, + 0,3,104,144,0,0,0,6,0,0,0,0,0,6,0,0, + 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, + 0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, + 0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, + 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, + 0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, + 0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, + 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, + 0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, + 0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, + 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, + 0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, + 0,6,0,0,0,0,0,6,0,0,5,8,8,6,0,0, + 64,248,128,128,240,128,128,248,5,8,8,6,0,0,80,248, + 128,128,240,128,128,248,5,7,7,6,0,0,224,64,64,112, + 72,72,112,5,8,8,6,0,0,16,32,248,136,128,128,128, + 128,5,7,7,6,0,0,48,72,128,224,128,72,48,5,7, + 7,6,0,0,112,136,128,112,8,136,112,3,7,7,6,1, + 0,224,64,64,64,64,64,224,3,8,8,6,1,0,160,0, + 224,64,64,64,64,224,5,7,7,6,0,0,56,16,16,16, + 16,144,96,5,7,7,6,0,0,160,160,160,184,168,168,184, + 5,7,7,6,0,0,160,160,160,248,168,168,184,4,7,7, + 6,0,0,224,64,112,80,80,80,80,5,8,8,6,0,0, + 16,32,136,144,160,224,144,136,5,8,8,6,0,0,64,32, + 136,152,168,200,136,136,5,9,9,6,0,255,80,32,136,136, + 136,80,32,32,32,5,8,8,6,0,255,136,136,136,136,136, + 136,248,32,5,7,7,6,0,0,112,136,136,248,136,136,136, + 5,7,7,6,0,0,248,128,128,240,136,136,240,5,7,7, + 6,0,0,240,136,136,240,136,136,240,5,7,7,6,0,0, + 248,136,128,128,128,128,128,5,8,8,6,0,255,120,40,40, + 40,72,136,248,136,5,7,7,6,0,0,248,128,128,240,128, + 128,248,5,7,7,6,0,0,168,168,168,112,168,168,168,5, + 7,7,6,0,0,240,8,8,112,8,8,240,5,7,7,6, + 0,0,136,136,152,168,200,136,136,5,8,8,6,0,0,80, + 32,136,152,168,168,200,136,5,7,7,6,0,0,136,144,160, + 192,160,144,136,5,7,7,6,0,0,120,40,40,40,40,168, + 72,5,7,7,6,0,0,136,216,168,136,136,136,136,5,7, + 7,6,0,0,136,136,136,248,136,136,136,5,7,7,6,0, + 0,112,136,136,136,136,136,112,5,7,7,6,0,0,248,136, + 136,136,136,136,136,5,7,7,6,0,0,240,136,136,240,128, + 128,128,5,7,7,6,0,0,112,136,128,128,128,136,112,5, + 7,7,6,0,0,248,32,32,32,32,32,32,5,7,7,6, + 0,0,136,136,136,80,32,64,128,5,7,7,6,0,0,32, + 112,168,168,168,112,32,5,7,7,6,0,0,136,136,80,32, + 80,136,136,5,8,8,6,0,255,136,136,136,136,136,136,248, + 8,5,7,7,6,0,0,136,136,136,152,104,8,8,5,7, + 7,6,0,0,168,168,168,168,168,168,248,5,8,8,6,0, + 255,168,168,168,168,168,168,248,8,5,7,7,6,0,0,192, + 64,64,112,72,72,112,5,7,7,6,0,0,136,136,136,200, + 168,168,200,5,7,7,6,0,0,128,128,128,240,136,136,240, + 5,7,7,6,0,0,112,136,8,56,8,136,112,5,7,7, + 6,0,0,144,168,168,232,168,168,144,5,7,7,6,0,0, + 120,136,136,120,40,72,136,5,5,5,6,0,0,112,8,120, + 136,120,5,7,7,6,0,0,24,96,128,240,136,136,112,4, + 5,5,6,0,0,224,144,224,144,224,5,5,5,6,0,0, + 248,136,128,128,128,5,6,6,6,0,255,120,40,72,136,248, + 136,5,5,5,6,0,0,112,136,248,128,112,5,5,5,6, + 0,0,168,168,112,168,168,5,5,5,6,0,0,240,8,48, + 8,240,5,5,5,6,0,0,136,152,168,200,136,5,7,7, + 6,0,0,80,32,136,152,168,200,136,4,5,5,6,0,0, + 144,160,192,160,144,5,5,5,6,0,0,248,40,40,168,72, + 5,5,5,6,0,0,136,216,168,136,136,5,5,5,6,0, + 0,136,136,248,136,136,5,5,5,6,0,0,112,136,136,136, + 112,5,5,5,6,0,0,248,136,136,136,136,5,6,6,6, + 0,255,240,136,136,240,128,128,5,5,5,6,0,0,112,128, + 128,136,112,5,5,5,6,0,0,248,32,32,32,32,5,6, + 6,6,0,255,136,136,136,120,8,112,5,6,6,6,0,0, + 32,112,168,168,112,32,5,5,5,6,0,0,136,80,32,80, + 136,5,6,6,6,0,255,136,136,136,136,248,8,5,5,5, + 6,0,0,136,136,248,8,8,5,5,5,6,0,0,168,168, + 168,168,248,5,6,6,6,0,255,168,168,168,168,248,8,5, + 5,5,6,0,0,192,64,112,72,112,5,5,5,6,0,0, + 136,136,200,168,200,3,5,5,6,1,0,128,128,192,160,192, + 5,5,5,6,0,0,112,136,56,136,112,5,5,5,6,0, + 0,144,168,232,168,144,5,5,5,6,0,0,120,136,120,40, + 72,5,8,8,6,0,0,64,32,0,112,136,248,128,112,5, + 7,7,6,0,0,80,0,112,136,248,128,112,5,9,9,6, + 0,255,64,224,64,64,120,72,72,72,16,5,8,8,6,0, + 0,16,32,0,248,136,128,128,128,5,5,5,6,0,0,112, + 136,96,136,112,5,5,5,6,0,0,112,128,112,8,240,1, + 7,7,6,2,0,128,0,128,128,128,128,128,3,7,7,6, + 1,0,160,0,64,64,64,64,64,3,8,8,6,1,255,32, + 0,32,32,32,32,160,64,5,5,5,6,0,0,160,160,184, + 168,184,5,5,5,6,0,0,160,160,248,168,184,5,6,6, + 6,0,0,64,224,64,120,72,72,4,8,8,6,0,0,16, + 32,0,144,160,192,160,144,5,8,8,6,0,0,64,32,0, + 136,152,168,200,136,5,9,9,6,0,255,80,32,0,136,136, + 136,120,8,112,5,6,6,6,0,255,136,136,136,136,248,32 + }; diff --git a/Marlin/dogm_font_data_ISO10646_Kana.h b/Marlin/dogm_font_data_ISO10646_Kana.h new file mode 100644 index 000000000..9970a3823 --- /dev/null +++ b/Marlin/dogm_font_data_ISO10646_Kana.h @@ -0,0 +1,173 @@ +/* + Fontname: ISO10646_Kana + Copyright: A. Hardtung, public domain + Capital A Height: 7, '1' Height: 7 + Calculated Max Values w= 5 h= 9 x= 2 y= 5 dx= 6 dy= 0 ascent= 8 len= 9 + Font Bounding box w= 6 h= 9 x= 0 y=-2 + Calculated Min Values x= 0 y=-1 dx= 0 dy= 0 + Pure Font ascent = 7 descent=-1 + X Font ascent = 7 descent=-1 + Max Font ascent = 8 descent=-1 +*/ +#include +const u8g_fntpgm_uint8_t ISO10646_Kana_5x7[2549] U8G_SECTION(".progmem.ISO10646_Kana_5x7") = { + 0,6,9,0,254,7,1,145,3,32,32,255,255,8,255,7, + 255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, + 128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6, + 0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32, + 120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32, + 64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104, + 2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32, + 64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32, + 32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5, + 5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192, + 64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192, + 192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6, + 0,0,112,136,152,168,200,136,112,3,7,7,6,1,0,64, + 192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112, + 128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240, + 5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7, + 6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0, + 48,64,128,240,136,136,112,5,7,7,6,0,0,248,8,16, + 32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136, + 112,5,7,7,6,0,0,112,136,136,120,8,16,96,2,5, + 5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192, + 192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64, + 32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1, + 0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136, + 8,16,32,0,32,5,6,6,6,0,0,112,136,8,104,168, + 112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,7, + 7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,0, + 0,112,136,128,128,128,136,112,5,7,7,6,0,0,224,144, + 136,136,136,144,224,5,7,7,6,0,0,248,128,128,240,128, + 128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,5, + 7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,6, + 0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,128, + 128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,16, + 16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,136, + 5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,7, + 6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,0, + 136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,136, + 136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,128, + 128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,7, + 7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,0, + 0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,32, + 32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,136, + 136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,5, + 7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,6, + 0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,136, + 136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,32, + 64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,224, + 5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,1, + 0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,80, + 136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,64, + 5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,0, + 0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,128, + 128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,120, + 5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,0, + 0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,136, + 136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,136, + 136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,8, + 8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,6, + 0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,192, + 64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,168, + 168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,6, + 0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,136, + 240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,5, + 5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,0, + 112,128,112,8,240,5,7,7,6,0,0,64,64,224,64,64, + 72,48,5,5,5,6,0,0,136,136,136,152,104,5,5,5, + 6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,136, + 168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,6, + 6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,0, + 248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,64, + 64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,3, + 7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,6, + 0,3,104,144,0,0,0,6,0,0,0,0,0,6,0,0, + 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, + 0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, + 0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, + 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, + 0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, + 0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, + 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, + 0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, + 0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,0, + 0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,6, + 0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, + 0,6,0,0,0,0,0,6,0,0,5,3,3,6,0,2, + 248,0,248,5,6,6,6,0,0,248,8,40,48,32,64,5, + 7,7,6,0,0,248,8,40,48,32,32,64,4,5,5,6, + 0,0,16,32,96,160,32,5,7,7,6,0,0,8,16,32, + 96,160,32,32,5,5,5,6,0,0,32,248,136,8,48,5, + 7,7,6,0,0,32,248,136,136,8,16,32,5,4,4,6, + 0,0,248,32,32,248,5,6,6,6,0,0,248,32,32,32, + 32,248,5,5,5,6,0,0,16,248,48,80,144,5,7,7, + 6,0,0,16,248,16,48,80,144,16,5,5,5,6,0,0, + 64,248,72,80,64,5,7,7,6,0,0,40,0,64,248,72, + 80,64,5,7,7,6,0,0,32,248,32,248,32,32,32,5, + 8,8,6,0,0,40,0,32,248,32,248,32,32,4,6,6, + 6,0,0,64,112,144,16,16,32,5,8,8,6,0,0,40, + 0,64,112,144,16,16,32,5,6,6,6,0,0,64,120,144, + 16,16,32,5,8,8,6,0,0,40,0,64,120,144,16,16, + 32,5,5,5,6,0,0,248,8,8,8,248,5,7,7,6, + 0,0,40,0,248,8,8,8,248,5,7,7,6,0,255,80, + 248,80,80,16,32,64,5,9,9,6,0,255,40,0,80,248, + 80,80,16,32,64,5,6,6,6,0,0,192,8,200,8,16, + 224,5,8,8,6,0,0,40,0,192,8,200,8,16,224,5, + 6,6,6,0,0,248,8,16,32,80,136,5,8,8,6,0, + 0,40,0,248,8,16,32,80,136,5,6,6,6,0,0,64, + 248,72,80,64,120,5,8,8,6,0,0,40,0,64,248,72, + 80,64,120,4,4,4,6,0,1,16,208,16,224,5,7,7, + 6,0,0,40,0,8,200,8,16,224,5,7,7,6,0,255, + 32,120,136,40,16,40,64,5,9,9,6,0,255,40,0,32, + 120,136,40,16,40,64,5,6,6,6,0,0,240,32,248,32, + 64,128,5,8,8,6,0,0,40,0,240,32,248,32,64,128, + 4,5,5,6,0,1,192,16,208,16,224,5,6,6,6,0, + 0,192,8,200,8,16,224,5,8,8,6,0,0,40,0,192, + 8,200,8,16,224,5,6,6,6,0,0,112,0,248,32,32, + 64,5,8,8,6,0,0,40,0,112,0,248,32,32,64,3, + 7,7,6,1,0,128,128,128,192,160,128,128,4,8,8,6, + 1,0,80,0,128,128,192,160,128,128,5,7,7,6,0,0, + 32,32,248,32,32,64,128,5,6,6,6,0,0,112,0,0, + 0,0,248,5,6,6,6,0,0,248,8,80,32,80,128,5, + 7,7,6,0,255,32,248,8,16,32,112,168,3,7,7,6, + 1,0,32,32,32,32,32,64,128,5,5,5,6,0,0,16, + 136,136,136,136,5,7,7,6,0,0,40,0,16,136,136,136, + 136,5,8,8,6,0,0,24,24,0,16,136,136,136,136,5, + 7,7,6,0,0,128,128,248,128,128,128,120,5,8,8,6, + 0,0,40,128,128,248,128,128,128,120,5,8,8,6,0,0, + 24,152,128,248,128,128,128,120,5,6,6,6,0,0,248,8, + 8,8,16,96,5,8,8,6,0,0,40,0,248,8,8,8, + 16,96,5,8,8,6,0,0,24,24,248,8,8,8,16,96, + 5,5,5,6,0,1,64,160,16,8,8,5,7,7,6,0, + 1,40,0,64,160,16,8,8,5,7,7,6,0,1,24,24, + 64,160,16,8,8,5,6,6,6,0,0,32,248,32,32,168, + 168,5,8,8,6,0,0,40,0,32,248,32,32,168,168,5, + 8,8,6,0,0,24,24,32,248,32,32,168,168,5,6,6, + 6,0,0,248,8,8,80,32,16,4,6,6,6,1,0,224, + 0,224,0,224,16,5,6,6,6,0,0,32,64,128,144,248, + 8,5,6,6,6,0,0,8,8,80,32,80,128,5,6,6, + 6,0,0,120,32,248,32,32,56,5,7,7,6,0,0,64, + 64,248,72,80,64,64,5,7,7,6,0,0,64,248,72,80, + 64,64,64,5,5,5,6,0,0,112,16,16,16,248,5,7, + 7,6,0,0,112,16,16,16,16,16,248,4,5,5,6,1, + 0,240,16,240,16,240,5,7,7,6,0,0,248,8,8,248, + 8,8,248,5,6,6,6,0,0,112,0,248,8,16,32,3, + 6,6,6,1,0,160,160,160,160,32,64,5,6,6,6,0, + 0,80,80,80,80,88,144,4,6,6,6,1,0,128,128,128, + 144,160,192,5,6,6,6,0,0,248,136,136,136,248,136,5, + 5,5,6,0,0,248,136,8,16,96,5,6,6,6,0,0, + 248,136,8,8,16,96,5,6,6,6,0,0,16,248,80,80, + 248,16,5,6,6,6,0,0,248,8,80,96,64,248,5,6, + 6,6,0,0,248,8,248,8,16,32,5,6,6,6,0,0, + 128,64,8,8,16,224,5,8,8,6,0,0,40,0,32,248, + 136,8,24,32,5,6,6,6,0,0,64,248,72,72,136,144, + 4,5,5,6,1,0,128,240,160,32,32,5,8,8,6,0, + 0,40,0,248,136,8,8,16,96,5,8,8,6,0,0,40, + 0,16,248,80,80,248,16,5,7,7,6,0,0,40,0,248, + 16,32,32,248,5,8,8,6,0,0,40,0,248,8,248,8, + 16,32,2,2,2,6,2,2,192,192,5,1,1,6,0,3, + 248,5,5,5,6,0,1,128,64,32,16,8,5,6,6,6, + 0,1,40,128,64,32,16,8,5,7,7,6,0,0,248,8, + 8,8,8,8,8}; diff --git a/Marlin/dogm_font_data_Marlin_symbols.h b/Marlin/dogm_font_data_Marlin_symbols.h new file mode 100644 index 000000000..9fdb0370c --- /dev/null +++ b/Marlin/dogm_font_data_Marlin_symbols.h @@ -0,0 +1,22 @@ +/* + Fontname: Marlin_symbols + Copyright: Created with Fony 1.4.7 + Capital A Height: 0, '1' Height: 0 + Calculated Max Values w= 5 h=10 x= 0 y= 3 dx= 6 dy= 0 ascent= 8 len=10 + Font Bounding box w= 6 h= 9 x= 0 y=-2 + Calculated Min Values x= 0 y=-2 dx= 0 dy= 0 + Pure Font ascent = 0 descent= 0 + X Font ascent = 0 descent= 0 + Max Font ascent = 8 descent=-2 +*/ +#include +const u8g_fntpgm_uint8_t Marlin_symbols[140] U8G_SECTION(".progmem.Marlin_symbols") = { + 0,6,9,0,254,0,0,0,0,0,1,9,0,8,254,0, + 0,5,8,8,6,0,0,64,240,200,136,136,152,120,16,5, + 8,8,6,0,0,192,248,136,136,136,136,136,248,5,5,5, + 6,0,1,32,48,248,48,32,5,8,8,6,0,0,32,112, + 248,32,32,32,32,224,5,9,9,6,0,255,32,112,168,168, + 184,136,136,112,32,5,9,9,6,0,255,224,128,192,176,168, + 40,48,40,40,5,9,9,6,0,255,248,168,136,136,136,136, + 136,168,248,5,10,10,6,0,254,32,80,80,80,80,136,168, + 168,136,112,3,3,3,6,0,3,64,160,64}; diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index 7025e87bb..b9235145b 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -14,11 +14,9 @@ #ifndef DOGM_LCD_IMPLEMENTATION_H #define DOGM_LCD_IMPLEMENTATION_H -#define MARLIN_VERSION "1.0.2" - /** -* Implementation of the LCD display routines for a DOGM128 graphic display. These are common LCD 128x64 pixel graphic displays. -**/ + * Implementation of the LCD display routines for a DOGM128 graphic display. These are common LCD 128x64 pixel graphic displays. + */ #ifdef ULTIPANEL #define BLEN_A 0 @@ -32,53 +30,99 @@ #include #include "DOGMbitmaps.h" -#include "dogm_font_data_ISO10646_1_Marlin.h" + #include "ultralcd.h" #include "ultralcd_st7920_u8glib_rrd.h" +#include "Configuration.h" -/* Russian language not supported yet, needs custom font +// save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT +// we don't have a big font for Cyrillic, Kana +#if defined( MAPPER_C2C3 ) || defined( MAPPER_NON ) +// #define USE_BIG_EDIT_FONT +#endif -#ifdef LANGUAGE_RU -#include "LiquidCrystalRus.h" -#define LCD_CLASS LiquidCrystalRus +// If you have spare 2300Byte of progmem and want to use a +// smaller font on the Info-screen uncomment the next line. +//#define USE_SMALL_INFOFONT +#ifdef USE_SMALL_INFOFONT + #include "dogm_font_data_6x9_marlin.h" + #define FONT_STATUSMENU_NAME u8g_font_6x9 #else -#include -#define LCD_CLASS LiquidCrystal + #define FONT_STATUSMENU_NAME FONT_MENU_NAME #endif -*/ -#define USE_BIG_EDIT_FONT // save 3120 bytes of PROGMEM by commenting out this line -#define FONT_MENU ISO10646_1_Marlin_5x7 +#include "dogm_font_data_Marlin_symbols.h" // The Marlin special symbols +#define FONT_SPECIAL_NAME Marlin_symbols + +#ifndef SIMULATE_ROMFONT + #if defined( DISPLAY_CHARSET_ISO10646_1 ) + #include "dogm_font_data_ISO10646_1.h" + #define FONT_MENU_NAME ISO10646_1_5x7 + #elif defined( DISPLAY_CHARSET_ISO10646_5 ) + #include "dogm_font_data_ISO10646_5_Cyrillic.h" + #define FONT_MENU_NAME ISO10646_5_Cyrillic_5x7 + #elif defined( DISPLAY_CHARSET_ISO10646_KANA ) + #include "dogm_font_data_ISO10646_Kana.h" + #define FONT_MENU_NAME ISO10646_Kana_5x7 + #else // fall-back + #include "dogm_font_data_ISO10646_1.h" + #define FONT_MENU_NAME ISO10646_1_5x7 + #endif +#else // SIMULATE_ROMFONT + #if defined( DISPLAY_CHARSET_HD44780_JAPAN ) + #include "dogm_font_data_HD44780_J.h" + #define FONT_MENU_NAME HD44780_J_5x7 + #elif defined( DISPLAY_CHARSET_HD44780_WESTERN ) + #include "dogm_font_data_HD44780_W.h" + #define FONT_MENU_NAME HD44780_W_5x7 + #elif defined( DISPLAY_CHARSET_HD44780_CYRILLIC ) + #include "dogm_font_data_HD44780_C.h" + #define FONT_MENU_NAME HD44780_C_5x7 + #else // fall-back + #include "dogm_font_data_ISO10646_1.h" + #define FONT_MENU_NAME ISO10646_1_5x7 + #endif +#endif // SIMULATE_ROMFONT + +//#define FONT_STATUSMENU_NAME FONT_MENU_NAME + +#define FONT_STATUSMENU 1 +#define FONT_SPECIAL 2 +#define FONT_MENU_EDIT 3 +#define FONT_MENU 4 // DOGM parameters (size in pixels) #define DOG_CHAR_WIDTH 6 #define DOG_CHAR_HEIGHT 12 #ifdef USE_BIG_EDIT_FONT - #define FONT_MENU_EDIT u8g_font_9x18 + #define FONT_MENU_EDIT_NAME u8g_font_9x18 #define DOG_CHAR_WIDTH_EDIT 9 #define DOG_CHAR_HEIGHT_EDIT 18 #define LCD_WIDTH_EDIT 14 #else - #define FONT_MENU_EDIT ISO10646_1_Marlin_5x7 + #define FONT_MENU_EDIT_NAME FONT_MENU_NAME #define DOG_CHAR_WIDTH_EDIT 6 #define DOG_CHAR_HEIGHT_EDIT 12 #define LCD_WIDTH_EDIT 22 #endif -#define FONT_STATUSMENU FONT_MENU - #define START_ROW 0 -/* Custom characters defined in font font_6x10_marlin.c */ -#define LCD_STR_DEGREE "\xB0" -#define LCD_STR_REFRESH "\xF8" -#define LCD_STR_FOLDER "\xF9" -#define LCD_STR_ARROW_RIGHT "\xFA" -#define LCD_STR_UPLEVEL "\xFB" -#define LCD_STR_CLOCK "\xFC" -#define LCD_STR_FEEDRATE "\xFD" -#define LCD_STR_BEDTEMP "\xFE" -#define LCD_STR_THERMOMETER "\xFF" +/* Custom characters defined in font font_6x10_marlin_symbols */ +// \x00 intentionally skipped to avoid problems in strings +#define LCD_STR_REFRESH "\x01" +#define LCD_STR_FOLDER "\x02" +#define LCD_STR_ARROW_RIGHT "\x03" +#define LCD_STR_UPLEVEL "\x04" +#define LCD_STR_CLOCK "\x05" +#define LCD_STR_FEEDRATE "\x06" +#define LCD_STR_BEDTEMP "\x07" +#define LCD_STR_THERMOMETER "\x08" +#define LCD_STR_DEGREE "\x09" + +#define LCD_STR_SPECIAL_MAX '\x09' +// Maximum here is 0x1f because 0x20 is ' ' (space) and the normal charsets begin. +// Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here. int lcd_contrast; @@ -97,6 +141,51 @@ U8GLIB_NHD_C12864 u8g(DOGLCD_CS, DOGLCD_A0); U8GLIB_DOGM128 u8g(DOGLCD_CS, DOGLCD_A0); // HW-SPI Com: CS, A0 #endif +#include "utf_mapper.h" + +char currentfont = 0; + +static void lcd_setFont(char font_nr) { + switch(font_nr) { + case FONT_STATUSMENU : {u8g.setFont(FONT_STATUSMENU_NAME); currentfont = FONT_STATUSMENU;}; break; + case FONT_MENU : {u8g.setFont(FONT_MENU_NAME); currentfont = FONT_MENU;}; break; + case FONT_SPECIAL : {u8g.setFont(FONT_SPECIAL_NAME); currentfont = FONT_SPECIAL;}; break; + case FONT_MENU_EDIT : {u8g.setFont(FONT_MENU_EDIT_NAME); currentfont = FONT_MENU_EDIT;}; break; + break; + } +} + +char lcd_print(char c) { + if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) { + u8g.setFont(FONT_SPECIAL_NAME); + u8g.print(c); + lcd_setFont(currentfont); + return 1; + } else { + return charset_mapper(c); + } +} + +char lcd_print(char* str) { + char c; + int i = 0; + char n = 0; + while ((c = str[i++])) { + n += lcd_print(c); + } + return n; +} + +/* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */ +char lcd_printPGM(const char* str) { + char c; + char n = 0; + while ((c = pgm_read_byte(str++))) { + n += lcd_print(c); + } + return n; +} + static void lcd_implementation_init() { #ifdef LCD_PIN_BL // Enable LCD backlight @@ -131,7 +220,7 @@ static void lcd_implementation_init() u8g.firstPage(); do { u8g.drawBitmapP(offx, offy, START_BMPBYTEWIDTH, START_BMPHEIGHT, start_bmp); - u8g.setFont(FONT_MENU); + lcd_setFont(FONT_MENU); #ifndef STRING_SPLASH_LINE2 u8g.drawStr(txt1X, u8g.getHeight() - DOG_CHAR_HEIGHT, STRING_SPLASH_LINE1); #else @@ -144,21 +233,17 @@ static void lcd_implementation_init() static void lcd_implementation_clear() { } // Automatically cleared by Picture Loop -/* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */ -static void lcd_printPGM(const char* str) { - char c; - while ((c = pgm_read_byte(str++))) u8g.print(c); -} - static void _draw_heater_status(int x, int heater) { bool isBed = heater < 0; int y = 17 + (isBed ? 1 : 0); - u8g.setFont(FONT_STATUSMENU); + + lcd_setFont(FONT_STATUSMENU); u8g.setPrintPos(x,7); - u8g.print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5))); + lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5))); lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); u8g.setPrintPos(x,28); - u8g.print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5)); + lcd_print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5)); + lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); if (!isHeatingHotend(0)) { u8g.drawBox(x+7,y,2,2); @@ -190,7 +275,7 @@ static void lcd_implementation_status_screen() { u8g.drawFrame(54,49,73,4); // SD Card Progress bar and clock - u8g.setFont(FONT_STATUSMENU); + lcd_setFont(FONT_STATUSMENU); if (IS_SD_PRINTING) { // Progress bar solid part @@ -200,9 +285,9 @@ static void lcd_implementation_status_screen() { u8g.setPrintPos(80,48); if (starttime != 0) { uint16_t time = (millis() - starttime) / 60000; - u8g.print(itostr2(time/60)); - u8g.print(':'); - u8g.print(itostr2(time%60)); + lcd_print(itostr2(time/60)); + lcd_print(':'); + lcd_print(itostr2(time%60)); } else { lcd_printPGM(PSTR("--:--")); @@ -216,69 +301,79 @@ static void lcd_implementation_status_screen() { if (EXTRUDERS < 4) _draw_heater_status(81, -1); // Fan - u8g.setFont(FONT_STATUSMENU); + lcd_setFont(FONT_STATUSMENU); u8g.setPrintPos(104,27); #if defined(FAN_PIN) && FAN_PIN > -1 int per = ((fanSpeed + 1) * 100) / 256; if (per) { - u8g.print(itostr3(per)); - u8g.print('%'); + + lcd_print(itostr3(per)); + lcd_print('%'); } else #endif { - u8g.print("---"); + lcd_printPGM(PSTR("---")); } // X, Y, Z-Coordinates #define XYZ_BASELINE 38 - u8g.setFont(FONT_STATUSMENU); - u8g.drawBox(0,30,128,9); + lcd_setFont(FONT_STATUSMENU); + + #ifdef USE_SMALL_INFOFONT + u8g.drawBox(0,30,128,10); + #else + u8g.drawBox(0,30,128,9); + #endif u8g.setColorIndex(0); // white on black u8g.setPrintPos(2,XYZ_BASELINE); - u8g.print('X'); + lcd_print('X'); u8g.drawPixel(8,XYZ_BASELINE - 5); u8g.drawPixel(8,XYZ_BASELINE - 3); u8g.setPrintPos(10,XYZ_BASELINE); - u8g.print(ftostr31ns(current_position[X_AXIS])); + lcd_print(ftostr31ns(current_position[X_AXIS])); u8g.setPrintPos(43,XYZ_BASELINE); - u8g.print('Y'); + lcd_print('Y'); u8g.drawPixel(49,XYZ_BASELINE - 5); u8g.drawPixel(49,XYZ_BASELINE - 3); u8g.setPrintPos(51,XYZ_BASELINE); - u8g.print(ftostr31ns(current_position[Y_AXIS])); + lcd_print(ftostr31ns(current_position[Y_AXIS])); u8g.setPrintPos(83,XYZ_BASELINE); - u8g.print('Z'); + lcd_print('Z'); u8g.drawPixel(89,XYZ_BASELINE - 5); u8g.drawPixel(89,XYZ_BASELINE - 3); u8g.setPrintPos(91,XYZ_BASELINE); - u8g.print(ftostr31(current_position[Z_AXIS])); + lcd_print(ftostr31(current_position[Z_AXIS])); u8g.setColorIndex(1); // black on white // Feedrate - u8g.setFont(FONT_MENU); + lcd_setFont(FONT_MENU); u8g.setPrintPos(3,49); - u8g.print(LCD_STR_FEEDRATE[0]); - u8g.setFont(FONT_STATUSMENU); + lcd_print(LCD_STR_FEEDRATE[0]); + lcd_setFont(FONT_STATUSMENU); u8g.setPrintPos(12,49); - u8g.print(itostr3(feedmultiply)); - u8g.print('%'); + lcd_print(itostr3(feedmultiply)); + lcd_print('%'); // Status line - u8g.setFont(FONT_STATUSMENU); + lcd_setFont(FONT_STATUSMENU); + #ifdef USE_SMALL_INFOFONT + u8g.setPrintPos(0,62); + #else u8g.setPrintPos(0,63); + #endif #ifndef FILAMENT_LCD_DISPLAY - u8g.print(lcd_status_message); + lcd_print(lcd_status_message); #else if (millis() < message_millis + 5000) { //Display both Status message line and Filament display on the last line - u8g.print(lcd_status_message); + lcd_print(lcd_status_message); } else { lcd_printPGM(PSTR("dia:")); - u8g.print(ftostr12ns(filament_width_meas)); + lcd_print(ftostr12ns(filament_width_meas)); lcd_printPGM(PSTR(" factor:")); - u8g.print(itostr3(extrudemultiply)); - u8g.print('%'); + lcd_print(itostr3(extrudemultiply)); + lcd_print('%'); } #endif } @@ -301,14 +396,13 @@ static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, co lcd_implementation_mark_as_selected(row, isSelected); - while ((c = pgm_read_byte(pstr))) { - u8g.print(c); + while (c = pgm_read_byte(pstr)) { + n -= lcd_print(c); pstr++; - n--; } - while (n--) u8g.print(' '); - u8g.print(post_char); - u8g.print(' '); + while (n--) lcd_print(' '); + lcd_print(post_char); + lcd_print(' '); } static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const char* pstr, const char* data, bool pgm) { @@ -317,14 +411,13 @@ static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const c lcd_implementation_mark_as_selected(row, isSelected); - while ((c = pgm_read_byte(pstr))) { - u8g.print(c); + while (c = pgm_read_byte(pstr)) { + n -= lcd_print(c); pstr++; - n--; } - u8g.print(':'); - while (n--) u8g.print(' '); - if (pgm) { lcd_printPGM(data); } else { u8g.print(data); } + lcd_print(':'); + while (n--) lcd_print(' '); + if (pgm) { lcd_printPGM(data); } else { lcd_print((char *)data); } } #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) { #ifdef USE_BIG_EDIT_FONT if (lcd_strlen_P(pstr) <= LCD_WIDTH_EDIT - 1) { - u8g.setFont(FONT_MENU_EDIT); + lcd_setFont(FONT_MENU_EDIT); lcd_width = LCD_WIDTH_EDIT + 1; char_width = DOG_CHAR_WIDTH_EDIT; if (lcd_strlen_P(pstr) >= LCD_WIDTH_EDIT - vallen) rows = 2; } else { - u8g.setFont(FONT_MENU); + lcd_setFont(FONT_MENU); } #endif @@ -375,9 +468,9 @@ void lcd_implementation_drawedit(const char* pstr, char* value) { u8g.setPrintPos(0, rowHeight + kHalfChar); lcd_printPGM(pstr); - u8g.print(':'); + lcd_print(':'); u8g.setPrintPos((lcd_width - 1 - vallen) * char_width, rows * rowHeight + kHalfChar); - u8g.print(value); + lcd_print(value); } 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 lcd_implementation_mark_as_selected(row, isSelected); - if (isDir) u8g.print(LCD_STR_FOLDER[0]); - while ((c = *filename)) { - u8g.print(c); + if (isDir) lcd_print(LCD_STR_FOLDER[0]); + while (c = *filename) { + n -= lcd_print(c); filename++; - n--; } - while (n--) u8g.print(' '); + while (n--) lcd_print(' '); } #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 #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ') #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ') -static void lcd_implementation_quick_feedback() { - #if BEEPER > -1 - SET_OUTPUT(BEEPER); - for(int8_t i=0; i<10; i++) { - WRITE(BEEPER,HIGH); - delay(3); - WRITE(BEEPER,LOW); - delay(3); - } - #endif -} - #endif //__DOGM_LCD_IMPLEMENTATION_H diff --git a/Marlin/example_configurations/Felix/Configuration.h b/Marlin/example_configurations/Felix/Configuration.h index 865a55167..0ee841071 100644 --- a/Marlin/example_configurations/Felix/Configuration.h +++ b/Marlin/example_configurations/Felix/Configuration.h @@ -511,9 +511,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif diff --git a/Marlin/example_configurations/Felix/Configuration_DUAL.h b/Marlin/example_configurations/Felix/Configuration_DUAL.h index e9e0adba4..f5fc0ea5d 100644 --- a/Marlin/example_configurations/Felix/Configuration_DUAL.h +++ b/Marlin/example_configurations/Felix/Configuration_DUAL.h @@ -511,9 +511,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif diff --git a/Marlin/example_configurations/Hephestos/Configuration.h b/Marlin/example_configurations/Hephestos/Configuration.h index 5c426a5da..78ff90e85 100644 --- a/Marlin/example_configurations/Hephestos/Configuration.h +++ b/Marlin/example_configurations/Hephestos/Configuration.h @@ -539,9 +539,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif diff --git a/Marlin/example_configurations/K8200/Configuration.h b/Marlin/example_configurations/K8200/Configuration.h index 96a261caf..22ba764cd 100644 --- a/Marlin/example_configurations/K8200/Configuration.h +++ b/Marlin/example_configurations/K8200/Configuration.h @@ -543,9 +543,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif diff --git a/Marlin/example_configurations/SCARA/Configuration.h b/Marlin/example_configurations/SCARA/Configuration.h index 30dc73184..5b6f994ed 100644 --- a/Marlin/example_configurations/SCARA/Configuration.h +++ b/Marlin/example_configurations/SCARA/Configuration.h @@ -569,9 +569,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points //#define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif diff --git a/Marlin/example_configurations/WITBOX/Configuration.h b/Marlin/example_configurations/WITBOX/Configuration.h index 7a395d012..6fec28b24 100644 --- a/Marlin/example_configurations/WITBOX/Configuration.h +++ b/Marlin/example_configurations/WITBOX/Configuration.h @@ -536,9 +536,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif diff --git a/Marlin/example_configurations/delta/generic/Configuration.h b/Marlin/example_configurations/delta/generic/Configuration.h index fb78c269d..bbbcdbaae 100644 --- a/Marlin/example_configurations/delta/generic/Configuration.h +++ b/Marlin/example_configurations/delta/generic/Configuration.h @@ -552,9 +552,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif @@ -581,13 +583,16 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of //==============================LCD and SD support============================= // Define your display language below. Replace (en) with your language code and uncomment. -// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu +// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test // See also language.h -//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en) - -// Character based displays can have different extended charsets. -#define DISPLAY_CHARSET_HD44780_JAPAN // "ääööüüß23°" -//#define DISPLAY_CHARSET_HD44780_WESTERN // "ÄäÖöÜüß²³°" if you see a '~' instead of a 'arrow_right' at the right of submenuitems - this is the right one. +#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en) + +// 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. +// 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. +// See also documentation/LCDLanguageFont.md + #define DISPLAY_CHARSET_HD44780_JAPAN // this is the most common hardware + //#define DISPLAY_CHARSET_HD44780_WESTERN + //#define DISPLAY_CHARSET_HD44780_CYRILLIC //#define ULTRA_LCD //general LCD support, also 16x2 //#define DOGLCD // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family) diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration.h b/Marlin/example_configurations/delta/kossel_mini/Configuration.h index 556a98bf3..7e58bb0b7 100644 --- a/Marlin/example_configurations/delta/kossel_mini/Configuration.h +++ b/Marlin/example_configurations/delta/kossel_mini/Configuration.h @@ -554,9 +554,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif @@ -583,13 +585,16 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o //==============================LCD and SD support============================= // Define your display language below. Replace (en) with your language code and uncomment. -// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu +// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test // See also language.h -//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en) - -// Character based displays can have different extended charsets. -#define DISPLAY_CHARSET_HD44780_JAPAN // "ääööüüß23°" -//#define DISPLAY_CHARSET_HD44780_WESTERN // "ÄäÖöÜüß²³°" if you see a '~' instead of a 'arrow_right' at the right of submenuitems - this is the right one. +#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en) + +// 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. +// 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. +// See also documentation/LCDLanguageFont.md + #define DISPLAY_CHARSET_HD44780_JAPAN // this is the most common hardware + //#define DISPLAY_CHARSET_HD44780_WESTERN + //#define DISPLAY_CHARSET_HD44780_CYRILLIC //#define ULTRA_LCD //general LCD support, also 16x2 //#define DOGLCD // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family) diff --git a/Marlin/example_configurations/makibox/Configuration.h b/Marlin/example_configurations/makibox/Configuration.h index 3e8c07fe4..f423ce737 100644 --- a/Marlin/example_configurations/makibox/Configuration.h +++ b/Marlin/example_configurations/makibox/Configuration.h @@ -534,9 +534,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration.h b/Marlin/example_configurations/tvrrug/Round2/Configuration.h index 22e16e4ee..73a6ef958 100644 --- a/Marlin/example_configurations/tvrrug/Round2/Configuration.h +++ b/Marlin/example_configurations/tvrrug/Round2/Configuration.h @@ -541,9 +541,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Custom M code points #define CUSTOM_M_CODES #ifdef CUSTOM_M_CODES - #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 - #define Z_PROBE_OFFSET_RANGE_MIN -15 - #define Z_PROBE_OFFSET_RANGE_MAX -5 + #ifdef ENABLE_AUTO_BED_LEVELING + #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851 + #define Z_PROBE_OFFSET_RANGE_MIN -15 + #define Z_PROBE_OFFSET_RANGE_MAX -5 + #endif #endif diff --git a/Marlin/fonts/HD44780_C.fon b/Marlin/fonts/HD44780_C.fon new file mode 100644 index 000000000..bb9ca2a50 Binary files /dev/null and b/Marlin/fonts/HD44780_C.fon differ diff --git a/Marlin/fonts/HD44780_J.fon b/Marlin/fonts/HD44780_J.fon new file mode 100644 index 000000000..80527ef74 Binary files /dev/null and b/Marlin/fonts/HD44780_J.fon differ diff --git a/Marlin/fonts/HD44780_W.fon b/Marlin/fonts/HD44780_W.fon new file mode 100644 index 000000000..e478dbb08 Binary files /dev/null and b/Marlin/fonts/HD44780_W.fon differ diff --git a/Marlin/fonts/ISO10646-1-Marlin.fon b/Marlin/fonts/ISO10646-1-Marlin.fon deleted file mode 100644 index e9e4cfc2c..000000000 Binary files a/Marlin/fonts/ISO10646-1-Marlin.fon and /dev/null differ diff --git a/Marlin/fonts/ISO10646-5_Cyrillic.fon b/Marlin/fonts/ISO10646-5_Cyrillic.fon new file mode 100644 index 000000000..f52970cbc Binary files /dev/null and b/Marlin/fonts/ISO10646-5_Cyrillic.fon differ diff --git a/Marlin/fonts/ISO10646_Kana.fon b/Marlin/fonts/ISO10646_Kana.fon new file mode 100644 index 000000000..305ca983f Binary files /dev/null and b/Marlin/fonts/ISO10646_Kana.fon differ diff --git a/Marlin/fonts/README.fonts b/Marlin/fonts/README.fonts new file mode 100644 index 000000000..f227c079a --- /dev/null +++ b/Marlin/fonts/README.fonts @@ -0,0 +1,6 @@ +The fonts are created with Fony.exe (http://hukka.ncn.fi/?fony) because Fontforge didn't do what I want (probably lack off experience). +In Fony export the fonts to bdf-format. Maybe another one can edit them with Fontforge. +Then run make_fonts.bat what calls bdf2u8g.exe with the needed parameters to produce the .h files. +The .h files must be edited to replace '#include "u8g.h"' with '#include ', replace 'U8G_FONT_SECTION' with 'U8G_SECTION', insert '.progmem.' right behind the first '"' and moved to the main directory. + +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. diff --git a/Marlin/fonts/bdf2u8g.exe b/Marlin/fonts/bdf2u8g.exe new file mode 100644 index 000000000..1e51b2656 Binary files /dev/null and b/Marlin/fonts/bdf2u8g.exe differ diff --git a/Marlin/fonts/make_fonts.bat b/Marlin/fonts/make_fonts.bat index 4684ffa63..ca50def71 100644 --- a/Marlin/fonts/make_fonts.bat +++ b/Marlin/fonts/make_fonts.bat @@ -3,6 +3,5 @@ .\bdf2u8g.exe -b 32 -e 255 HD44780_C.bdf HD44780_C_5x7 dogm_font_data_HD44780_C.h .\bdf2u8g.exe -b 32 -e 255 HD44780_J.bdf HD44780_J_5x7 dogm_font_data_HD44780_J.h .\bdf2u8g.exe -b 32 -e 255 ISO10646-1.bdf ISO10646_1_5x7 dogm_font_data_ISO10646_1.h -.\bdf2u8g.exe -b 32 -e 255 ISO10646-1-Marlin.bdf ISO10646_1_Marlin_5x7 dogm_font_data_ISO10646_1_Marlin.h .\bdf2u8g.exe -b 32 -e 255 ISO10646_5_Cyrillic.bdf ISO10646_5_Cyrillic_5x7 dogm_font_data_ISO10646_5_Cyrillic.h .\bdf2u8g.exe -b 32 -e 255 ISO10646_Kana.bdf ISO10646_Kana_5x7 dogm_font_data_ISO10646_Kana.h diff --git a/Marlin/language.h b/Marlin/language.h index a7692bd80..89e45d8e6 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -11,22 +11,25 @@ // // ==> ALWAYS TRY TO COMPILE MARLIN WITH/WITHOUT "ULTIPANEL" / "ULTRALCD" / "SDSUPPORT" #define IN "Configuration.h" // ==> ALSO TRY ALL AVAILABLE LANGUAGE OPTIONS +// See also documentation/LCDLanguageFont.md // Languages -// en English -// pl Polish -// fr French -// de German -// es Spanish -// ru Russian -// it Italian -// pt Portuguese -// pt-br Portuguese (Brazil) -// fi Finnish -// an Aragonese -// nl Dutch -// ca Catalan -// eu Basque-Euskera +// en English +// pl Polish +// fr French +// de German +// es Spanish +// ru Russian +// it Italian +// pt Portuguese +// pt-br Portuguese (Brazil) +// fi Finnish +// an Aragonese +// nl Dutch +// ca Catalan +// eu Basque-Euskera +// kana Japanese +// kana_utf Japanese #ifndef LANGUAGE_INCLUDE // pick your language from the list above @@ -201,65 +204,9 @@ // LCD Menu Messages -// Add your own character. Reference: https://github.com/MarlinFirmware/Marlin/pull/1434 photos -// and https://www.sparkfun.com/datasheets/LCD/HD44780.pdf page 17-18 -#ifdef DOGLCD - #define STR_Ae "\304" // 'Ä' U8glib - #define STR_ae "\344" // 'ä' - #define STR_Oe "\326" // 'Ö' - #define STR_oe STR_Oe // 'ö' - #define STR_Ue "\334" // 'Ü' - #define STR_ue STR_Ue // 'ü' - #define STR_sz "\337" // 'ß' - #define STR_h2 "\262" // '²' - #define STR_h3 "\263" // '³' - #define STR_Deg "\260" // '°' - #define STR_THERMOMETER "\377" -#else - #ifdef DISPLAY_CHARSET_HD44780_JAPAN // HD44780 ROM Code: A00 (Japan) - #define STR_ae "\xe1" - #define STR_Ae STR_ae - #define STR_oe "\357" - #define STR_Oe STR_oe - #define STR_ue "\365" - #define STR_Ue STR_ue - #define STR_sz "\342" - #define STR_h2 "2" - #define STR_h3 "3" - #define STR_Deg "\271" - #define STR_THERMOMETER "\002" - #elif defined(DISPLAY_CHARSET_HD44780_WESTERN) // HD44780 ROM Code: A02 (Western) - #define STR_Ae "\216" - #define STR_ae "\204" - #define STR_Oe "\211" - #define STR_oe "\204" - #define STR_Ue "\212" - #define STR_ue "\201" - #define STR_sz "\160" - #define STR_h2 "\262" - #define STR_h3 "\263" - #define STR_Deg "\337" - #define STR_THERMOMETER "\002" - #endif +#if !(defined( DISPLAY_CHARSET_HD44780_JAPAN ) || defined( DISPLAY_CHARSET_HD44780_WESTERN ) || defined( DISPLAY_CHARSET_HD44780_CYRILLIC )) + #define DISPLAY_CHARSET_HD44780_JAPAN #endif -/* -#define TESTSTRING000 "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017" -#define TESTSTRING020 "\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define TESTSTRING040 "\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057" -#define TESTSTRING060 "\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077" -#define TESTSTRING100 "\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117" -#define TESTSTRING120 "\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137" -#define TESTSTRING140 "\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157" -#define TESTSTRING160 "\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177" -#define TESTSTRING200 "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217" -#define TESTSTRING220 "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237" -#define TESTSTRING240 "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257" -#define TESTSTRING260 "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277" -#define TESTSTRING300 "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317" -#define TESTSTRING320 "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337" -#define TESTSTRING340 "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357" -#define TESTSTRING360 "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377" -*/ #include LANGUAGE_INCLUDE #include "language_en.h" diff --git a/Marlin/language_an.h b/Marlin/language_an.h index e26c7d868..b8e83d3b3 100644 --- a/Marlin/language_an.h +++ b/Marlin/language_an.h @@ -2,12 +2,17 @@ * Aragonese * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_AN_H #define LANGUAGE_AN_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " parada." #define MSG_SD_INSERTED "Tarcheta colocada" #define MSG_SD_REMOVED "Tarcheta retirada" @@ -46,9 +51,9 @@ #define MSG_FAN_SPEED "Ixoriador" #define MSG_FLOW "Fluxo" #define MSG_CONTROL "Control" -#define MSG_MIN "\002 Min" -#define MSG_MAX "\002 Max" -#define MSG_FACTOR "\002 Fact" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" #define MSG_AUTOTEMP "Autotemp" #define MSG_ON "On" #define MSG_OFF "Off" diff --git a/Marlin/language_ca.h b/Marlin/language_ca.h index e7f837d5d..f25fe5789 100644 --- a/Marlin/language_ca.h +++ b/Marlin/language_ca.h @@ -2,12 +2,18 @@ * Catalan * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_CA_H #define LANGUAGE_CA_H +//#define MAPPER_NON +#define MAPPER_C2C3 // because of "ó" +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " preparada." #define MSG_SD_INSERTED "SD detectada." #define MSG_SD_REMOVED "SD expulsada." @@ -46,9 +52,9 @@ #define MSG_FAN_SPEED "Vel. Ventilador" #define MSG_FLOW "Fluxe" #define MSG_CONTROL "Control" -#define MSG_MIN " \002 Min" -#define MSG_MAX " \002 Max" -#define MSG_FACTOR " \002 Fact" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" #define MSG_AUTOTEMP "Autotemp" #define MSG_ON "On " #define MSG_OFF "Off" @@ -76,7 +82,7 @@ #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Moviment" #define MSG_VOLUMETRIC "Filament" -#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" #define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" #define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" #define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" diff --git a/Marlin/language_de.h b/Marlin/language_de.h index d41df208d..0f7b832a5 100644 --- a/Marlin/language_de.h +++ b/Marlin/language_de.h @@ -2,32 +2,37 @@ * German * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_DE_H #define LANGUAGE_DE_H +#define MAPPER_C2C3 +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " Bereit." #define MSG_SD_INSERTED "SDKarte erkannt." #define MSG_SD_REMOVED "SDKarte entfernt." -#define MSG_MAIN "Hauptmen" STR_ue +#define MSG_MAIN "Hauptmenü" #define MSG_AUTOSTART "Autostart" #define MSG_DISABLE_STEPPERS "Motoren Aus" // M84 #define MSG_AUTO_HOME "Home" // G28 #define MSG_SET_HOME_OFFSETS "Setze Home hier" #define MSG_SET_ORIGIN "Setze Null hier" //"G92 X0 Y0 Z0" commented out in ultralcd.cpp -#define MSG_PREHEAT_PLA "Vorw" STR_ae "rmen PLA" -#define MSG_PREHEAT_PLA_N "Vorw" STR_ae "rmen PLA " +#define MSG_PREHEAT_PLA "Vorwärmen PLA" +#define MSG_PREHEAT_PLA_N "Vorwärmen PLA " #define MSG_PREHEAT_PLA_ALL "Vorw. PLA Alle" #define MSG_PREHEAT_PLA_BEDONLY "Vorw. PLA Bett" -#define MSG_PREHEAT_PLA_SETTINGS "Vorw" STR_ae "rm. PLA Ein." -#define MSG_PREHEAT_ABS "Vorw" STR_ae "rmen ABS" -#define MSG_PREHEAT_ABS_N "Vorw" STR_ae "rmen ABS " +#define MSG_PREHEAT_PLA_SETTINGS "Vorwärm. PLA Ein." +#define MSG_PREHEAT_ABS "Vorwärmen ABS" +#define MSG_PREHEAT_ABS_N "Vorwärmen ABS " #define MSG_PREHEAT_ABS_ALL "Vorw. ABS Alle" #define MSG_PREHEAT_ABS_BEDONLY "Vorw. ABS Bett" -#define MSG_PREHEAT_ABS_SETTINGS "Vorw" STR_ae "rm. ABS Ein." -#define MSG_COOLDOWN "Abk" STR_ue "hlen" +#define MSG_PREHEAT_ABS_SETTINGS "Vorwärm. ABS Ein." +#define MSG_COOLDOWN "Abkühlen" #define MSG_SWITCH_PS_ON "Netzteil Ein" #define MSG_SWITCH_PS_OFF "Netzteil Aus" #define MSG_RETRACT "Retract" @@ -40,14 +45,14 @@ #define MSG_MOVE_1MM " 1.0 mm" #define MSG_MOVE_10MM "10.0 mm" #define MSG_SPEED "Geschw." -#define MSG_NOZZLE "D" STR_ue "se" +#define MSG_NOZZLE "Düse" #define MSG_BED "Bett" -#define MSG_FAN_SPEED "L" STR_ue "ftergeschw." +#define MSG_FAN_SPEED "Lüftergeschw." #define MSG_FLOW "Fluss" #define MSG_CONTROL "Einstellungen" -#define MSG_MIN STR_THERMOMETER " Min" -#define MSG_MAX STR_THERMOMETER " Max" -#define MSG_FACTOR STR_THERMOMETER " Faktor" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Faktor" #define MSG_AUTOTEMP "AutoTemp" #define MSG_ON "Ein" #define MSG_OFF "Aus" @@ -75,7 +80,7 @@ #define MSG_TEMPERATURE "Temperatur" #define MSG_MOTION "Bewegung" #define MSG_VOLUMETRIC "Filament" -#define MSG_VOLUMETRIC_ENABLED "E in mm" STR_h3 +#define MSG_VOLUMETRIC_ENABLED "E in mm³" #define MSG_FILAMENT_SIZE_EXTRUDER_0 "Filament D 1" #define MSG_FILAMENT_SIZE_EXTRUDER_1 "Filament D 2" #define MSG_FILAMENT_SIZE_EXTRUDER_2 "Filament D 3" diff --git a/Marlin/language_en.h b/Marlin/language_en.h index 0998d22ad..2e76ed4d8 100644 --- a/Marlin/language_en.h +++ b/Marlin/language_en.h @@ -2,12 +2,22 @@ * English * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_EN_H #define LANGUAGE_EN_H +#if !( defined(MAPPER_NON)|| defined(MAPPER_C2C3)|| defined(MAPPER_D0D1)|| defined(MAPPER_D0D1_MOD)|| defined(MAPPER_E382E383) ) + #define MAPPER_NON // For direct asci codes +#endif + +//#define SIMULATE_ROMFONT //Comment in to see what is seen on the character based displays +#if !( defined(SIMULATE_ROMFONT)|| defined(DISPLAY_CHARSET_ISO10646_1)|| defined(DISPLAY_CHARSET_ISO10646_5)|| defined(DISPLAY_CHARSET_ISO10646_KANA) ) + #define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays. +#endif + + #ifndef WELCOME_MSG #define WELCOME_MSG MACHINE_NAME " ready." #endif @@ -159,13 +169,13 @@ #define MSG_CONTROL "Control" #endif #ifndef MSG_MIN -#define MSG_MIN " " STR_THERMOMETER " Min" +#define MSG_MIN " "LCD_STR_THERMOMETER " Min" #endif #ifndef MSG_MAX -#define MSG_MAX " " STR_THERMOMETER " Max" +#define MSG_MAX " "LCD_STR_THERMOMETER " Max" #endif #ifndef MSG_FACTOR -#define MSG_FACTOR " " STR_THERMOMETER " Fact" +#define MSG_FACTOR " "LCD_STR_THERMOMETER " Fact" #endif #ifndef MSG_AUTOTEMP #define MSG_AUTOTEMP "Autotemp" @@ -261,7 +271,7 @@ #define MSG_VOLUMETRIC "Filament" #endif #ifndef MSG_VOLUMETRIC_ENABLED -#define MSG_VOLUMETRIC_ENABLED "E in mm" STR_h3 +#define MSG_VOLUMETRIC_ENABLED "E in mm3" #endif #ifndef MSG_FILAMENT_SIZE_EXTRUDER_0 #define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" diff --git a/Marlin/language_es.h b/Marlin/language_es.h index 2d7b785bd..143a1f457 100644 --- a/Marlin/language_es.h +++ b/Marlin/language_es.h @@ -2,12 +2,17 @@ * Spanish * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_ES_H #define LANGUAGE_ES_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " lista." #define MSG_SD_INSERTED "Tarjeta colocada" #define MSG_SD_REMOVED "Tarjeta retirada" @@ -46,9 +51,9 @@ #define MSG_FAN_SPEED "Ventilador" #define MSG_FLOW "Flujo" #define MSG_CONTROL "Control" -#define MSG_MIN "\002 Min" -#define MSG_MAX "\002 Max" -#define MSG_FACTOR "\002 Fact" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" #define MSG_AUTOTEMP "Autotemp" #define MSG_ON "On" #define MSG_OFF "Off" diff --git a/Marlin/language_eu.h b/Marlin/language_eu.h index 0f615d5a3..21cb733a1 100644 --- a/Marlin/language_eu.h +++ b/Marlin/language_eu.h @@ -2,12 +2,17 @@ * Basque-Euskera * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_EU_H #define LANGUAGE_EU_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " prest." #define MSG_SD_INSERTED "Txartela sartuta" #define MSG_SD_REMOVED "Txartela kenduta" @@ -46,9 +51,9 @@ #define MSG_FAN_SPEED "Haizagailua" #define MSG_FLOW "Fluxua" #define MSG_CONTROL "Kontrola" -#define MSG_MIN " \002 Min" -#define MSG_MAX " \002 Max" -#define MSG_FACTOR " \002 Faktorea" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Faktorea" #define MSG_AUTOTEMP "Auto tenperatura" #define MSG_ON "On " #define MSG_OFF "Off" diff --git a/Marlin/language_fi.h b/Marlin/language_fi.h index 62fdc7638..e1bfbf1af 100644 --- a/Marlin/language_fi.h +++ b/Marlin/language_fi.h @@ -2,12 +2,17 @@ * Finnish * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_FI_H #define LANGUAGE_FI_H +#define MAPPER_C2C3 +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " valmis." #define MSG_SD_INSERTED "Kortti asetettu" #define MSG_SD_REMOVED "Kortti poistettu" @@ -17,21 +22,21 @@ #define MSG_AUTO_HOME "Aja referenssiin" #define MSG_SET_HOME_OFFSETS "Set home offsets" #define MSG_SET_ORIGIN "Aseta origo" -#define MSG_PREHEAT_PLA "Esil" STR_ae "mmit" STR_ae " PLA" -#define MSG_PREHEAT_PLA_N "Esil" STR_ae "mmit" STR_ae " PLA " -#define MSG_PREHEAT_PLA_ALL "Esil" STR_ae ". PLA Kaikki" -#define MSG_PREHEAT_PLA_BEDONLY "Esil" STR_ae ". PLA Alusta" -#define MSG_PREHEAT_PLA_SETTINGS "Esil" STR_ae "mm. PLA konf" -#define MSG_PREHEAT_ABS "Esil" STR_ae "mmit" STR_ae " ABS" -#define MSG_PREHEAT_ABS_N "Esil" STR_ae "mmit" STR_ae " ABS " -#define MSG_PREHEAT_ABS_ALL "Esil" STR_ae ". ABS Kaikki" -#define MSG_PREHEAT_ABS_BEDONLY "Esil" STR_ae ". ABS Alusta" -#define MSG_PREHEAT_ABS_SETTINGS "Esil" STR_ae "mm. ABS konf" -#define MSG_COOLDOWN "J" STR_ae "" STR_ae "hdyt" STR_ae "" -#define MSG_SWITCH_PS_ON "Virta p" STR_ae "" STR_ae "lle" +#define MSG_PREHEAT_PLA "Esilämmitä PLA" +#define MSG_PREHEAT_PLA_N "Esilämmitä PLA " +#define MSG_PREHEAT_PLA_ALL "Esilä. PLA Kaikki" +#define MSG_PREHEAT_PLA_BEDONLY "Esilä. PLA Alusta" +#define MSG_PREHEAT_PLA_SETTINGS "Esilämm. PLA konf" +#define MSG_PREHEAT_ABS "Esilämmitä ABS" +#define MSG_PREHEAT_ABS_N "Esilämmitä ABS " +#define MSG_PREHEAT_ABS_ALL "Esilä. ABS Kaikki" +#define MSG_PREHEAT_ABS_BEDONLY "Esilä. ABS Alusta" +#define MSG_PREHEAT_ABS_SETTINGS "Esilämm. ABS konf" +#define MSG_COOLDOWN "Jäähdytä" +#define MSG_SWITCH_PS_ON "Virta päälle" #define MSG_SWITCH_PS_OFF "Virta pois" #define MSG_EXTRUDE "Pursota" -#define MSG_RETRACT "Ved" STR_ae " takaisin" +#define MSG_RETRACT "Vedä takaisin" #define MSG_MOVE_AXIS "Liikuta akseleita" #define MSG_MOVE_X "Liikuta X" #define MSG_MOVE_Y "Liikuta Y" @@ -46,9 +51,9 @@ #define MSG_FAN_SPEED "Tuul. nopeus" #define MSG_FLOW "Virtaus" #define MSG_CONTROL "Kontrolli" -#define MSG_MIN STR_THERMOMETER " Min" -#define MSG_MAX STR_THERMOMETER " Max" -#define MSG_FACTOR STR_THERMOMETER " Kerr" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Kerr" #define MSG_AUTOTEMP "Autotemp" #define MSG_ON "On " #define MSG_OFF "Off" @@ -73,10 +78,10 @@ #define MSG_YSTEPS "Ysteps/mm" #define MSG_ZSTEPS "Zsteps/mm" #define MSG_ESTEPS "Esteps/mm" -#define MSG_TEMPERATURE "L" STR_ae "mp" STR_oe "tila" +#define MSG_TEMPERATURE "Lämpötila" #define MSG_MOTION "Liike" #define MSG_VOLUMETRIC "Filament" -#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_VOLUMETRIC_ENABLED "E in mm³" #define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" #define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" #define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" @@ -84,13 +89,13 @@ #define MSG_STORE_EPROM "Tallenna muistiin" #define MSG_LOAD_EPROM "Lataa muistista" #define MSG_RESTORE_FAILSAFE "Palauta oletus" -#define MSG_REFRESH "P" STR_ae "ivit" STR_ae "" +#define MSG_REFRESH "Päivitä" #define MSG_WATCH "Seuraa" #define MSG_PREPARE "Valmistele" -#define MSG_TUNE "S" STR_ae "" STR_ae "d" STR_ae "" -#define MSG_PAUSE_PRINT "Keskeyt" STR_ae " tulostus" +#define MSG_TUNE "Säädä" +#define MSG_PAUSE_PRINT "Keskeytä tulostus" #define MSG_RESUME_PRINT "Jatka tulostusta" -#define MSG_STOP_PRINT "Pys" STR_ae "yt" STR_ae " tulostus" +#define MSG_STOP_PRINT "Pysäytä tulostus" #define MSG_CARD_MENU "Korttivalikko" #define MSG_NO_CARD "Ei korttia" #define MSG_DWELL "Nukkumassa..." @@ -100,9 +105,9 @@ #define MSG_NO_MOVE "Ei liiketta." #define MSG_KILLED "KILLED. " #define MSG_STOPPED "STOPPED. " -#define MSG_CONTROL_RETRACT "Ved" STR_ae " mm" -#define MSG_CONTROL_RETRACT_SWAP "Va. Ved" STR_ae " mm" -#define MSG_CONTROL_RETRACTF "Ved" STR_ae " V" +#define MSG_CONTROL_RETRACT "Vedä mm" +#define MSG_CONTROL_RETRACT_SWAP "Va. Vedä mm" +#define MSG_CONTROL_RETRACTF "Vedä V" #define MSG_CONTROL_RETRACT_ZLIFT "Z mm" #define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm" #define MSG_CONTROL_RETRACT_RECOVER_SWAP "Va. UnRet +mm" diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h index 8019f96a5..ed65efdbd 100644 --- a/Marlin/language_fr.h +++ b/Marlin/language_fr.h @@ -2,12 +2,18 @@ * French * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_FR_H #define LANGUAGE_FR_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + + #define WELCOME_MSG MACHINE_NAME " prete." #define MSG_SD_INSERTED "Carte inseree" #define MSG_SD_REMOVED "Carte retiree" @@ -46,9 +52,9 @@ #define MSG_FAN_SPEED "Vite. ventilateur" #define MSG_FLOW "Flux" #define MSG_CONTROL "Controler" -#define MSG_MIN " \002 Min" -#define MSG_MAX " \002 Max" -#define MSG_FACTOR " \002 Facteur" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Facteur" #define MSG_AUTOTEMP "Temp. Auto." #define MSG_ON "Marche " #define MSG_OFF "Arret" @@ -76,7 +82,7 @@ #define MSG_TEMPERATURE "Temperature" #define MSG_MOTION "Mouvement" #define MSG_VOLUMETRIC "Filament" -#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" #define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" #define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" #define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" diff --git a/Marlin/language_it.h b/Marlin/language_it.h index b0b644231..7fbcb46ac 100644 --- a/Marlin/language_it.h +++ b/Marlin/language_it.h @@ -2,12 +2,17 @@ * Italian * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_IT_H #define LANGUAGE_IT_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " pronto." #define MSG_SD_INSERTED "SD Card inserita" #define MSG_SD_REMOVED "SD Card rimossa" @@ -46,9 +51,9 @@ #define MSG_FAN_SPEED "Ventola" #define MSG_FLOW "Flusso" #define MSG_CONTROL "Controllo" -#define MSG_MIN " \002 Min" -#define MSG_MAX " \002 Max" -#define MSG_FACTOR " \002 Fact" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" #define MSG_AUTOTEMP "Autotemp" #define MSG_ON "ON " #define MSG_OFF "OFF" diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h new file mode 100644 index 000000000..272440bac --- /dev/null +++ b/Marlin/language_kana.h @@ -0,0 +1,147 @@ +/** + * Japanese (Kana) + * + * LCD Menu Messages + * See also documentation/LCDLanguageFont.md + * + */ + +#ifndef LANGUAGE_KANA_H +#define LANGUAGE_KANA_H + +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_KANA + +// 片仮名表示定義 +#define WELCOME_MSG MACHINE_NAME " ready." +#define MSG_SD_INSERTED "\xb6\xb0\xc4\xde\x20\xbf\xb3\xc6\xad\xb3\xbb\xda\xcf\xbc\xc0" // "Card inserted" +#define MSG_SD_REMOVED "\xb6\xb0\xc4\xde\xb6xde\xb1\xd8\xcf\xbe\xdd" // "Card removed" +#define MSG_MAIN "\xd2\xb2\xdd" // "Main" +#define MSG_AUTOSTART "\xbc\xde\xc4\xde\xb3\xb6\xb2\xbc" // "Autostart" +#define MSG_DISABLE_STEPPERS "\xd3\xb0\xc0\xb0\xc3\xde\xdd\xb9\xde\xdd\x20\xb5\xcc" // "Disable steppers" +#define MSG_AUTO_HOME "\xb9\xde\xdd\xc3\xdd\xc6\xb2\xc4\xde\xb3" // "Auto home" +#define MSG_SET_HOME_OFFSETS "\xb7\xbc\xde\xad\xdd\xb5\xcc\xbe\xaf\xc4\xbe\xaf\xc3\xb2" // "Set home offsets" +#define MSG_SET_ORIGIN "\xb7\xbc\xde\xad\xdd\xbe\xaf\xc4" // "Set origin" +#define MSG_PREHEAT_PLA "PLA \xd6\xc8\xc2" // "Preheat PLA" +#define MSG_PREHEAT_PLA_N MSG_PREHEAT_PLA " " +#define MSG_PREHEAT_PLA_ALL MSG_PREHEAT_PLA " \xbd\xcd\xde\xc3" // " All" +#define MSG_PREHEAT_PLA_BEDONLY MSG_PREHEAT_PLA " \xcd\xde\xaf\xc4\xde" // "Bed" +#define MSG_PREHEAT_PLA_SETTINGS MSG_PREHEAT_PLA " \xbe\xaf\xc3\xb2" // "conf" +#define MSG_PREHEAT_ABS "ABS \xd6\xc8\xc2" // "Preheat ABS" +#define MSG_PREHEAT_ABS_N MSG_PREHEAT_ABS " " +#define MSG_PREHEAT_ABS_ALL MSG_PREHEAT_ABS " \xbd\xcd\xde\xc3" // " All" +#define MSG_PREHEAT_ABS_BEDONLY MSG_PREHEAT_ABS " \xcd\xde\xaf\xc4\xde" // "Bed" +#define MSG_PREHEAT_ABS_SETTINGS MSG_PREHEAT_ABS " \xbe\xaf\xc3\xb2" // "conf" +#define MSG_COOLDOWN "\xb6\xc8\xc2\xc3\xb2\xbc" // "Cooldown" +#define MSG_SWITCH_PS_ON "\xc3\xde\xdd\xb9\xdd\xde\x20\xb5\xdd" // "Switch power on" +#define MSG_SWITCH_PS_OFF "\xc3\xde\xdd\xb9\xdd\xde\x20\xb5\xcc" // "Switch power off" +#define MSG_EXTRUDE "\xb5\xbc\xc0\xde\xbc" // "Extrude" +#define MSG_RETRACT "\xd8\xc4\xd7\xb8\xc4" // "Retract" +#define MSG_MOVE_AXIS "\xbc\xde\xb8\xb2\xc4\xde\xb3" // "Move axis" +#define MSG_MOVE_X "X\xbc\xde\xb8\x20\xb2\xc4\xde\xb3" // "Move X" +#define MSG_MOVE_Y "Y\xbc\xde\xb8\x20\xb2\xc4\xde\xb3" // "Move Y" +#define MSG_MOVE_Z "Z\xbc\xde\xb8\x20\xb2\xc4\xde\xb3" // "Move Z" +#define MSG_MOVE_E "\xb4\xb8\xbd\xc4\xd9\xb0\xc0\xde\xb0" // "Extruder" +#define MSG_MOVE_01MM "0.1mm \xb2\xc4\xde\xb3" // "Move 0.1mm" +#define MSG_MOVE_1MM " 1mm \xb2\xc4\xde\xb3" // "Move 1mm" +#define MSG_MOVE_10MM " 10mm \xb2\xc4\xde\xb3" // "Move 10mm" +#define MSG_SPEED "\xbd\xcb\xdf\xb0\xc4\xde" // "Speed" +#define MSG_NOZZLE "\xc9\xbd\xde\xd9" // "Nozzle" +#define MSG_BED "\xcd\xde\xaf\xc4\xde" // "Bed" +#define MSG_FAN_SPEED "\xcc\xa7\xdd\xbf\xb8\xc4\xde" // "Fan speed" +#define MSG_FLOW "\xb5\xb8\xd8\xd8\xae\xb3" // "Flow" +#define MSG_CONTROL "\xba\xdd\xc4\xdb\xb0\xd9" // "Control" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" +#define MSG_AUTOTEMP "\xbc\xde\xc4\xde\xb3\xb5\xdd\xc4\xde" // "Autotemp" +#define MSG_ON "On " +#define MSG_OFF "Off" +#define MSG_PID_P "PID-P" +#define MSG_PID_I "PID-I" +#define MSG_PID_D "PID-D" +#define MSG_PID_C "PID-C" +#define MSG_ACC "\xb6\xbf\xb8\xc4\xde" // "Accel" +#define MSG_VXY_JERK "Vxy-jerk" +#define MSG_VZ_JERK "Vz-jerk" +#define MSG_VE_JERK "Ve-jerk" +#define MSG_VMAX "Vmax " +#define MSG_X "x" +#define MSG_Y "y" +#define MSG_Z "z" +#define MSG_E "e" +#define MSG_VMIN "Vmin" +#define MSG_VTRAV_MIN "VTrav min" +#define MSG_AMAX "Amax " +#define MSG_A_RETRACT "A-retract" +#define MSG_XSTEPS "Xsteps/mm" +#define MSG_YSTEPS "Ysteps/mm" +#define MSG_ZSTEPS "Zsteps/mm" +#define MSG_ESTEPS "Esteps/mm" +#define MSG_TEMPERATURE "\xb5\xdd\xc4\xde" // "Temperature" +#define MSG_MOTION "\xb3\xba\xde\xb7\xbe\xaf\xc3\xb2" // "Motion" +#define MSG_VOLUMETRIC "\xcc\xa8\xd7\xd2\xdd\xc4" // "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" +#define MSG_FILAMENT_SIZE_EXTRUDER_3 "Fil. Dia. 4" +#define MSG_CONTRAST "LCD\xba\xdd\xc4\xd7\xbd\xc4" // "LCD contrast" +#define MSG_STORE_EPROM "\xd2\xd3\xd8\xcd\xb6\xb8\xc9\xb3" // "Store memory" +#define MSG_LOAD_EPROM "\xd2\xd3\xd8\xb6\xd7\xd6\xd0\ba\xd0" // "Load memory" +#define MSG_RESTORE_FAILSAFE "\xbe\xaf\xc3\xb2\xd8\xbe\xaf\xc4" // "Restore failsafe" +#define MSG_REFRESH "\xd8\xcc\xda\xaf\xbc\xad" // "Refresh" +#define MSG_WATCH "\xb2\xdd\xcc\xab" // "Info screen" +#define MSG_PREPARE "\xbc\xde\xad\xdd\xcb\xde\xbe\xaf\xc3\xb2" // "Prepare" +#define MSG_TUNE "\xc1\xae\xb3\xbe\xb2" // "Tune" +#define MSG_PAUSE_PRINT "\xb2\xc1\xbc\xde\xc3\xb2\xbc" // "Pause print" +#define MSG_RESUME_PRINT "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2" // "Resume print" +#define MSG_STOP_PRINT "\xcc\xdf\xd8\xdd\xc4\xc3\xb2\xbc" // "Stop print" +#define MSG_CARD_MENU "SD\xb6\xb0\xc4\xde\xb6\xd7\xcc\xdf\xd8\xdd\xc4" // "Print from SD" +#define MSG_NO_CARD "SD\xb6\xb0\xc4\xde\xb6\xde\xb1\xd8\xcf\xbe\xdd" // "No SD card" +#define MSG_DWELL "\xbd\xd8\xb0\xcc\xdf" // "Sleep..." +#define MSG_USERWAIT "\xbc\xca\xde\xd7\xb9\xb5\xcf\xc1\xb8\xc0\xde\xbb\xb2" // "Wait for user..." +#define MSG_RESUMING "\xcc\xdf\xd8\xdd\xc4\xbb\xb2\xb6\xb2" // "Resuming print" +#define MSG_PRINT_ABORTED "\xcc\xdf\xd8\xdd\xc4\xc1\xad\xb3\xbc\xbb\xda\xcf\xbc\xc0" // "Print aborted" +#define MSG_NO_MOVE "\xb3\xba\xde\xb7\xcf\xbe\xdd" // "No move." +#define MSG_KILLED "\xbc\xae\xb3\xb7\xae" // "KILLED. " +#define MSG_STOPPED "\xc3\xb2\xbc\xbc\xcf\xbc\xc0" // "STOPPED. " +#define MSG_CONTROL_RETRACT "Retract mm" +#define MSG_CONTROL_RETRACT_SWAP "Swap Re.mm" +#define MSG_CONTROL_RETRACTF "Retract V" +#define MSG_CONTROL_RETRACT_ZLIFT "Hop mm" +#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm" +#define MSG_CONTROL_RETRACT_RECOVER_SWAP "S UnRet+mm" +#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V" +#define MSG_AUTORETRACT "AutoRetr." +#define MSG_FILAMENTCHANGE "\xcc\xa8\xd7\xd2\xdd\xc4\xba\xb3\xb6\xdd" // "Change filament" +#define MSG_INIT_SDCARD "SD\xb6\xb0\xc4\xde\xbb\xb2\xd6\xd0\xba\xd0" // "Init. SD card" +#define MSG_CNG_SDCARD "SD\xb6\xb0\xc4\xde\xba\xb3\xb6\xdd" // "Change SD card" +#define MSG_ZPROBE_OUT "Z\xcc\xdf\xdb\xb0\xcc\xde \xcd\xde\xaf\xc4\xee\xb6\xde\xb2" // "Z probe out. bed" +#define MSG_POSITION_UNKNOWN "\xb9\xde\xdd\xc3\xdd\xcaXY\xb2\xc4\xde\xb3\xba\xdeZ" // "Home X/Y before Z" +#define MSG_ZPROBE_ZOFFSET "Z\xb5\xcc\xbe\xaf\xc4" // "Z Offset" +#define MSG_BABYSTEP_X "\xcb\xde\xc4\xde\xb3 X" // "Babystep X" +#define MSG_BABYSTEP_Y "\xcb\xde\xc4\xde\xb3 Y" // "Babystep Y" +#define MSG_BABYSTEP_Z "\xcb\xde\xc4\xde\xb3 Z" // "Babystep Z" +#define MSG_ENDSTOP_ABORT "Endstop abort" + +/* These are from language.h. PLEASE DON'T TRANSLATE! All translatable messages can be found in language_en.h +#define MSG_HEATING "\xb6\xc8\xc2\xc1\xad\xb3..." // "Heating..." +#define MSG_HEATING_COMPLETE "\xb6\xc8\xc2\xb6\xdd\xd8x\xae\xb3" // "Heating done." +#define MSG_BED_HEATING "\xcd\xde\xaf\xc4\xde\xb6\xc8\xc2\xc1\xad\xb3" // "Bed Heating." +#define MSG_BED_DONE "\xcd\xde\xaf\xc4\xde\xb6\xc8\xc2\xb6\xdd\xd8x\xae\xb3" // "Bed done." +#define MSG_ENDSTOPS_HIT "endstops hit: " + ^ typho +*/ + +#ifdef DELTA_CALIBRATION_MENU + #define MSG_DELTA_CALIBRATE "Delta Calibration" + #define MSG_DELTA_CALIBRATE_X "Calibrate X" + #define MSG_DELTA_CALIBRATE_Y "Calibrate Y" + #define MSG_DELTA_CALIBRATE_Z "Calibrate Z" + #define MSG_DELTA_CALIBRATE_CENTER "Calibrate Center" +#endif // DELTA_CALIBRATION_MENU + +#endif // LANGUAGE_KANA_H diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h new file mode 100644 index 000000000..94ce69bc4 --- /dev/null +++ b/Marlin/language_kana_utf8.h @@ -0,0 +1,142 @@ +/** + * Japanese (Kana UTF8 version) + * + * LCD Menu Messages + * See also documentation/LCDLanguageFont.md + * + */ + +#ifndef LANGUAGE_KANA_UTF_H +#define LANGUAGE_KANA_UTF_H + +#define MAPPER_E382E383 +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_KANA + +// This is very crude replacement of the codes used in language_kana.h from somebody who really does not know what he is doing. +// Just to show the potential benefit of unicode. +// This translation can be improved by using the full charset of unicode codeblock U+30A0 to U+30FF. + +// 片仮名表示定義 +#define WELCOME_MSG MACHINE_NAME " ready." +#define MSG_SD_INSERTED "セード ンウニユウアレマシタ" // "Card inserted" +#define MSG_SD_REMOVED "セードゼアリマセン" // "Card removed" +#define MSG_MAIN "ナイン" // "Main" +#define MSG_AUTOSTART "ヅドウセイシ" // "Autostart" +#define MSG_DISABLE_STEPPERS "モーターデンゲン オフ" // "Disable steppers" +#define MSG_AUTO_HOME "ゲンテンニイドウ" // "Auto home" +#define MSG_SET_HOME_OFFSETS "キヅユンオフセツトセツテイ" // "Set home offsets" +#define MSG_SET_ORIGIN "キヅユンセツト" // "Set origin" +#define MSG_PREHEAT_PLA "PLA ヨネシ" // "Preheat PLA" +#define MSG_PREHEAT_PLA_N MSG_PREHEAT_PLA " " +#define MSG_PREHEAT_PLA_ALL MSG_PREHEAT_PLA " スベテ" // " All" +#define MSG_PREHEAT_PLA_BEDONLY MSG_PREHEAT_PLA " ベツド" // "Bed" +#define MSG_PREHEAT_PLA_SETTINGS MSG_PREHEAT_PLA " セツテイ" // "conf" +#define MSG_PREHEAT_ABS "ABS ヨネシ" // "Preheat ABS" +#define MSG_PREHEAT_ABS_N MSG_PREHEAT_ABS " " +#define MSG_PREHEAT_ABS_ALL MSG_PREHEAT_ABS " スベテ" // " All" +#define MSG_PREHEAT_ABS_BEDONLY MSG_PREHEAT_ABS " ベツド" // "Bed" +#define MSG_PREHEAT_ABS_SETTINGS MSG_PREHEAT_ABS " セツテイ" // "conf" +#define MSG_COOLDOWN "セネシテイシ" // "Cooldown" +#define MSG_SWITCH_PS_ON "デンケゾ オン" // "Switch power on" +#define MSG_SWITCH_PS_OFF "デンケゾ オフ" // "Switch power off" +#define MSG_EXTRUDE "オシダシ" // "Extrude" +#define MSG_RETRACT "リトラケト" // "Retract" +#define MSG_MOVE_AXIS "ヅケイドウ" // "Move axis" +#define MSG_MOVE_X "Xヅケ イドウ" // "Move X" +#define MSG_MOVE_Y "Yヅケ イドウ" // "Move Y" +#define MSG_MOVE_Z "Zヅケ イドウ" // "Move Z" +#define MSG_MOVE_E "エケストルーダー" // "Extruder" +#define MSG_MOVE_01MM "0.1mm イドウ" // "Move 0.1mm" +#define MSG_MOVE_1MM " 1mm イドウ" // "Move 1mm" +#define MSG_MOVE_10MM " 10mm イドウ" // "Move 10mm" +#define MSG_SPEED "スヒ゜ード" // "Speed" +#define MSG_NOZZLE "ノズル" // "Nozzle" +#define MSG_BED "ベツド" // "Bed" +#define MSG_FAN_SPEED "ファンンケド" // "Fan speed" +#define MSG_FLOW "オケリリョウ" // "Flow" +#define MSG_CONTROL "コントロール" // "Control" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" +#define MSG_AUTOTEMP "ヅドウオンド" // "Autotemp" +#define MSG_ON "On " +#define MSG_OFF "Off" +#define MSG_PID_P "PID-P" +#define MSG_PID_I "PID-I" +#define MSG_PID_D "PID-D" +#define MSG_PID_C "PID-C" +#define MSG_ACC "センケド" // "Accel" +#define MSG_VXY_JERK "Vxy-jerk" +#define MSG_VZ_JERK "Vz-jerk" +#define MSG_VE_JERK "Ve-jerk" +#define MSG_VMAX "Vmax " +#define MSG_X "x" +#define MSG_Y "y" +#define MSG_Z "z" +#define MSG_E "e" +#define MSG_VMIN "Vmin" +#define MSG_VTRAV_MIN "VTrav min" +#define MSG_AMAX "Amax " +#define MSG_A_RETRACT "A-retract" +#define MSG_XSTEPS "Xsteps/mm" +#define MSG_YSTEPS "Ysteps/mm" +#define MSG_ZSTEPS "Zsteps/mm" +#define MSG_ESTEPS "Esteps/mm" +#define MSG_TEMPERATURE "オンド" // "Temperature" +#define MSG_MOTION "ウゴキセツテイ" // "Motion" +#define MSG_VOLUMETRIC "フィラナント" // "Filament" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" +#define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" +#define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" +#define MSG_FILAMENT_SIZE_EXTRUDER_3 "Fil. Dia. 4" +#define MSG_CONTRAST "LCDコントラスト" // "LCD contrast" +#define MSG_STORE_EPROM "ナモリヘセケノウ" // "Store memory" +#define MSG_LOAD_EPROM "ナモリセラヨミbaミ" // "Load memory" +#define MSG_RESTORE_FAILSAFE "セツテイリセツト" // "Restore failsafe" +#define MSG_REFRESH "リフレツシユ" // "Refresh" +#define MSG_WATCH "インフォ" // "Info screen" +#define MSG_PREPARE "ヅユンゼセツテイ" //"Prepare" +#define MSG_TUNE "チョウセイ" // "Tune" +#define MSG_PAUSE_PRINT "イチヅテイシ" // "Pause print" +#define MSG_RESUME_PRINT "プリントアイセイ" // "Resume print" +#define MSG_STOP_PRINT "プリントテイシ" // "Stop print" +#define MSG_CARD_MENU "SDセードセラプリント" // "Print from SD" +#define MSG_NO_CARD "SDセードゼアリマセン" // "No SD card" +#define MSG_DWELL "スリープ" // "Sleep..." +#define MSG_USERWAIT "シバラケオマチケダアイ" // "Wait for user..." +#define MSG_RESUMING "プリントアイセイ" // "Resuming print" +#define MSG_PRINT_ABORTED "プリントチユウシアレマシタ" // "Print aborted" +#define MSG_NO_MOVE "ウゴキマセン" // "No move." +#define MSG_KILLED "ショウキョ" // "KILLED. " +#define MSG_STOPPED "テイシシマシタ" // "STOPPED. " +#define MSG_CONTROL_RETRACT "Retract mm" +#define MSG_CONTROL_RETRACT_SWAP "Swap Re.mm" +#define MSG_CONTROL_RETRACTF "Retract V" +#define MSG_CONTROL_RETRACT_ZLIFT "Hop mm" +#define MSG_CONTROL_RETRACT_RECOVER "UnRet +mm" +#define MSG_CONTROL_RETRACT_RECOVER_SWAP "S UnRet+mm" +#define MSG_CONTROL_RETRACT_RECOVERF "UnRet V" +#define MSG_AUTORETRACT "AutoRetr." +#define MSG_FILAMENTCHANGE "フィラナントコウセン" // "Change filament" +#define MSG_INIT_SDCARD "SDセードアイヨミコミ" // "Init. SD card" +#define MSG_CNG_SDCARD "SDセードコウセン" // "Change SD card" +#define MSG_ZPROBE_OUT "Zプローブ ベツトnゼイ" // "Z probe out. bed" +#define MSG_POSITION_UNKNOWN "ゲンテンハXYイドウゴZ" // "Home X/Y before Z" +#define MSG_ZPROBE_ZOFFSET "Zオフセツト" // "Z Offset" +#define MSG_BABYSTEP_X "ゼドウ X" // "Babystep X" +#define MSG_BABYSTEP_Y "ゼドウ Y" // "Babystep Y" +#define MSG_BABYSTEP_Z "ゼドウ Z" // "Babystep Z" +#define MSG_ENDSTOP_ABORT "Endstop abort" + +#ifdef DELTA_CALIBRATION_MENU + #define MSG_DELTA_CALIBRATE "Delta Calibration" + #define MSG_DELTA_CALIBRATE_X "Calibrate X" + #define MSG_DELTA_CALIBRATE_Y "Calibrate Y" + #define MSG_DELTA_CALIBRATE_Z "Calibrate Z" + #define MSG_DELTA_CALIBRATE_CENTER "Calibrate Center" +#endif // DELTA_CALIBRATION_MENU + +#endif // LANGUAGE_KANA_UTF_H diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h index 7de2f9a8e..bc44dcc7e 100644 --- a/Marlin/language_nl.h +++ b/Marlin/language_nl.h @@ -2,12 +2,17 @@ * Dutch * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_NL_H #define LANGUAGE_NL_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " gereed." #define MSG_SD_INSERTED "Kaart ingestoken" #define MSG_SD_REMOVED "Kaart verwijderd" @@ -46,9 +51,9 @@ #define MSG_FAN_SPEED "Fan snelheid" #define MSG_FLOW "Flow" #define MSG_CONTROL "Control" -#define MSG_MIN " \002 Min" -#define MSG_MAX " \002 Max" -#define MSG_FACTOR " \002 Fact" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" #define MSG_AUTOTEMP "Autotemp" #define MSG_ON "Aan " #define MSG_OFF "Uit" diff --git a/Marlin/language_pl.h b/Marlin/language_pl.h index 93ccf4046..f654594bc 100644 --- a/Marlin/language_pl.h +++ b/Marlin/language_pl.h @@ -2,12 +2,17 @@ * Polish * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_PL_H #define LANGUAGE_PL_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " gotowy." #define MSG_SD_INSERTED "Karta wlozona" #define MSG_SD_REMOVED "Karta usunieta" @@ -46,9 +51,9 @@ #define MSG_FAN_SPEED "Obroty wiatraka" #define MSG_FLOW "Przeplyw" #define MSG_CONTROL "Ustawienia" -#define MSG_MIN " \002 Min" -#define MSG_MAX " \002 Max" -#define MSG_FACTOR " \002 Mnoznik" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Mnoznik" #define MSG_AUTOTEMP "Auto. temperatura" #define MSG_ON "Wl. " #define MSG_OFF "Wyl." @@ -84,7 +89,7 @@ #define MSG_STORE_EPROM "Zapisz w pamieci" #define MSG_LOAD_EPROM "Wczytaj z pamieci" #define MSG_RESTORE_FAILSAFE "Ustaw. fabryczne" -#define MSG_REFRESH "\004Odswiez" +#define MSG_REFRESH LCD_STR_REFRESH " Odswiez" #define MSG_WATCH "Ekran glowny" #define MSG_PREPARE "Przygotuj" #define MSG_TUNE "Strojenie" diff --git a/Marlin/language_pt-br.h b/Marlin/language_pt-br.h index 924b6e4db..060f3ba89 100644 --- a/Marlin/language_pt-br.h +++ b/Marlin/language_pt-br.h @@ -2,16 +2,21 @@ * Portuguese (Brazil) * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_PT_BR_H #define LANGUAGE_PT_BR_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " pronto." #define MSG_SD_INSERTED "Cartao inserido" #define MSG_SD_REMOVED "Cartao removido" -#define MSG_MAIN " Menu principal \003" +#define MSG_MAIN " Menu principal" #define MSG_AUTOSTART "Autostart" #define MSG_DISABLE_STEPPERS " Apagar motores" #define MSG_AUTO_HOME "Ir para origen" @@ -20,19 +25,19 @@ #define MSG_PREHEAT_PLA "Pre-aquecer PLA" #define MSG_PREHEAT_PLA_N "Pre-aquecer PLA " #define MSG_PREHEAT_PLA_ALL "Pre-aq. PLA Tudo" -#define MSG_PREHEAT_PLA_BEDONLY "Pre-aq. PLA \002Base" +#define MSG_PREHEAT_PLA_BEDONLY "Pre-aq. PLA " LCD_STR_THERMOMETER "Base" #define MSG_PREHEAT_PLA_SETTINGS "PLA setting" #define MSG_PREHEAT_ABS "Pre-aquecer ABS" #define MSG_PREHEAT_ABS_N "Pre-aquecer ABS " #define MSG_PREHEAT_ABS_ALL "Pre-aq. ABS Tudo" -#define MSG_PREHEAT_ABS_BEDONLY "Pre-aq. ABS \002Base" +#define MSG_PREHEAT_ABS_BEDONLY "Pre-aq. ABS " LCD_STR_THERMOMETER "Base" #define MSG_PREHEAT_ABS_SETTINGS "ABS setting" #define MSG_COOLDOWN "Esfriar" #define MSG_SWITCH_PS_ON "Switch Power On" #define MSG_SWITCH_PS_OFF "Switch Power Off" #define MSG_EXTRUDE "Extrudar" #define MSG_RETRACT "Retrair" -#define MSG_MOVE_AXIS "Mover eixo \x7E" +#define MSG_MOVE_AXIS "Mover eixo" #define MSG_MOVE_X "Move X" #define MSG_MOVE_Y "Move Y" #define MSG_MOVE_Z "Move Z" @@ -41,14 +46,14 @@ #define MSG_MOVE_1MM "Move 1mm" #define MSG_MOVE_10MM "Move 10mm" #define MSG_SPEED "Velocidade" -#define MSG_NOZZLE "\002Nozzle" -#define MSG_BED "\002Base" +#define MSG_NOZZLE LCD_STR_THERMOMETER " Nozzle" +#define MSG_BED LCD_STR_THERMOMETER " Base" #define MSG_FAN_SPEED "Velocidade vento." #define MSG_FLOW "Fluxo" -#define MSG_CONTROL "Controle \003" -#define MSG_MIN "\002 Min" -#define MSG_MAX "\002 Max" -#define MSG_FACTOR "\002 Fact" +#define MSG_CONTROL "Controle" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" #define MSG_AUTOTEMP "Autotemp" #define MSG_ON "On " #define MSG_OFF "Off" @@ -76,7 +81,7 @@ #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Movimento" #define MSG_VOLUMETRIC "Filament" -#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" #define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Dia. 1" #define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Dia. 2" #define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Dia. 3" @@ -84,10 +89,10 @@ #define MSG_STORE_EPROM "Guardar memoria" #define MSG_LOAD_EPROM "Carregar memoria" #define MSG_RESTORE_FAILSAFE "Rest. de emergen." -#define MSG_REFRESH "\004Recarregar" -#define MSG_WATCH "Monitorar \003" -#define MSG_PREPARE "Preparar \x7E" -#define MSG_TUNE "Tune \x7E" +#define MSG_REFRESH LCD_STR_REFRESH " Recarregar" +#define MSG_WATCH "Monitorar" +#define MSG_PREPARE "Preparar" +#define MSG_TUNE "Tune" #define MSG_PAUSE_PRINT "Pausar impressao" #define MSG_RESUME_PRINT "Resumir impressao" #define MSG_STOP_PRINT "Parar impressao" diff --git a/Marlin/language_pt.h b/Marlin/language_pt.h index 90c4b5c6c..9d3ff2654 100644 --- a/Marlin/language_pt.h +++ b/Marlin/language_pt.h @@ -2,16 +2,21 @@ * Portuguese * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_PT_H #define LANGUAGE_PT_H +#define MAPPER_NON +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_1 + #define WELCOME_MSG MACHINE_NAME " pronto." #define MSG_SD_INSERTED "Cartao inserido" #define MSG_SD_REMOVED "Cartao removido" -#define MSG_MAIN " Menu principal \003" +#define MSG_MAIN " Menu principal" #define MSG_AUTOSTART "Autostart" #define MSG_DISABLE_STEPPERS " Desligar motores" #define MSG_AUTO_HOME "Ir para home" @@ -20,19 +25,19 @@ #define MSG_PREHEAT_PLA "Pre-aquecer PLA" #define MSG_PREHEAT_PLA_N "Pre-aquecer PLA " #define MSG_PREHEAT_PLA_ALL "Pre-aq. PLA Tudo" -#define MSG_PREHEAT_PLA_BEDONLY "Pre-aq. PLA \002Base" +#define MSG_PREHEAT_PLA_BEDONLY "Pre-aq. PLA " LCD_STR_THERMOMETER "Base" #define MSG_PREHEAT_PLA_SETTINGS "PLA definicoes" #define MSG_PREHEAT_ABS "Pre-aquecer ABS" #define MSG_PREHEAT_ABS_N "Pre-aquecer ABS " #define MSG_PREHEAT_ABS_ALL "Pre-aq. ABS Tudo" -#define MSG_PREHEAT_ABS_BEDONLY "Pre-aq. ABS \002Base" +#define MSG_PREHEAT_ABS_BEDONLY "Pre-aq. ABS " LCD_STR_THERMOMETER "Base" #define MSG_PREHEAT_ABS_SETTINGS "ABS definicoes" #define MSG_COOLDOWN "Arrefecer" #define MSG_SWITCH_PS_ON "Ligar" #define MSG_SWITCH_PS_OFF "Desligar" #define MSG_EXTRUDE "Extrudir" #define MSG_RETRACT "Retrair" -#define MSG_MOVE_AXIS "Mover eixo \x7E" +#define MSG_MOVE_AXIS "Mover eixo" #define MSG_MOVE_X "Mover X" #define MSG_MOVE_Y "Mover Y" #define MSG_MOVE_Z "Mover Z" @@ -41,14 +46,14 @@ #define MSG_MOVE_1MM "Mover 1mm" #define MSG_MOVE_10MM "Mover 10mm" #define MSG_SPEED "Velocidade" -#define MSG_NOZZLE "\002Bico" -#define MSG_BED "\002Base" +#define MSG_NOZZLE LCD_STR_THERMOMETER "Bico" +#define MSG_BED LCD_STR_THERMOMETER "Base" #define MSG_FAN_SPEED "Velocidade do ar." #define MSG_FLOW "Fluxo" -#define MSG_CONTROL "Controlo \003" -#define MSG_MIN "\002 Min" -#define MSG_MAX "\002 Max" -#define MSG_FACTOR "\002 Fact" +#define MSG_CONTROL "Controlo" +#define MSG_MIN LCD_STR_THERMOMETER " Min" +#define MSG_MAX LCD_STR_THERMOMETER " Max" +#define MSG_FACTOR LCD_STR_THERMOMETER " Fact" #define MSG_AUTOTEMP "Autotemp" #define MSG_ON "On " #define MSG_OFF "Off" @@ -76,7 +81,7 @@ #define MSG_TEMPERATURE "Temperatura" #define MSG_MOTION "Movimento" #define MSG_VOLUMETRIC "Filamento" -#define MSG_VOLUMETRIC_ENABLED "E in mm3" +#define MSG_VOLUMETRIC_ENABLED "E in mm3" #define MSG_FILAMENT_SIZE_EXTRUDER_0 "Fil. Diam. 1" #define MSG_FILAMENT_SIZE_EXTRUDER_1 "Fil. Diam. 2" #define MSG_FILAMENT_SIZE_EXTRUDER_2 "Fil. Diam. 3" @@ -84,10 +89,10 @@ #define MSG_STORE_EPROM "Guardar na memoria" #define MSG_LOAD_EPROM "Carregar da memoria" #define MSG_RESTORE_FAILSAFE "Rest. de emergen." -#define MSG_REFRESH "\004Recarregar" -#define MSG_WATCH "Monitorar \003" -#define MSG_PREPARE "Preparar \x7E" -#define MSG_TUNE "Afinar \x7E" +#define MSG_REFRESH LCD_STR_REFRESH " Recarregar" +#define MSG_WATCH "Monitorar" +#define MSG_PREPARE "Preparar" +#define MSG_TUNE "Afinar" #define MSG_PAUSE_PRINT "Pausar impressao" #define MSG_RESUME_PRINT "Resumir impressao" #define MSG_STOP_PRINT "Parar impressao" diff --git a/Marlin/language_ru.h b/Marlin/language_ru.h index bcab50b79..b961be7ee 100644 --- a/Marlin/language_ru.h +++ b/Marlin/language_ru.h @@ -2,13 +2,16 @@ * Russian * * LCD Menu Messages - * Please note these are limited to 17 characters! + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_RU_H #define LANGUAGE_RU_H -#define LANGUAGE_RU +#define MAPPER_D0D1 // For Cyrillic +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT +#define DISPLAY_CHARSET_ISO10646_5 #define WELCOME_MSG MACHINE_NAME " Готов." #define MSG_SD_INSERTED "Карта вставлена" diff --git a/Marlin/language_test.h b/Marlin/language_test.h new file mode 100644 index 000000000..57505bc13 --- /dev/null +++ b/Marlin/language_test.h @@ -0,0 +1,215 @@ +/** + * TEST + * + * LCD Menu Messages + * See also documentation/LCDLanguageFont.md + * + */ +#ifndef LANGUAGE_TEST_H +#define LANGUAGE_TEST_H + +// Select ONE of the following Mappers. +// 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 +// into an array with 128 cells, where they'll find the place of the symbol of the font in use. +// +// a.)For ASCII coded Language_xx.h files like (en) there are no occurrences of symbols above 0x7F so no mapper is needed. +// 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 +// "\xxx" symbols. All Symbols are only one byte long. +// 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. +// 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. +// 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 +// and D1. +// 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. +// I hope the pages E282 and E283 are sufficient to write katakana. +// 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 +// 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). + + +#define MAPPER_NON // For direct asci codes ( until now all languages except ru, de, fi, kana_utf8, ... ) +//#define MAPPER_C2C3 // For most European languages when language file is in utf8 +//#define MAPPER_D0D1 // For Cyrillic +//#define MAPPER_E382E383 // For Katakana + +// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h +//#define SIMULATE_ROMFONT + +// Select the better font for full graphic displays. +//#define DISPLAY_CHARSET_ISO10646_1 +//#define DISPLAY_CHARSET_ISO10646_5 +//#define DISPLAY_CHARSET_ISO10646_KANA + + + +// next 5 lines select variants in this file only +#define DISPLAYTEST +//#define WEST +//#define CYRIL +//#define KANA + + +// TESTSTRINGS + +#define STRG_ASCII_2 " !\"#$%&'()*+,-./" +#define STRG_ASCII_3 "0123456789:;<=>?" +#define STRG_ASCII_4 "@ABCDEFGHIJKLMNO" +#define STRG_ASCII_5 "PQRSTUVWXYZ[\]^_" +#define STRG_ASCII_6 "`abcdefghijklmno" +#define STRG_ASCII_7 "pqrstuvwxyz{|}~" + +#define STRG_C2_8 "" +#define STRG_C2_9 "" +#define STRG_C2_a " ¡¢£¤¥¦§¨©ª«¬­®¯" +#define STRG_C2_b "°±²³´µ¶·¸¹º»¼½¾¿" +#define STRG_C3_8 "ÈÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ" +#define STRG_C3_9 "ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß" +#define STRG_C3_a "àáâãäåæçèéêëìíîï" +#define STRG_C3_b "ðñòóôõö÷øùúûüýþÿ" + +#define STRG_D0_8 "ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ" +#define STRG_D0_9 "АБВГДЕЖЗИЙКЛМНОП" +#define STRG_D0_a "РСТУФХЦЧШЩЪЫЬЭЮЯ" +#define STRG_D0_b "абвгдежзийклмноп" +#define STRG_D1_8 "рстуфхцчшщъыьэюя" +#define STRG_D1_9 "ѐёђѓєѕіїјљњћќѝўџ" +#define STRG_D1_a "ѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯ" +#define STRG_D1_b "ѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿ" + +#define STRG_E382_8 "よめもゃやゅゆょよらりるれろゎわ" +#define STRG_E382_9 "ゐゑをんゔゕゖ゗゘゙゚゛ ゜ゝゞゟ" +#define STRG_E382_a "゠ァアィイゥウェエォオカガキギク" +#define STRG_E382_b "グケゲコゴサザシジスズセゼソゾタ" +#define STRG_E383_8 "トチヂッツヅテデトドナニヌネノハ" +#define STRG_E383_9 "バパヒビピフブプヘベペホボポマミ" +#define STRG_E383_a "ムメモャヤュユョヨラリルレロヮワ" +#define STRG_E383_b "ヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ" + +#define STRG_OKTAL_0 "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017" +#define STRG_OKTAL_1 "\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define STRG_OKTAL_2 "\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057" +#define STRG_OKTAL_3 "\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077" +#define STRG_OKTAL_4 "\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117" +#define STRG_OKTAL_5 "\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137" +#define STRG_OKTAL_6 "\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157" +#define STRG_OKTAL_7 "\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177" +#define STRG_OKTAL_8 "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217" +#define STRG_OKTAL_9 "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237" +#define STRG_OKTAL_a "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257" +#define STRG_OKTAL_b "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277" +#define STRG_OKTAL_c "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317" +#define STRG_OKTAL_d "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337" +#define STRG_OKTAL_e "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357" +#define STRG_OKTAL_f "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377" + +#ifdef DISPLAYTEST + #define WELCOME_MSG "Language TEST" + + #define MSG_WATCH "Display test" + #define MSG_PREPARE STRG_OKTAL_b + #define MSG_CONTROL STRG_OKTAL_c +#endif + +#ifdef WEST + #define WELCOME_MSG "Language TEST" + + #define MSG_WATCH "\001\002\003\004\005\006\007\010\011" + #define MSG_PREPARE "UTF8" + #define MSG_CONTROL "ASCII" + + //#define MSG_MAIN ".." + #define MSG_DISABLE_STEPPERS STRG_C2_8 + #define MSG_AUTO_HOME STRG_C2_9 + #define MSG_SET_HOME_OFFSETS STRG_C2_a + #define MSG_PREHEAT_PLA STRG_C2_b + #define MSG_PREHEAT_ABS STRG_C3_8 + #define MSG_COOLDOWN STRG_C3_9 + #define MSG_SWITCH_PS_OFF STRG_C3_a + #define MSG_MOVE_AXIS STRG_C3_b + + #define MSG_MAIN STRG_OKTAL_2 + #define MSG_TEMPERATURE STRG_OKTAL_3 + #define MSG_MOTION STRG_OKTAL_4 + #define MSG_VOLUMETRIC STRG_OKTAL_5 + #define MSG_CONTRAST STRG_OKTAL_6 + #define MSG_RESTORE_FAILSAFE STRG_OKTAL_7 + + #define MSG_NOZZLE STRG_OKTAL_8 + #define MSG_FAN_SPEED STRG_OKTAL_9 + #define MSG_AUTOTEMP STRG_OKTAL_a + #define MSG_MIN STRG_OKTAL_b + #define MSG_MAX STRG_OKTAL_c + #define MSG_FACTOR STRG_OKTAL_d + #define MSG_PID_P STRG_OKTAL_e + #define MSG_PID_I STRG_OKTAL_f + +#endif + +#ifdef CYRIL + #define WELCOME_MSG "Language TEST" + + #define MSG_WATCH "\001\002\003\004\005\006\007\010\011" + #define MSG_PREPARE "UTF8" + #define MSG_CONTROL "ASCII" + + //#define MSG_MAIN ".." + #define MSG_DISABLE_STEPPERS STRG_D0_8 + #define MSG_AUTO_HOME STRG_D0_9 + #define MSG_SET_HOME_OFFSETS STRG_D0_a + #define MSG_PREHEAT_PLA STRG_D0_b + #define MSG_PREHEAT_ABS STRG_D1_8 + #define MSG_COOLDOWN STRG_D1_9 + #define MSG_SWITCH_PS_OFF STRG_D1_a + #define MSG_MOVE_AXIS STRG_D1_b + + #define MSG_MAIN STRG_OKTAL_2 + #define MSG_TEMPERATURE STRG_OKTAL_3 + #define MSG_MOTION STRG_OKTAL_4 + #define MSG_VOLUMETRIC STRG_OKTAL_5 + #define MSG_CONTRAST STRG_OKTAL_6 + #define MSG_RESTORE_FAILSAFE STRG_OKTAL_7 + + #define MSG_NOZZLE STRG_OKTAL_8 + #define MSG_FAN_SPEED STRG_OKTAL_9 + #define MSG_AUTOTEMP STRG_OKTAL_a + #define MSG_MIN STRG_OKTAL_b + #define MSG_MAX STRG_OKTAL_c + #define MSG_FACTOR STRG_OKTAL_d + #define MSG_PID_P STRG_OKTAL_e + #define MSG_PID_I STRG_OKTAL_f + +#endif + +#if defined( KANA ) + #define WELCOME_MSG "Language TEST" + + #define MSG_WATCH "\001\002\003\004\005\006\007\010\011" + #define MSG_PREPARE "UTF8" + #define MSG_CONTROL "ASCII" + + //#define MSG_MAIN ".." + #define MSG_DISABLE_STEPPERS STRG_E382_8 + #define MSG_AUTO_HOME STRG_E382_9 + #define MSG_SET_HOME_OFFSETS STRG_E382_a + #define MSG_PREHEAT_PLA STRG_E382_b + #define MSG_PREHEAT_ABS STRG_E383_8 + #define MSG_COOLDOWN STRG_E383_9 + #define MSG_SWITCH_PS_OFF STRG_E383_a + #define MSG_MOVE_AXIS STRG_E383_b + + #define MSG_MAIN STRG_OKTAL_2 + #define MSG_TEMPERATURE STRG_OKTAL_3 + #define MSG_MOTION STRG_OKTAL_4 + #define MSG_VOLUMETRIC STRG_OKTAL_5 + #define MSG_CONTRAST STRG_OKTAL_6 + #define MSG_RESTORE_FAILSAFE STRG_OKTAL_7 + + #define MSG_NOZZLE STRG_OKTAL_8 + #define MSG_FAN_SPEED STRG_OKTAL_9 + #define MSG_AUTOTEMP STRG_OKTAL_a + #define MSG_MIN STRG_OKTAL_b + #define MSG_MAX STRG_OKTAL_c + #define MSG_FACTOR STRG_OKTAL_d + #define MSG_PID_P STRG_OKTAL_e + #define MSG_PID_I STRG_OKTAL_f +#endif + +#endif // LANGUAGE_TEST_H diff --git a/Marlin/mesh_bed_leveling.cpp b/Marlin/mesh_bed_leveling.cpp index b383fe589..a48a6e619 100644 --- a/Marlin/mesh_bed_leveling.cpp +++ b/Marlin/mesh_bed_leveling.cpp @@ -1,20 +1,16 @@ #include "mesh_bed_leveling.h" -#if defined(MESH_BED_LEVELING) +#ifdef MESH_BED_LEVELING -mesh_bed_leveling mbl; + mesh_bed_leveling mbl; -mesh_bed_leveling::mesh_bed_leveling() { - reset(); -} - -void mesh_bed_leveling::reset() { - for (int y=0; y get_x(i) && i < MESH_NUM_X_POINTS-1) { - i++; - } - return i-1; + int i = 1; + while (x > get_x(i) && i < MESH_NUM_X_POINTS-1) i++; + return i - 1; } int select_y_index(float y) { - int i = 1; - while (y > get_y(i) && i < MESH_NUM_Y_POINTS-1) { - i++; - } - return i-1; + int i = 1; + while (y > get_y(i) && i < MESH_NUM_Y_POINTS - 1) i++; + return i - 1; } float calc_z0(float a0, float a1, float z1, float a2, float z2) { - float delta_z = (z2 - z1)/(a2 - a1); - float delta_a = a0 - a1; - return z1 + delta_a * delta_z; + float delta_z = (z2 - z1)/(a2 - a1); + float delta_a = a0 - a1; + return z1 + delta_a * delta_z; } float get_z(float x0, float y0) { - int x_index = select_x_index(x0); - int y_index = select_y_index(y0); - float z1 = calc_z0(x0, - get_x(x_index), z_values[y_index][x_index], - get_x(x_index+1), z_values[y_index][x_index+1]); - float z2 = calc_z0(x0, - get_x(x_index), z_values[y_index+1][x_index], - get_x(x_index+1), z_values[y_index+1][x_index+1]); - float z0 = calc_z0(y0, - get_y(y_index), z1, - get_y(y_index+1), z2); - return z0; + int x_index = select_x_index(x0); + int y_index = select_y_index(y0); + float z1 = calc_z0(x0, + get_x(x_index), z_values[y_index][x_index], + get_x(x_index+1), z_values[y_index][x_index+1]); + float z2 = calc_z0(x0, + get_x(x_index), z_values[y_index+1][x_index], + get_x(x_index+1), z_values[y_index+1][x_index+1]); + float z0 = calc_z0(y0, + get_y(y_index), z1, + get_y(y_index+1), z2); + return z0; } -}; + }; -extern mesh_bed_leveling mbl; + extern mesh_bed_leveling mbl; #endif // MESH_BED_LEVELING diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index add20d5f4..d3397ad56 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -161,7 +161,7 @@ volatile signed char count_direction[NUM_AXIS] = { 1, 1, 1, 1 }; Z2_STEP_WRITE(v); \ } #else - #define Z_APPLY_STEP(v,Q) Z_STEP_WRITE(v), Z2_STEP_WRITE(v) + #define Z_APPLY_STEP(v,Q) { Z_STEP_WRITE(v); Z2_STEP_WRITE(v); } #endif #else #define Z_APPLY_DIR(v,Q) Z_DIR_WRITE(v) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 4a5f7a7e5..7b7eceaf7 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -53,10 +53,10 @@ //============================= public variables ============================ //=========================================================================== -int target_temperature[EXTRUDERS] = { 0 }; +int target_temperature[4] = { 0 }; int target_temperature_bed = 0; -int current_temperature_raw[EXTRUDERS] = { 0 }; -float current_temperature[EXTRUDERS] = { 0.0 }; +int current_temperature_raw[4] = { 0 }; +float current_temperature[4] = { 0.0 }; int current_temperature_bed_raw = 0; float current_temperature_bed = 0.0; #ifdef TEMP_SENSOR_1_AS_REDUNDANT @@ -1181,9 +1181,10 @@ static void set_current_temp_raw() { #endif #if HAS_TEMP_1 #ifdef TEMP_SENSOR_1_AS_REDUNDANT - redundant_temperature_raw = + redundant_temperature_raw = raw_temp_value[1]; + #else + current_temperature_raw[1] = raw_temp_value[1]; #endif - current_temperature_raw[1] = raw_temp_value[1]; #if HAS_TEMP_2 current_temperature_raw[2] = raw_temp_value[2]; #if HAS_TEMP_3 diff --git a/Marlin/temperature.h b/Marlin/temperature.h index b29fc2b57..853179be5 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -41,10 +41,10 @@ void manage_heater(); //it is critical that this is called periodically. // low level conversion routines // do not use these routines and variables outside of temperature.cpp -extern int target_temperature[EXTRUDERS]; -extern float current_temperature[EXTRUDERS]; +extern int target_temperature[4]; +extern float current_temperature[4]; #ifdef SHOW_TEMP_ADC_VALUES - extern int current_temperature_raw[EXTRUDERS]; + extern int current_temperature_raw[4]; extern int current_temperature_bed_raw; #endif extern int target_temperature_bed; diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index f6af156d5..98629ad51 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -911,7 +911,7 @@ static void lcd_control_motion_menu() { START_MENU(); MENU_ITEM(back, MSG_CONTROL, lcd_control_menu); #ifdef ENABLE_AUTO_BED_LEVELING - MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, 0.0, 50); + MENU_ITEM_EDIT(float32, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); #endif MENU_ITEM_EDIT(float5, MSG_ACC, &acceleration, 10, 99000); 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) static void lcd_quick_feedback() { lcdDrawUpdate = 2; blocking_enc = millis() + 500; - lcd_implementation_quick_feedback(); + + #ifdef LCD_USE_I2C_BUZZER + #ifndef LCD_FEEDBACK_FREQUENCY_HZ + #define LCD_FEEDBACK_FREQUENCY_HZ 100 + #endif + #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS + #define LCD_FEEDBACK_FREQUENCY_DURATION_MS (1000/6) + #endif + lcd_buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ); + #elif defined(BEEPER) && BEEPER > -1 + SET_OUTPUT(BEEPER); + #ifndef LCD_FEEDBACK_FREQUENCY_HZ + #define LCD_FEEDBACK_FREQUENCY_HZ 500 + #endif + #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS + #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 50 + #endif + const unsigned int delay = 1000000 / LCD_FEEDBACK_FREQUENCY_HZ / 2; + int i = LCD_FEEDBACK_FREQUENCY_DURATION_MS * LCD_FEEDBACK_FREQUENCY_HZ / 1000; + while (i--) { + WRITE(BEEPER,HIGH); + delayMicroseconds(delay); + WRITE(BEEPER,LOW); + delayMicroseconds(delay); + } + #endif } /** Menu action functions **/ @@ -1330,7 +1355,7 @@ void lcd_update() { blink++; // Variable for fan animation and alive dot u8g.firstPage(); do { - u8g.setFont(FONT_MENU); + lcd_setFont(FONT_MENU); u8g.setPrintPos(125, 0); if (blink % 2) u8g.setColorIndex(1); else u8g.setColorIndex(0); // Set color for the alive dot u8g.drawPixel(127, 63); // draw alive dot diff --git a/Marlin/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h index 044ac95ee..aaa55800a 100644 --- a/Marlin/ultralcd_implementation_hitachi_HD44780.h +++ b/Marlin/ultralcd_implementation_hitachi_HD44780.h @@ -179,25 +179,20 @@ // 2 wire Non-latching LCD SR from: // https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection #elif defined(SR_LCD_2W_NL) - extern "C" void __cxa_pure_virtual() { while (1); } #include #include #define LCD_CLASS LiquidCrystal_SR LCD_CLASS lcd(SR_DATA_PIN, SR_CLK_PIN); - #else // Standard directly connected LCD implementations - #ifdef LANGUAGE_RU - #include "LiquidCrystalRus.h" - #define LCD_CLASS LiquidCrystalRus - #else - #include - #define LCD_CLASS LiquidCrystal - #endif + #include + #define LCD_CLASS LiquidCrystal 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 #endif +#include "utf_mapper.h" + #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) static uint16_t progressBarTick = 0; #if PROGRESS_MSG_EXPIRE > 0 @@ -207,7 +202,7 @@ #endif /* Custom characters defined in the first 8 characters of the LCD */ -#define LCD_STR_BEDTEMP "\x00" +#define LCD_STR_BEDTEMP "\x00" // this will have 'unexpected' results when used in a string! #define LCD_STR_DEGREE "\x01" #define LCD_STR_THERMOMETER "\x02" #define LCD_STR_UPLEVEL "\x03" @@ -215,7 +210,8 @@ #define LCD_STR_FOLDER "\x05" #define LCD_STR_FEEDRATE "\x06" #define LCD_STR_CLOCK "\x07" -#define LCD_STR_ARROW_RIGHT "\x7E" /* from the default character set */ +//#define LCD_STR_ARROW_RIGHT "\x7E" /* from the default character set. Only available on DISPLAY_CHARSET_HD44780_JAPAN - at this place!*/ +#define LCD_STR_ARROW_RIGHT ">" /* from the default character set */ static void lcd_set_custom_characters( #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) @@ -405,15 +401,30 @@ static void lcd_implementation_clear() { lcd.clear(); } + /* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */ -static void lcd_printPGM(const char* str) -{ - char c; - while((c = pgm_read_byte(str++)) != '\0') - { - lcd.write(c); - } +char lcd_printPGM(const char* str) { + char c; + char n = 0; + while((c = pgm_read_byte(str++))) { + n += charset_mapper(c); + } + return n; +} + +char lcd_print(char* str) { + char c, n = 0;; + unsigned char i = 0; + while((c = str[i++])) { + n += charset_mapper(c); + } + return n; +} + +unsigned lcd_print(char c) { + return charset_mapper(c); } + /* Possible status screens: 16x2 |0123456789012345| @@ -608,7 +619,7 @@ static void lcd_implementation_status_screen() } #endif //FILAMENT_LCD_DISPLAY - lcd.print(lcd_status_message); + lcd_print(lcd_status_message); } 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 lcd.setCursor(0, row); lcd.print(sel ? pre_char : ' '); while ((c = pgm_read_byte(pstr)) && n > 0) { - lcd.print(c); + n -= lcd_print(c); pstr++; - if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--; } while(n--) lcd.print(' '); lcd.print(post_char); lcd.print(' '); } + static void lcd_implementation_drawmenu_setting_edit_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char* data) { char c; uint8_t n = LCD_WIDTH - 1 - (LCD_WIDTH < 20 ? 1 : 2) - lcd_strlen(data); lcd.setCursor(0, row); lcd.print(sel ? pre_char : ' '); while ((c = pgm_read_byte(pstr)) && n > 0) { - lcd.print(c); + n -= lcd_print(c); pstr++; - if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--; } lcd.print(':'); while (n--) lcd.print(' '); - lcd.print(data); + lcd_print(data); } static void lcd_implementation_drawmenu_setting_edit_generic_P(bool sel, uint8_t row, const char* pstr, char pre_char, const char* data) { char c; @@ -645,14 +655,14 @@ static void lcd_implementation_drawmenu_setting_edit_generic_P(bool sel, uint8_t lcd.setCursor(0, row); lcd.print(sel ? pre_char : ' '); while ((c = pgm_read_byte(pstr)) && n > 0) { - lcd.print(c); + n -= lcd_print(c); pstr++; - if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--; } lcd.print(':'); while (n--) lcd.print(' '); lcd_printPGM(data); } + #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))) #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))) #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) { lcd_printPGM(pstr); lcd.print(':'); lcd.setCursor(LCD_WIDTH - (LCD_WIDTH < 20 ? 0 : 1) - lcd_strlen(value), 1); - lcd.print(value); + lcd_print(value); } + static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename, uint8_t concat) { char c; uint8_t n = LCD_WIDTH - concat; @@ -691,9 +702,8 @@ static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* ps longFilename[n] = '\0'; } while ((c = *filename) && n > 0) { - lcd.print(c); + n -= lcd_print(c); filename++; - n--; } while (n--) lcd.print(' '); } @@ -701,40 +711,16 @@ static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* ps static void lcd_implementation_drawmenu_sdfile(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename) { lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 1); } + static void lcd_implementation_drawmenu_sddirectory(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename) { lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 2); } + #define lcd_implementation_drawmenu_back(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]) #define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0]) #define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ') #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ') -static void lcd_implementation_quick_feedback() -{ - #ifdef LCD_USE_I2C_BUZZER - #if defined(LCD_FEEDBACK_FREQUENCY_DURATION_MS) && defined(LCD_FEEDBACK_FREQUENCY_HZ) - lcd_buzz(LCD_FEEDBACK_FREQUENCY_DURATION_MS, LCD_FEEDBACK_FREQUENCY_HZ); - #else - lcd_buzz(1000/6, 100); - #endif - #elif defined(BEEPER) && BEEPER > -1 - SET_OUTPUT(BEEPER); - #if !defined(LCD_FEEDBACK_FREQUENCY_HZ) || !defined(LCD_FEEDBACK_FREQUENCY_DURATION_MS) - const unsigned int delay = 100; - uint8_t i = 10; - #else - const unsigned int delay = 1000000 / LCD_FEEDBACK_FREQUENCY_HZ / 2; - int8_t i = LCD_FEEDBACK_FREQUENCY_DURATION_MS * LCD_FEEDBACK_FREQUENCY_HZ / 1000; - #endif - while (i--) { - WRITE(BEEPER,HIGH); - delayMicroseconds(delay); - WRITE(BEEPER,LOW); - delayMicroseconds(delay); - } - #endif -} - #ifdef LCD_HAS_STATUS_INDICATORS static void lcd_implementation_update_indicators() { diff --git a/Marlin/utf_mapper.h b/Marlin/utf_mapper.h new file mode 100644 index 000000000..69e2e5da5 --- /dev/null +++ b/Marlin/utf_mapper.h @@ -0,0 +1,252 @@ +#ifndef UTF_MAPPER_H +#define UTF_MAPPER_H + +#include "language.h" + +#ifdef DOGLCD + #define HARDWARE_CHAR_OUT u8g.print +#else + #define HARDWARE_CHAR_OUT lcd.write +#endif + +#if !(defined( SIMULATE_ROMFONT )) && defined( DOGLCD ) + #if defined( DISPLAY_CHARSET_ISO10646_1 ) + #define MAPPER_ONE_TO_ONE + #elif defined( DISPLAY_CHARSET_ISO10646_5 ) + #define MAPPER_ONE_TO_ONE + #elif defined( DISPLAY_CHARSET_ISO10646_KANA ) + #define MAPPER_ONE_TO_ONE + #endif +#else // SIMULATE_ROMFONT + #if defined( DISPLAY_CHARSET_HD44780_JAPAN ) + #if defined( MAPPER_C2C3 ) + const PROGMEM uint8_t utf_recode[] = + { // 0 1 2 3 4 5 6 7 8 9 a b c d e f This is fair for symbols + 0x20,0x3f,0xec,0xed,0x3f,0x5c,0x7c,0x3f,0x22,0x63,0x61,0x7f,0x3f,0x3f,0x52,0xb0, // c2a + // ' ' ¢ £ ­ l " c a « R + 0xdf,0x3f,0x32,0x33,0x27,0xe4,0xf1,0xa5,0x2c,0x31,0xdf,0x7e,0x3f,0x3f,0x3f,0x3f, // c2b but relatively bad for letters. + // ° 2 3 ` N p . , 1 ° » + 0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, // c38 + // ä + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xef,0x78,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0xe2, // c39 missing characters display as '?' + // ö x ü ß + 0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, // c3a + // ä + 0x3f,0xee,0x3f,0x3f,0x3f,0x3f,0xef,0xfd,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0x3f // c3b + // n ö ÷ ü + }; + #elif defined( MAPPER_E382E383 ) + const PROGMEM uint8_t utf_recode[] = + { // 0 1 2 3 4 5 6 7 8 9 a b c d e f + 0x3d,0xb1,0xb1,0xa8,0xb2,0xa9,0xb3,0xaa,0xb4,0xab,0xb5,0xb6,0xb6,0xb7,0xb7,0xb8, // e382a Please test and correct + // = ア ア ィ イ ゥ ウ ェ エ ォ オ ガ ガ キ キ ク + 0xb8,0xb9,0xb9,0xba,0xba,0xbb,0xbb,0xbc,0xbc,0xbd,0xbd,0xbe,0xbe,0xbf,0xbf,0xc0, // e382b + // ク ケ ケ コ コ サ サ シ シ ス ス セ セ ソ ソ タ + 0xc0,0xc1,0xc1,0xc2,0xc2,0xc2,0xc3,0xc3,0xc4,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca, // e3838 + // タ チ チ ッ ッ ッ テ テ ト ト ナ ニ ヌ ネ ノ ハ + 0xca,0xca,0xcb,0xcb,0xcb,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xce,0xce,0xce,0xcf,0xd0, // e3839 + // ハ ハ ヒ ヒ ヒ フ フ フ ヘ ヘ ヘ ホ ホ ホ マ ミ + 0xd1,0xd2,0xd3,0xd4,0xd4,0xd5,0xd5,0xae,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdc, // e383a + // ム メ モ ャ ャ ユ ユ ョ ヨ ラ リ ル レ ロ ワ ワ + 0xec,0xa7,0xa6,0xdd,0xcc,0x3f,0x3f,0x3f,0x3f,0x3f,0xa6,0xa5,0xb0,0xa4,0xa4,0x3f // e383b + // ヰ ヱ ヲ ン フ ? ? ? ? ? ヲ ・ ー ヽ ヽ ? + }; + #elif defined( MAPPER_D0D1 ) + #error( "Cyrillic on a japanese dsplay makes no sense. There are no matching symbols."); + #endif + + #elif defined( DISPLAY_CHARSET_HD44780_WESTERN ) + #if defined( MAPPER_C2C3 ) + : + const PROGMEM uint8_t utf_recode[] = + { // 0 1 2 3 4 5 6 7 8 9 a b c d e f This is relative complete. + 0x20,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0x22,0xa9,0xaa,0xab,0x3f,0x3f,0xae,0x3f, // c2a ¡¢£¤¥¦§¨©ª«¬­®¯ + // ' ' ¡ ¢ £ ¤ ¥ ¦ § " © ª « ? ? ® ? + 0xb0,0xb1,0xb2,0xb3,0x27,0xb5,0xb6,0xb7,0x2c,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, // c2b °±²³´µ¶·¸¹º»¼½¾¿ + // ° ± ³ ² ? µ ¶ · , ¹ º » ¼ ½ ¾ ¿ + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, // c38 ÀÁÃÄÅÆÇÈÉÊËÌÍÎÏ + // À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï + 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, // c39 ÐÑÓÔÕÖ×ØÙÚÛÜÝÞß + // Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß + 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, // c3a àáãäåæçèéêëìíîï + // à á â ã ä å æ ç è é ê ë ì í î ï + 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff // c3b ðñóôõö÷øùúûüýþÿ + // ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ + }; + #elif defined( MAPPER_D0D1 ) + #define MAPPER_D0D1_MOD + const PROGMEM uint8_t utf_recode[] = + {//0 1 2 3 4 5 6 7 8 9 a b c d e f + 0x41,0x80,0x42,0x92,0x81,0x45,0x82,0x83,0x84,0x85,0x4b,0x86,0x4d,0x48,0x4f,0x87, // d0a + // A Б B Г Д E Ж З И Й K Л M H O П + 0x50,0x43,0x54,0x88,0xd8,0x58,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad, // d0b + // P C T У Ф X Ч ч Ш Щ Ъ Ы b Э Ю Я + 0x61,0x36,0x42,0x92,0x81,0x65,0x82,0xb3,0x84,0x85,0x6b,0x86,0x4d,0x48,0x6f,0x87, // d18 + // a 6 B Г Д e Ж ³ И Й k Л M H o П + 0x70,0x63,0x54,0x79,0xd8,0x78,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad // d19 + // p c T y Ф x Ч ч Ш Щ Ъ Ы b Э Ю Я + }; + #elif defined( MAPPER_E382E383 ) + #error( "Katakana on a western display makes no sense. There are no matching symbols." ); + #endif + + #elif defined( DISPLAY_CHARSET_HD44780_CYRILLIC ) + #if defined( MAPPER_D0D1 ) + #define MAPPER_D0D1_MOD + // it is a Russian alphabet translation + // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё + const PROGMEM uint8_t utf_recode[] = + { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4, // unicode U+0400 to U+047f + // A Б->Ё B Г Д E Ж З // 0 Ѐ Ё Ђ Ѓ Є Ѕ І Ї + 0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8, // Ј Љ Њ Ћ Ќ Ѝ Ў Џ + // И Й K Л M H O П // 1 А Б В Г Д Е Ж З + 0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab, // И Й К Л М Н О П + // P C T У Ф X Ч ч // 2 Р С Т У Ф Х Г Ч + 0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1, // Ш Щ Ъ Ы Ь Э Ю Я + // Ш Щ Ъ Ы b Э Ю Я // 3 а б в г д е ж з + 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7, // и й к л м н о п + // a б->ё в г д e ж з // 4 р с т у ф х ц ч + 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe, // ш щ ъ ы ь э ю я + // и й к л м н o п // 5 ѐ ё ђ ѓ є ѕ і ї + 0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0, // ј љ њ ћ ќ ѝ ў џ + // p c т y ф x ц ч // 6 Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ + 0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7 // Ѫ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ + // ш щ ъ ы ь э ю я // 7 Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ + }; // ѻ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ + #elif defined( MAPPER_C2C3 ) + #error( "Western languages on a cyrillic display makes no sense. There are no matching symbols." ); + #elif defined( MAPPER_E382E383 ) + #error( "Katakana on a cyrillic display makes no sense. There are no matching symbols." ); + #endif + #else + #error("Something went wrong in the selection of DISPLAY_CHARSET_HD44780's"); + #endif // DISPLAY_CHARSET_HD44780_CYRILLIC +#endif // SIMULATE_ROMFONT + +#if defined( MAPPER_NON ) + char charset_mapper(char c){ + HARDWARE_CHAR_OUT( c ); + return 1; + } +#elif defined( MAPPER_C2C3 ) + uint8_t utf_hi_char; // UTF-8 high part + bool seen_c2 = false; + char charset_mapper(char c){ + uint8_t d = c; + if ( d >= 0x80 ) { // UTF-8 handling + if ( (d >= 0xc0) && (!seen_c2) ) { + utf_hi_char = d - 0xc2; + seen_c2 = true; + return 0; + } + else if (seen_c2){ + d &= 0x3f; + #ifndef MAPPER_ONE_TO_ONE + HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); + #else + HARDWARE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; + #endif + } + else { + HARDWARE_CHAR_OUT('?'); + } + } + else { + HARDWARE_CHAR_OUT((char) c ); + } + seen_c2 = false; + return 1; + } +#elif defined( MAPPER_D0D1_MOD ) + uint8_t utf_hi_char; // UTF-8 high part + bool seen_d5 = false; + char charset_mapper(char c){ + // it is a Russian alphabet translation + // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё + uint8_t d = c; + if ( d >= 0x80 ) { // UTF-8 handling + if ((d >= 0xd0) && (!seen_d5)) { + utf_hi_char = d - 0xd0; + seen_d5 = true; + return 0; + } else if (seen_d5) { + d &= 0x3f; + if ( !utf_hi_char && ( d == 1 )) { + HARDWARE_CHAR_OUT((char) 0xa2 ); // Ё + } else if ((utf_hi_char == 1) && (d == 0x11)) { + HARDWARE_CHAR_OUT((char) 0xb5 ); // ё + } else { + HARDWARE_CHAR_OUT((char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x10 ) ); + } + } + else { + HARDWARE_CHAR_OUT('?'); + } + } else { + HARDWARE_CHAR_OUT((char) c ); + } + seen_d5 = false; + return 1; + } +#elif defined( MAPPER_D0D1 ) + uint8_t utf_hi_char; // UTF-8 high part + bool seen_d5 = false; + char charset_mapper(char c){ + uint8_t d = c; + if ( d >= 0x80u ) { // UTF-8 handling + if ((d >= 0xd0u) && (!seen_d5)) { + utf_hi_char = d - 0xd0u; + seen_d5 = true; + return 0; + } else if (seen_d5) { + d &= 0x3fu; + #ifndef MAPPER_ONE_TO_ONE + HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); + #else + HARDWARE_CHAR_OUT( (char) (0xa0u + ( utf_hi_char << 6 ) + d ) ) ; + #endif + } else { + HARDWARE_CHAR_OUT('?'); + } + } else { + HARDWARE_CHAR_OUT((char) c ); + } + seen_d5 = false; + return 1; + } +#elif defined( MAPPER_E382E383 ) + uint8_t utf_hi_char; // UTF-8 high part + bool seen_e3 = false; + bool seen_82_83 = false; + char charset_mapper(char c){ + uint8_t d = c; + if ( d >= 0x80 ) { // UTF-8 handling + if ( (d == 0xe3) && (seen_e3 == false)) { + seen_e3 = true; + return 0; // eat 0xe3 + } else if ( (d >= 0x82) && (seen_e3 == true) && (seen_82_83 == false)) { + utf_hi_char = d - 0x82; + seen_82_83 = true; + return 0; + } else if ((seen_e3 == true) && (seen_82_83 == true)){ + d &= 0x3f; + #ifndef MAPPER_ONE_TO_ONE + HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); + #else + HARDWARE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d ) ) ; + #endif + } else { + HARDWARE_CHAR_OUT((char) '?' ); + } + } else { + HARDWARE_CHAR_OUT((char) c ); + } + seen_e3 = false; + seen_82_83 = false; + return 1; + } +#else + #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. +#endif // code mappers + +#endif // UTF_MAPPER_H diff --git a/Marlin/vector_3.cpp b/Marlin/vector_3.cpp index 2e42da553..243f0838f 100644 --- a/Marlin/vector_3.cpp +++ b/Marlin/vector_3.cpp @@ -26,57 +26,40 @@ vector_3::vector_3() : x(0), y(0), z(0) { } vector_3::vector_3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) { } -vector_3 vector_3::cross(vector_3 left, vector_3 right) -{ +vector_3 vector_3::cross(vector_3 left, vector_3 right) { return vector_3(left.y * right.z - left.z * right.y, left.z * right.x - left.x * right.z, left.x * right.y - left.y * right.x); } -vector_3 vector_3::operator+(vector_3 v) -{ - return vector_3((x + v.x), (y + v.y), (z + v.z)); -} - -vector_3 vector_3::operator-(vector_3 v) -{ - return vector_3((x - v.x), (y - v.y), (z - v.z)); -} +vector_3 vector_3::operator+(vector_3 v) { return vector_3((x + v.x), (y + v.y), (z + v.z)); } +vector_3 vector_3::operator-(vector_3 v) { return vector_3((x - v.x), (y - v.y), (z - v.z)); } -vector_3 vector_3::get_normal() -{ +vector_3 vector_3::get_normal() { vector_3 normalized = vector_3(x, y, z); normalized.normalize(); return normalized; } -float vector_3::get_length() -{ - float length = sqrt((x * x) + (y * y) + (z * z)); - return length; -} - -void vector_3::normalize() -{ +float vector_3::get_length() { return sqrt((x * x) + (y * y) + (z * z)); } + +void vector_3::normalize() { float length = get_length(); x /= length; y /= length; z /= length; } -void vector_3::apply_rotation(matrix_3x3 matrix) -{ +void vector_3::apply_rotation(matrix_3x3 matrix) { float resultX = x * matrix.matrix[3*0+0] + y * matrix.matrix[3*1+0] + z * matrix.matrix[3*2+0]; float resultY = x * matrix.matrix[3*0+1] + y * matrix.matrix[3*1+1] + z * matrix.matrix[3*2+1]; float resultZ = x * matrix.matrix[3*0+2] + y * matrix.matrix[3*1+2] + z * matrix.matrix[3*2+2]; - x = resultX; y = resultY; z = resultZ; } -void vector_3::debug(char* title) -{ +void vector_3::debug(const char title[]) { SERIAL_PROTOCOL(title); SERIAL_PROTOCOLPGM(" x: "); SERIAL_PROTOCOL_F(x, 6); @@ -87,8 +70,7 @@ void vector_3::debug(char* title) SERIAL_EOL; } -void apply_rotation_xyz(matrix_3x3 matrix, float &x, float& y, float& z) -{ +void apply_rotation_xyz(matrix_3x3 matrix, float &x, float& y, float& z) { vector_3 vector = vector_3(x, y, z); vector.apply_rotation(matrix); x = vector.x; @@ -96,48 +78,41 @@ void apply_rotation_xyz(matrix_3x3 matrix, float &x, float& y, float& z) z = vector.z; } -matrix_3x3 matrix_3x3::create_from_rows(vector_3 row_0, vector_3 row_1, vector_3 row_2) -{ - //row_0.debug("row_0"); - //row_1.debug("row_1"); - //row_2.debug("row_2"); +matrix_3x3 matrix_3x3::create_from_rows(vector_3 row_0, vector_3 row_1, vector_3 row_2) { + //row_0.debug("row_0"); + //row_1.debug("row_1"); + //row_2.debug("row_2"); matrix_3x3 new_matrix; new_matrix.matrix[0] = row_0.x; new_matrix.matrix[1] = row_0.y; new_matrix.matrix[2] = row_0.z; new_matrix.matrix[3] = row_1.x; new_matrix.matrix[4] = row_1.y; new_matrix.matrix[5] = row_1.z; new_matrix.matrix[6] = row_2.x; new_matrix.matrix[7] = row_2.y; new_matrix.matrix[8] = row_2.z; - //new_matrix.debug("new_matrix"); - + //new_matrix.debug("new_matrix"); return new_matrix; } -void matrix_3x3::set_to_identity() -{ +void matrix_3x3::set_to_identity() { matrix[0] = 1; matrix[1] = 0; matrix[2] = 0; matrix[3] = 0; matrix[4] = 1; matrix[5] = 0; matrix[6] = 0; matrix[7] = 0; matrix[8] = 1; } -matrix_3x3 matrix_3x3::create_look_at(vector_3 target) -{ - vector_3 z_row = target.get_normal(); - vector_3 x_row = vector_3(1, 0, -target.x/target.z).get_normal(); - vector_3 y_row = vector_3::cross(z_row, x_row).get_normal(); +matrix_3x3 matrix_3x3::create_look_at(vector_3 target) { + vector_3 z_row = target.get_normal(); + vector_3 x_row = vector_3(1, 0, -target.x/target.z).get_normal(); + vector_3 y_row = vector_3::cross(z_row, x_row).get_normal(); - // x_row.debug("x_row"); - // y_row.debug("y_row"); - // z_row.debug("z_row"); + // x_row.debug("x_row"); + // y_row.debug("y_row"); + // z_row.debug("z_row"); - - // create the matrix already correctly transposed - matrix_3x3 rot = matrix_3x3::create_from_rows(x_row, y_row, z_row); + // create the matrix already correctly transposed + matrix_3x3 rot = matrix_3x3::create_from_rows(x_row, y_row, z_row); - // rot.debug("rot"); - return rot; + // rot.debug("rot"); + return rot; } - -matrix_3x3 matrix_3x3::transpose(matrix_3x3 original) -{ +matrix_3x3 matrix_3x3::transpose(matrix_3x3 original) { matrix_3x3 new_matrix; new_matrix.matrix[0] = original.matrix[0]; new_matrix.matrix[1] = original.matrix[3]; new_matrix.matrix[2] = original.matrix[6]; 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) return new_matrix; } -void matrix_3x3::debug(char* title) { +void matrix_3x3::debug(const char title[]) { SERIAL_PROTOCOLLN(title); int count = 0; for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { + if (matrix[count] >= 0.0) SERIAL_PROTOCOLPGM("+"); SERIAL_PROTOCOL_F(matrix[count], 6); SERIAL_PROTOCOLPGM(" "); count++; @@ -158,5 +134,5 @@ void matrix_3x3::debug(char* title) { } } -#endif // #ifdef ENABLE_AUTO_BED_LEVELING +#endif // ENABLE_AUTO_BED_LEVELING diff --git a/Marlin/vector_3.h b/Marlin/vector_3.h index 0b9decafa..0c5938bac 100644 --- a/Marlin/vector_3.h +++ b/Marlin/vector_3.h @@ -37,7 +37,7 @@ struct vector_3 float get_length(); vector_3 get_normal(); - void debug(char* title); + void debug(const char title[]); void apply_rotation(matrix_3x3 matrix); }; @@ -52,7 +52,7 @@ struct matrix_3x3 void set_to_identity(); - void debug(char* title); + void debug(const char title[]); }; diff --git a/README.md b/README.md index e674c62c6..e281d3602 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ * [Auto Bed Leveling](/Documentation/BedLeveling.md) * [Filament Sensor](/Documentation/FilamentSensor.md) * [Ramps Servo Power](/Documentation/RampsServoPower.md) + * [LCD Language - Font - System](Documentation/LCDLanguageFont.md) * [Mesh Bed Leveling](/Documentation/MeshBedLeveling.md) ##### [RepRap.org Wiki Page](http://reprap.org/wiki/Marlin)