From fe2bd237d556439499dfdee852c1550c7a16430a Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 6 Mar 2015 23:36:56 +0100 Subject: [PATCH 01/57] Add font sources. Fonts have been created with fony.exe (http://hukka.ncn.fi/?fony) The HD44760_? fonts simulate the fonts of the character based displays. The ISO10646 fonts provide the right size of the standard fonts. Marlin_symbols contains only the the special symbols of the original marlin font. --- Marlin/scripts/Fonts/HD44780_C.fon | Bin 0 -> 4176 bytes Marlin/scripts/Fonts/HD44780_J.fon | Bin 0 -> 4176 bytes Marlin/scripts/Fonts/HD44780_W.fon | Bin 0 -> 4432 bytes Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon | Bin 0 -> 4224 bytes Marlin/scripts/Fonts/ISO10646_Kana.fon | Bin 0 -> 4208 bytes Marlin/scripts/Fonts/Marlin_symbols.fon | Bin 0 -> 784 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Marlin/scripts/Fonts/HD44780_C.fon create mode 100644 Marlin/scripts/Fonts/HD44780_J.fon create mode 100644 Marlin/scripts/Fonts/HD44780_W.fon create mode 100644 Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon create mode 100644 Marlin/scripts/Fonts/ISO10646_Kana.fon create mode 100644 Marlin/scripts/Fonts/Marlin_symbols.fon diff --git a/Marlin/scripts/Fonts/HD44780_C.fon b/Marlin/scripts/Fonts/HD44780_C.fon new file mode 100644 index 0000000000000000000000000000000000000000..00936e2541764768f6d2f027832b19dbf5e361f8 GIT binary patch literal 4176 zcmeH~e~2B`702(!xS6Cej8-Jrpw~9YA|bp=u&*J=)W$F^F&)yNAxQfY*Z5ZA?sT)U z4=FNQDT9a%BC-^bhZGr#ltn}yLCQl!7EuW$ltn}yB4r68uOc!OG5wy;%!`3S{^%e5 zt9SN&=FBH5&!SMPg* z2%HOk|DXPTphzOOo3*t?YixRQx@x0{cXdltwAt!a`I5Hh zuWq`y6wd$N_sC+n_DZQJWUDmoF2FD0H!zqs{dI5$ycM?KUbr6~f=A&AcnUrWGx#)o z9=-%i_!@i@z5~y}58@MZWa zd;<>QyYM{x7_P%F;MZ_kOJdrE@J6^3?uKo67d!~>g&p`XT!N3o96kqMgs;FAcox15 zKY(lS6ZjeY3cAe})fRX?ya~?0+u=TV04DGloQ3nS2cLw`z!zX2{u#aw{|Z;(-{42^ zA8-u+1vj#7w!!W2`*0V$14i)Y@Cf`B?7~I(JNO4!z(2x2!N0%(d<(t@{|-m+0{jww z1B36d{^1UID{R5Na6dc*kHQo16nqqB@M-uwd z(8Jr{9(X5=;bC|`JPA|y7<>vo3zy-`@KyK*9Kv_udH6A0hhM<2;q*1Ee|RI@33tOb zybB(L_reZ*7%subVGf^zFTz*g3Ooznh9AH+_zC^WPOn}NcBI2;?bqBBmHDspP>*`7 z=-c9wqzDwcmt8S3fYR0bXAs(o9L0Uy569UO0}9^EMOH` z+ZxEQ=t#nXc}omt|=^ewvoX z8%=48lz6p8Difr{Cylo}spGTJjff@H#r4$%$=z$yIvq=-PZhQewvIzXAxK;S;hd$+QDeO zICrj8K{CH}j5b=e)kcc}bUpJCSjCmqdQ2_8l=T-yiY0E*i<&NXClcdlBUmzil57Ac zR$^uyM>ZM*1v0=k$OrvK>Pto!%*0jX5nVeSvBK)F|MR~cfhxB%VyxzptVl}i3}HQM zI?{S==uByLiY8Yll4daRk|e4{Z$_nz=|!{u?f&2p^VSD@K^Co`K=q_iu{j@V!^E+z zHCb2Hp(H!u0@hzqmg{9%NN1~WCN^)|JCk$Gxly4 z^(=fO=O(*Cy)=2Ko}DYSPez- zib`tE1Ldwe%|^VI621FweRAcjr9L%hPPbd5Q@8ci<8&M9QZ%b(wdv1Z_55bVO0`mC zvIcRt>c)YjEHA4vH(fT$Cq5?k94jZ*kB8^@s<$ zbX9|5snjK2nMkruPE0$m^3->1l_(ExKcA*)<*A&wTm~zbj=#Jpj}BO|c`=BW?f=tZ zG>q5UwXRZh#5Z&;{e!6z^+#ne)AN$jsHflPa!C_Z>6fZv*R8v5sQz?AjKdVEF-sQ~ YiEeaRTd_|P&+XSMOWSC&R&{ai-yl}Q_5c6? literal 0 HcmV?d00001 diff --git a/Marlin/scripts/Fonts/HD44780_J.fon b/Marlin/scripts/Fonts/HD44780_J.fon new file mode 100644 index 0000000000000000000000000000000000000000..80527ef745b61f93848a98599cd60e1c01fa6680 GIT binary patch literal 4176 zcmeH|e~27K7RPI2+;n0LeV$0rpygeVAR)|2&@}`pHHJ}QY+~?2kh@7-#&_kF4-3J3X1{L7l% zPrrVzs@|(tRj=>d|BV}Q&aKq{*|W|a)6-gj=SLy)x~q<_b8oNy`08ULyFR{p@5JO0 zpU+G`FmvD`KXd;-j!w?pf5hK8dEddrkjm^}%Z@X~&6GY%# z^3?zP`?DemZq_}a-wF$qNLM6H&kI(%RRwDIN0+#4?Pd%~qr1YLcC8H~MeMz5=Uuz^ z?znx=>h_MUTW=U^{ry(cUuD`ox83dk(rRtK@p}FFZGPC}4nG#h4mo16UeI6X+|65j z`@qcj?9r(QHv9bO!NZgH`SIz84oprB`=0NaxQ>3!GDci)WMtH>ac)#Uf7bbmu_rEU zrZ^YQZ|{3xG5q0tOHs(yY1EyD-@zYYGHUuu;0AaNY{6}C2iy(!!GrKHd>9t+S@BEQJ2EY;YPRxj=@{tE_e^@zz5+hd>oeW1^5bl9nQn!@B{b> zJPALCU%~I8TWwLTftSK7;U;(;+zxlb4DN^Ha0+(elkhqC670h_;M?#$xCs9P{|CQ> z%kT%dl54XLu7`huo8k2^z&qex_%}EKXW(P-8Q6m_!+*km!DH}!_;2`MIDn_&ckoA; zT*Uc@8{jpt1-HQ+a5vls55mLnVOYRt;fwH9Si!g8yYNG}1V4pez^`EqSFGjy!^@zD z*TSvvCfJ61;Jxq=%;BT(Y4|*xgRj9i;X7~vegsdz&)_NeEj$B9FXsHi%i%`21&+a6 z;4XL%?7#=%EPNc6@CEn^d>zii%aG>i)|*>#aF2RhA9)Syt<3ufE&QH!YiWVKMb#ZoQ;VuOF)3gh@V# z)?^F8r;@}}Z>IEBUU?Io_qCi1TPuxnJyht~YS~Mok%b9)Iae)~xg_7Q08PrvBrggZ zRHr^ol4VJ0E9=#1YPw=MNf^-z#d3*MYd$qub19-uk8YB7q{C_SYwn54{Ks`@M*Xbm z-Qtp@2o$=PWa2~>qblpNETxiD`@>ii1rZE-vh@bi)kU$~M2}R&e#c@|>eb9*0jtS6 zrbMQ_j-;~JU+DMDhvrqYxXP222AQrb7pplWtxe6MvOv^PlIh}ZnJ&)KEs8wmPutRX zV<=;hGOw{nRfd%LtnpT6F+R&~AeLO4AAL9!CCP-AW>#BCUD$lB_Q2ek%2wA+q>N+DkM^foQR*xLTS!rmKv_E&Z5HR2 zDm5hY8)LL=MXP0t1iG&INUY=hV$7+rJbvp4` zCwBCa>!cO;NPF1nN1dt*|^9j;ZVkV4(g0+P$qG+LKa{i3d_nz7NMGm>m- z#d9E^a^cla9;ieTxxk#E+G=4cl{~1KH(f=uOLE<|Msy^EZcn$uOVZS8Hr9%LtZ;52 zSxnMFw5IXI5^)$aU0Jr9+SzSa>zOYdn2%sqU8k6roUlx%d)mpktICAB71Fuf!20S$ zx1!LS*9p(Lj0#TS1?hC|bye(Ms^aP5bxmh6$LbyW`UaTFCa&U#M%FBrmRw%)XbweL zBbgCzuGT$bMIkOuv*b8#qS8DjX&v(BCH2&XQT6*(H7}h)vcfFMX+KoJ8>u-P3r=GP z()nI6i&{Kqi0!J!C)8yMGuFRWyPfMVm_08#O&wBEIaL;>>#BH@I#s}?IH@#QZIX7( z`+l%qE?r7_x>TRE_yOsMepET1EBf5)%_`R*SWa`*HO(VQu}HuNrI`9h0VdNbz{Bde zuUb-nYZ{TA)HAcM1@*7ig^Awz}&C`j;%*&dI1&2OZETRdQmI*C3B- Ih%@KfPhW_QYXATM literal 0 HcmV?d00001 diff --git a/Marlin/scripts/Fonts/HD44780_W.fon b/Marlin/scripts/Fonts/HD44780_W.fon new file mode 100644 index 0000000000000000000000000000000000000000..e478dbb087ddb18ea673a280e54989d63c91f571 GIT binary patch literal 4432 zcmchae~29A8OPs?>1C3}blQp>Ht1^`WRVc266`eunMw>>iRq9A4MFTC#&{?3ZhA@V zA|j&|8AN0dkwrun5gCd|kRXdlIYi_Tl~608AMFK&*z=HSPJ>G@7{j) zyU+XMdEV!J_8soF!~b>@&bjq^U%24hNT1eHcxe>s-g3_TS#9KflYbjquZ9?kXoN*2{)Jaqf3J zxu?di3qORP!1M4c_#K?wXtBlcD!2{q zfYb11xDVbAd+AD8K@_t zD(7wZ0bGWk!Y|-A(CK-i`yXBbuZA6X1KbVw!VDgU$KV|7!$;wh@LBN(PY>tfBwxvs zSQmQQ%lmmRm0Ipr?FGMFbz9~0#@XAsCilE0^QLKX8xTdEZj*W`pVwZ^lv=H^CezR< z6*n=a*rz^rww^wHiqe!E7qT{a&MJ~^v-Q05`j%y@wk&J(vah~B%sVUAySSwF22)bK zYM9p5j462tO?|0(#&2w%)f8v#O(=rq2X2!PYY2{h=aR%kq?v_@yd2a^WiI7=7NDuT zjPjx&SFw+yXhpU-$*LxfrJ7m%{@_>|F93O z*aoQY7MI2=0)_6SOwQCHsfnJ=CjsYnT7Z)yD72cI{Y*>zs|B3naC~r*le0;hP7tVQ!1?`kNRa_ zx+u;ph5TuDo4+WU(blZjcG48KUeX<#J2Tnt`jL!buKCgVv^$EOMPM5#3KFQ^9-Tz$ z&edwNIcI)DjFzp?YuO@!u5Uh~FfQcO;>)SOG*v9!gjFy=#|%Wm3&%G^N$}id4VT>2y^*&S^J!*pYq-?fEJs{f^X` zc`3&558VYpcnJJzgbZkcDf%_y^`y~K1z z&fd7qJTXt{it>I@lMS-ZnvH8rm zy>7ZU9F2z~dCOH1W$t?}^>%;TT@vZ(6_nO%m0MF9r!?EsAYN1EH`p|8RjD-3Q=N*1 z>(L%e96xhcmCYp!j+m*TU<%c=_M^@90M^@9u|!*Myr#5DYYU?7%@mcl{Mqk>q$d*H z?ipLfwYQ$_Biw%$OHdX|dnc~hEPt)do$K_6?X8lp)_B{pN@_^Ji2|4 zAARVNeM6%U?e%vKJvchDcVy?7zh`K8VC1pAD=%EIyjptGZRf3h9tF-tPycnl>!c)h zWA1r93r#3W=S0=Wx%1ro47XeC&UeYe6?8^+_$qu8z6&SdNANTF6`Y3O!C&Ah z7+paA!)5SlSchxidbkPR3wOZX@KKn-=itlmby&dn;34=4JPeP)Z{UxxgmV^>|8NQP z@LISE-V7UXGrSM(geiOiJ_BEba6fzjz5+YqKUDirZ@o3=^^zpr3Y;XR9((nzPTDtPy^~WlACE7U)ogd-qCIGq zk40Bh&Do60?rxn$j^08^y*S1HM?H|5F zE9$YPcheT6HSS7zBvr5-B_<0gVCjjC2L z!D{O5S0HQcrmVc(ne4P}53Q?ay7HriCYdkKr;2ebeVdx8G9el$%Y5Oq%okQ^Wmy{H zr(>yhV=8m860f;fMS_+1q}nY{fonP%!qmCBPw zt-K{W%MMJ1_-S?(zbG2ir&+IkNtxMt^~SVqXD<7?RwQSbYy0SYsxPWJQ(zyGWdu;Y zO*&EP4i{?jIcNI@jTWuYYtbTru4Q{fVO)r*=}XDKIF^=1omDh-e6VW~KZ{^N{A5`G zyS->8k7J95vNZOD1bLjkIpk)>V4I)+@oz;S_Es;*-QYbZz>%k&`X4!ZP zpIW!RmsmCvpqIq_3e%TSt#o5e3gF!W9;b;7lq`T3bt7 VA?(If3aU6KvbxbQi~C_(-5-T#?F;|_ literal 0 HcmV?d00001 diff --git a/Marlin/scripts/Fonts/ISO10646_Kana.fon b/Marlin/scripts/Fonts/ISO10646_Kana.fon new file mode 100644 index 0000000000000000000000000000000000000000..305ca983fbb18f532b73e642248b1aff0f2f218b GIT binary patch literal 4208 zcmeH|e`pj(6vrnT<7zc*TaiP=j#k=3LO4Z2Dk57^iPj%W3|2(!MWZI7$u^1YAtH-a zS&GOZMS@5PB63J6Qba_Ggd!zK6%i>?M1qJ&E0Ri)MWpt<&+cBE7W}L9ug>0m_PcL> zyf<%VXV+}{)zlbcYUTg(r7@S}uEm3|Mkv+wZ(Xi87babweW_;k_1SHmU41s_?b+Ge zzQ^`%|9Ed#@Af{srfXYoPhZcDe*0lpcSp~seT`Em&rOG3yL`gp!$e?=^VvWBy(^J; zrr#Wvt4;$Y(s54Oa(u0s7-BYWnn}i=(m;ii+Gd(xOkrkCn6#d_V%^%dWh+~!u3W!v zexYe$(?=h)ceiWZ+gj7Qe7&7tC^Wp+BtN^zj%j6^lQC*E*70ZRjd{P(wzT(l^zZH7 z*Iy2drI=SpiV=MH&Js}-rOekXq{;y+s zpfSBZHio}F)fsJ6XP&?qj;mA46gVAPI1es_OJECZg`43H7{Gn-5IhD4;A!|3yajG4%riM8k`05Z~8_QL(}2rR>s@C^JKUV`7jAK;I01pW+vgTF(E*XRv66TSlr za1mSv*TRi(E8Gn~fg$`HegVIP75EMO7Jd(J!k^#+_yopq+-vNAI2~Fz4=#jDU<+)8 zo8b-^zkKj}I0@h7o|HBz@E^LI&a4B33H^3s?1^eLv z7{TN46g&&h!^`k0yaDgP`|vS*2F+CVKb!_#=~ z``M}M`>|a5XiI}ZepG9RhF$9o%`TV{I%> zvQlsp9cKo)7Yh2|NY7A35Dip@qd=4`YJjSO$O*zwJH@Vb9cNUOTky-V>#8jrbsTyW zyl^x^#WJ20sSU)C*yL7n+@jcUn)p@sM5X?ddB})zX_04*OO!+)p<7WZJ1a?4Q5;2) zn8d06s0_o92u8|MR~`{t9EPK5^r$dtcPWWVTBW0Cz*3~PSrX}%i=v|P;Lu=MeaN^{ zG_L4QMLMZ1iiRr#D4ClSjY9tNNxjjPz9`>HUsT0M`PNUp zMSc>WX4fN@Ko;Ng)UVO(IVu8;-c_4)R716B^lX*X5;&!(BsvVw4=4GP-f8|Er&Fe; zwK|hH)bR=}BkE2~I=hl1#-y+Mk@ZPux@)Nc}_W-F=H zY>_}yQXfvzF3G9J7qI_4Phx2)Fp6{?=*$%P(+pO~pD0aWR!hw6V^6aoyVSF!gz#8> zHHeuWon>zS<6q1`_I8`t$rs2oBF(sKi-T6Y$rcx(N_JKpIl9tv=N!N&FOaUF;YC6j zHqu%mWW%R_> zV=7-&a%elljys~wGNoNzcA|Dol=#r_O88BcjP2gku4+t2k*SxWyqi}anUbSM!q-DP zUsd8a>s$5v*9Zb5GxxMdri{GLMc>1gDI=McW-_w8Zi*z&j=V>qK3WYws7RbzvUQV} zP~Wn=aTArxWlBx~IfFx;WmV+{GFy^T{VpUaRh7$Wnv-vZHz;2m2F_G2mnn_KT0Kix zOH?kG*%;YR4!l5S66i2SCRUD7PIX2l?b0lj9_!($(&f;+NC{+`nghKj%9xTPm)Imw z{n3ndRpm?3-IS<}x+gW!Eq+mz>|*)ms1ljZQbej;*-bHfH+K9Yr<9DVDc266C+$X( z`9@9-n}pgD;X}5puis?JWICQKM>d`q9ZT9_sPm3}fd++Y^efNHT-j~Z9e*gyn9`X){09|rYNiv)c1__5& z9z*cp?}xkGK|frqNg67ue6E%nsEQYtk}7JLk;Zo-#HM7%U z3;=xBlk?UIlO*WSA?l?>8B>>Ul*I;f~06*k{Q5Nuxe9OcuEOCaD?M)wMi+lU| zP^P5TrRIs&Zk)+=jRs>hlus2fE(p=B4f5bN78J28mFie<@~|qa=#)DBC~}m$J3(Mq z6-&BU!Iq@gFfBLR7>^}lo8PHZEgzf`9j^s99LGZdfG5iN=?9hPaf`_X#*u&L@sV#VRZtFh|6+EK?!>_+64z{*+Jfs(i=* literal 0 HcmV?d00001 From b14270b029370b4f3ddebe87daf11c07f2d5899b Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 6 Mar 2015 23:48:55 +0100 Subject: [PATCH 02/57] Added font tools --- Marlin/scripts/Fonts/README.fonts | 6 ++++++ Marlin/scripts/Fonts/bdf2u8g.exe | Bin 0 -> 19968 bytes Marlin/scripts/Fonts/make_fonts.bat | 6 ++++++ 3 files changed, 12 insertions(+) create mode 100644 Marlin/scripts/Fonts/README.fonts create mode 100644 Marlin/scripts/Fonts/bdf2u8g.exe create mode 100644 Marlin/scripts/Fonts/make_fonts.bat diff --git a/Marlin/scripts/Fonts/README.fonts b/Marlin/scripts/Fonts/README.fonts new file mode 100644 index 0000000000..976cdb749f --- /dev/null +++ b/Marlin/scripts/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 ' 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/scripts/Fonts/bdf2u8g.exe b/Marlin/scripts/Fonts/bdf2u8g.exe new file mode 100644 index 0000000000000000000000000000000000000000..ab4e3f96dd34f1378d0ca929f86570ad32c10f80 GIT binary patch literal 19968 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 literal 0 HcmV?d00001 diff --git a/Marlin/scripts/Fonts/make_fonts.bat b/Marlin/scripts/Fonts/make_fonts.bat new file mode 100644 index 0000000000..125deb2eb7 --- /dev/null +++ b/Marlin/scripts/Fonts/make_fonts.bat @@ -0,0 +1,6 @@ +.\bdf2u8g.exe -b 1 -e 9 Marlin_symbols.bdf Marlin_symbols dogm_font_data_Marlin_symbols.h +.\bdf2u8g.exe -b 16 -e 255 HD44780_W.bdf HD44780_W_5x7 dogm_font_data_HD44780_W.h +.\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_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 From 16e173e167fd758efdf973ef6542a98b9ccf15d6 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Sat, 7 Mar 2015 00:09:49 +0100 Subject: [PATCH 03/57] Added 5 new font.h files to main directory. The former place of 'dogm_font_data_6x9_marlin.h' was in 'dogm_font_data_m0arlin.h'. Deleted 'dogm_font_data_marlin.h'. --- Marlin/dogm_font_data_6x9_marlin.h | 157 +++++++++ Marlin/dogm_font_data_HD44780_C.h | 171 ++++++++++ Marlin/dogm_font_data_HD44780_J.h | 169 ++++++++++ Marlin/dogm_font_data_HD44780_W.h | 203 ++++++++++++ Marlin/dogm_font_data_ISO10646_5_Cyrillic.h | 173 ++++++++++ Marlin/dogm_font_data_ISO10646_Kana.h | 173 ++++++++++ Marlin/dogm_font_data_Marlin_symbols.h | 22 ++ Marlin/dogm_font_data_marlin.h | 337 -------------------- 8 files changed, 1068 insertions(+), 337 deletions(-) create mode 100644 Marlin/dogm_font_data_6x9_marlin.h create mode 100644 Marlin/dogm_font_data_HD44780_C.h create mode 100644 Marlin/dogm_font_data_HD44780_J.h create mode 100644 Marlin/dogm_font_data_HD44780_W.h create mode 100644 Marlin/dogm_font_data_ISO10646_5_Cyrillic.h create mode 100644 Marlin/dogm_font_data_ISO10646_Kana.h create mode 100644 Marlin/dogm_font_data_Marlin_symbols.h delete mode 100644 Marlin/dogm_font_data_marlin.h diff --git a/Marlin/dogm_font_data_6x9_marlin.h b/Marlin/dogm_font_data_6x9_marlin.h new file mode 100644 index 0000000000..a3b16ecb45 --- /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 0000000000..b4e3ff1977 --- /dev/null +++ b/Marlin/dogm_font_data_HD44780_C.h @@ -0,0 +1,171 @@ +/* + Fontname: HD44780_C + Copyright: A. Hardtung, public domain + Capital A Height: 7, '1' Height: 7 + Calculated Max Values w= 5 h= 8 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=-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[2520] 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,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,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,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,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,112,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,0,120,40,72,136,248,136,5, + 7,7,6,0,0,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,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,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,7,7,6,0,0,112, + 16,240,16,112,16,56,5,7,7,6,0,0,32,112,32,248, + 32,112,32,5,7,7,6,0,0,16,144,80,48,80,144,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,7,7,6,0, + 0,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 0000000000..84f5681618 --- /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 0000000000..2a52429a6a --- /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_5_Cyrillic.h b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h new file mode 100644 index 0000000000..4a9b5802b1 --- /dev/null +++ b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h @@ -0,0 +1,173 @@ +/* + 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[2559] 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,32,0,248,128,240,128,248,5,7,7,6,0,0,80,0, + 248,128,240,128,248,5,7,7,6,0,0,248,128,128,240,136, + 136,240,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,255,160,160,160,184,168,168,184,5, + 7,7,6,0,255,160,160,160,248,168,168,184,4,7,7,6, + 0,255,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,224,64,64,112,72,72,112,5,7,7,6, + 0,0,240,136,136,240,136,136,240,5,7,7,6,0,255,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,255,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,240,136,136,136,240,5, + 7,7,6,0,0,112,136,8,112,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,0,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 0000000000..9970a3823f --- /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 0000000000..9fdb0370c1 --- /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_font_data_marlin.h b/Marlin/dogm_font_data_marlin.h deleted file mode 100644 index 6b83903cfb..0000000000 --- a/Marlin/dogm_font_data_marlin.h +++ /dev/null @@ -1,337 +0,0 @@ -/* - 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}; - -// STB Marlin -/* - Fontname: u8g_font_6x10_marlin - Copyright: Public domain terminal emulator font. Share and enjoy. - Capital A Height: 7, '1' Height: 7 - Calculated Max Values w= 6 h=10 x= 2 y= 7 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 = 7 descent=-2 - X Font ascent = 7 descent=-2 - Max Font ascent = 8 descent=-2 -*/ -#include -const u8g_fntpgm_uint8_t u8g_font_6x10_marlin[2617] U8G_SECTION(".progmem.u8g_font_6x10_marlin") = { - 0,6,9,0,254,7,1,153,3,43,32,255,254,8,254,7, - 254,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128, - 128,128,0,128,3,3,3,6,1,4,160,160,160,5,7,7, - 6,0,0,80,80,248,80,248,80,80,5,7,7,6,0,0, - 32,112,160,112,40,112,32,5,7,7,6,0,0,72,168,80, - 32,80,168,144,5,7,7,6,0,0,64,160,160,64,168,144, - 104,1,3,3,6,2,4,128,128,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,136,80,248,80,136,5, - 5,5,6,0,1,32,32,248,32,32,3,3,3,6,1,255, - 96,64,128,5,1,1,6,0,3,248,3,3,3,6,1,255, - 64,224,64,5,7,7,6,0,0,8,8,16,32,64,128,128, - 5,7,7,6,0,0,32,80,136,136,136,80,32,5,7,7, - 6,0,0,32,96,160,32,32,32,248,5,7,7,6,0,0, - 112,136,8,48,64,128,248,5,7,7,6,0,0,248,8,16, - 48,8,136,112,5,7,7,6,0,0,16,48,80,144,248,16, - 16,5,7,7,6,0,0,248,128,176,200,8,136,112,5,7, - 7,6,0,0,48,64,128,176,200,136,112,5,7,7,6,0, - 0,248,8,16,16,32,64,64,5,7,7,6,0,0,112,136, - 136,112,136,136,112,5,7,7,6,0,0,112,136,152,104,8, - 16,96,3,7,7,6,1,255,64,224,64,0,64,224,64,3, - 7,7,6,1,255,64,224,64,0,96,64,128,4,7,7,6, - 1,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,16,32,32,0,32,5,7,7,6, - 0,0,112,136,152,168,176,128,112,5,7,7,6,0,0,32, - 80,136,136,248,136,136,5,7,7,6,0,0,240,72,72,112, - 72,72,240,5,7,7,6,0,0,112,136,128,128,128,136,112, - 5,7,7,6,0,0,240,72,72,72,72,72,240,5,7,7, - 6,0,0,248,128,128,240,128,128,248,5,7,7,6,0,0, - 248,128,128,240,128,128,128,5,7,7,6,0,0,112,136,128, - 128,152,136,112,5,7,7,6,0,0,136,136,136,248,136,136, - 136,3,7,7,6,1,0,224,64,64,64,64,64,224,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,136,216,168,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,8,8,6,0,255,112, - 136,136,136,136,168,112,8,5,7,7,6,0,0,240,136,136, - 240,160,144,136,5,7,7,6,0,0,112,136,128,112,8,136, - 112,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,80,80,80,32,5,7,7,6,0,0,136,136, - 136,168,168,216,136,5,7,7,6,0,0,136,136,80,32,80, - 136,136,5,7,7,6,0,0,136,136,80,32,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,128, - 128,64,32,16,8,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,255,248,2,2,2,6,2,6,128,64,5,5,5,6,0, - 0,112,8,120,136,120,5,7,7,6,0,0,128,128,176,200, - 136,200,176,5,5,5,6,0,0,112,136,128,136,112,5,7, - 7,6,0,0,8,8,104,152,136,152,104,5,5,5,6,0, - 0,112,136,248,128,112,5,7,7,6,0,0,48,72,64,240, - 64,64,64,5,7,7,6,0,254,120,136,136,120,8,136,112, - 5,7,7,6,0,0,128,128,176,200,136,136,136,3,7,7, - 6,1,0,64,0,192,64,64,64,224,4,9,9,6,1,254, - 16,0,48,16,16,16,144,144,96,5,7,7,6,0,0,128, - 128,136,144,224,144,136,3,7,7,6,1,0,192,64,64,64, - 64,64,224,5,5,5,6,0,0,208,168,168,168,136,5,5, - 5,6,0,0,176,200,136,136,136,5,5,5,6,0,0,112, - 136,136,136,112,5,7,7,6,0,254,176,200,136,200,176,128, - 128,5,7,7,6,0,254,104,152,136,152,104,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,240,64,64,72, - 48,5,5,5,6,0,0,136,136,136,152,104,5,5,5,6, - 0,0,136,136,80,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,7,7, - 6,0,254,136,136,152,104,8,136,112,5,5,5,6,0,0, - 248,16,32,64,248,4,7,7,6,1,0,48,64,32,192,32, - 64,48,1,7,7,6,2,0,128,128,128,128,128,128,128,4, - 7,7,6,1,0,192,32,64,48,64,32,192,5,3,3,6, - 0,4,72,168,144,0,0,0,1,0,0,0,0,0,1,0, - 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0, - 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0, - 0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0, - 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0, - 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0, - 0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0, - 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0, - 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0, - 0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0, - 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0, - 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0, - 0,0,1,0,0,0,0,0,1,0,0,0,0,0,6,0, - 0,1,7,7,6,2,0,128,0,128,128,128,128,128,5,7, - 7,6,0,255,32,120,160,160,160,120,32,5,7,7,6,0, - 0,48,72,64,224,64,72,176,5,5,5,6,0,0,136,112, - 80,112,136,5,8,8,6,0,255,136,136,80,32,248,32,32, - 32,1,7,7,6,2,0,128,128,128,0,128,128,128,5,8, - 8,6,0,255,112,128,224,144,72,56,8,112,3,1,1,6, - 1,7,160,5,7,7,6,0,0,112,136,168,200,168,136,112, - 4,6,6,6,1,1,112,144,176,80,0,240,6,5,5,6, - 0,0,36,72,144,72,36,4,2,2,6,1,2,240,16,4, - 1,1,6,1,3,240,5,7,7,6,0,0,112,136,232,200, - 200,136,112,5,1,1,6,0,7,248,3,3,3,6,1,4, - 64,160,64,5,6,6,6,0,0,32,32,248,32,32,248,4, - 5,5,6,1,3,96,144,32,64,240,4,5,5,6,1,3, - 224,16,96,16,224,2,2,2,6,2,6,64,128,5,6,6, - 6,0,255,136,136,136,200,176,128,5,7,7,6,0,0,120, - 232,232,104,40,40,40,1,1,1,6,2,3,128,2,2,2, - 6,2,254,64,128,3,5,5,6,1,3,64,192,64,64,224, - 4,6,6,6,1,1,96,144,144,96,0,240,6,5,5,6, - 0,0,144,72,36,72,144,6,9,9,6,0,255,64,192,64, - 64,228,12,20,60,4,6,9,9,6,0,255,64,192,64,64, - 232,20,4,8,28,5,9,9,6,0,255,192,32,64,32,200, - 24,40,120,8,5,7,7,6,0,0,32,0,32,32,64,136, - 112,5,8,8,6,0,0,64,32,112,136,136,248,136,136,5, - 8,8,6,0,0,16,32,112,136,136,248,136,136,5,8,8, - 6,0,0,32,80,112,136,136,248,136,136,5,8,8,6,0, - 0,72,176,112,136,136,248,136,136,5,8,8,6,0,0,80, - 0,112,136,136,248,136,136,5,8,8,6,0,0,32,80,112, - 136,136,248,136,136,6,7,7,6,0,0,60,80,144,156,240, - 144,156,5,9,9,6,0,254,112,136,128,128,128,136,112,32, - 64,5,8,8,6,0,0,64,248,128,128,240,128,128,248,5, - 8,8,6,0,0,16,248,128,128,240,128,128,248,5,8,8, - 6,0,0,32,248,128,128,240,128,128,248,5,8,8,6,0, - 0,80,248,128,128,240,128,128,248,3,8,8,6,1,0,128, - 64,224,64,64,64,64,224,3,8,8,6,1,0,32,64,224, - 64,64,64,64,224,3,8,8,6,1,0,64,160,224,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,240,72,72,232,72,72,240,5,8, - 8,6,0,0,40,80,136,200,168,152,136,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, - 112,136,136,136,136,112,5,8,8,6,0,0,40,80,112,136, - 136,136,136,112,5,8,8,6,0,0,80,0,112,136,136,136, - 136,112,5,5,5,6,0,0,136,80,32,80,136,5,7,7, - 6,0,0,112,152,152,168,200,200,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,136,80,32,32,32, - 5,7,7,6,0,0,128,240,136,240,128,128,128,5,7,7, - 6,0,0,112,136,144,160,144,136,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,40,80,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,6,5,5, - 6,0,0,120,20,124,144,124,5,7,7,6,0,254,112,136, - 128,136,112,32,64,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,192,64,64,64,224,3,8,8,6,1,0, - 64,128,0,192,64,64,64,224,3,8,8,6,1,0,64,160, - 0,192,64,64,64,224,6,10,10,6,0,254,164,168,0,252, - 132,128,128,128,132,252,6,10,10,6,0,254,84,148,0,252, - 132,4,4,4,132,252,5,8,8,6,0,0,40,80,0,176, - 200,136,136,136,5,8,8,6,0,0,64,32,0,112,136,136, - 136,112,4,10,10,6,2,254,48,64,128,144,144,144,144,144, - 144,144,4,10,10,6,0,254,192,32,16,144,144,144,144,144, - 144,144,6,7,7,6,0,1,68,140,140,132,128,64,60,6, - 7,7,6,0,1,136,196,196,132,4,8,240,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,224,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,80,32,5,9,9,6,0, - 255,224,128,192,176,168,168,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}; - From 713626827393113684da673d85595c606adf6f66 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Sat, 7 Mar 2015 00:26:28 +0100 Subject: [PATCH 04/57] Added 'dogm_font_data_6x10_marlin_Kanji.h' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is copied from http://www.thingiverse.com/thing:664397 // Japanese Original font // Version 0.1 by ichibey // // 営利目的で利用する際は、かならず許可を得てください。非営利の場合は、CCライセンスに従い使用ください。 // http://creativecommons.org/licenses/by-nc/2.1/jp/legalcode This font is very special. It uses a mixture of katakana an kanji symbols, uses multi character symbols and is only addressable by '\xxx' sequences. --- Marlin/dogm_font_data_6x10_marlin_Kanji.h | 189 ++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 Marlin/dogm_font_data_6x10_marlin_Kanji.h diff --git a/Marlin/dogm_font_data_6x10_marlin_Kanji.h b/Marlin/dogm_font_data_6x10_marlin_Kanji.h new file mode 100644 index 0000000000..54c8219703 --- /dev/null +++ b/Marlin/dogm_font_data_6x10_marlin_Kanji.h @@ -0,0 +1,189 @@ +/* + Fontname : Japanese Original font, Version 0.1 + Author : http://www.thingiverse.com/ichibey + License : Creative Commons BY-NC +*/ +#include +const u8g_fntpgm_uint8_t u8g_font_6x10_marlin[2911] U8G_SECTION(".progmem.u8g_font_6x10_marlin") = { + 0,6,10,0,254,7,1,153,3,43,32,255,254,8,254,7, + 254,0,0,0,6,0,8,1,7,7,6,2,0,128,128,128, + 128,128,0,128,3,3,3,6,1,4,160,160,160,5,7,7, + 6,0,0,80,80,248,80,248,80,80,5,7,7,6,0,0, + 32,112,160,112,40,112,32,5,7,7,6,0,0,72,168,80, + 32,80,168,144,5,7,7,6,0,0,64,160,160,64,168,144, + 104,1,3,3,6,2,4,128,128,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,136,80,248,80,136,5, + 5,5,6,0,1,32,32,248,32,32,3,3,3,6,1,255, + 96,64,128,5,1,1,6,0,3,248,3,3,3,6,1,255, + 64,224,64,5,7,7,6,0,0,8,8,16,32,64,128,128, + 5,7,7,6,0,0,112,152,168,168,168,200,112,5,7,7, + 6,0,0,32,96,32,32,32,32,248,5,7,7,6,0,0, + 112,136,8,112,128,128,248,5,7,7,6,0,0,112,136,8, + 48,8,136,112,5,7,7,6,0,0,112,144,144,144,248,16, + 16,5,7,7,6,0,0,248,128,240,8,8,136,112,5,7, + 7,6,0,0,112,136,128,240,136,136,112,5,7,7,6,0, + 0,248,8,8,16,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, + 136,112,3,7,7,6,1,0,64,224,64,0,64,224,64,3, + 7,7,6,1,0,64,224,64,0,96,64,128,4,7,7,6, + 1,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,16,32,32,0,32,5,7,7,6, + 0,0,112,136,152,168,176,128,112,5,7,7,6,0,0,112, + 136,136,136,248,136,136,5,7,7,6,0,0,240,136,136,240, + 136,136,240,5,7,7,6,0,0,112,136,128,128,128,136,112, + 5,7,7,6,0,0,240,136,136,136,136,136,240,5,7,7, + 6,0,0,248,128,128,240,128,128,248,5,7,7,6,0,0, + 248,128,128,240,128,128,128,5,7,7,6,0,0,112,136,128, + 152,136,136,112,5,7,7,6,0,0,136,136,136,248,136,136, + 136,3,7,7,6,1,0,224,64,64,64,64,64,224,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,136,216,168,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,8,8,6,0,255,112, + 136,136,136,136,168,112,8,5,7,7,6,0,0,240,136,136, + 240,136,136,136,5,7,7,6,0,0,112,136,128,112,8,136, + 112,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,80,80,80,32,5,7,7,6,0,0,136,136, + 136,168,168,216,136,5,7,7,6,0,0,136,136,80,32,80, + 136,136,5,7,7,6,0,0,136,136,80,32,32,32,32,5, + 7,7,6,0,0,248,8,80,32,80,128,248,3,7,7,6, + 1,0,224,128,128,128,128,128,224,5,7,7,6,0,0,128, + 128,64,32,16,8,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,255,248,2,2,2,6,2,6,128,64,5,5,5,6,0, + 0,112,8,120,136,120,5,7,7,6,0,0,128,128,240,136, + 136,136,240,5,5,5,6,0,0,112,136,128,136,112,5,7, + 7,6,0,0,8,8,120,136,136,136,120,5,5,5,6,0, + 0,112,136,248,128,120,4,7,7,6,0,0,48,64,64,240, + 64,64,64,5,7,7,6,0,254,120,136,136,120,8,8,112, + 5,7,7,6,0,0,128,128,240,136,136,136,136,3,7,7, + 6,1,0,64,0,192,64,64,64,224,4,9,9,6,1,254, + 16,0,48,16,16,16,16,16,224,5,7,7,6,0,0,128, + 128,136,144,224,144,136,3,7,7,6,1,0,192,64,64,64, + 64,64,224,5,5,5,6,0,0,240,168,168,168,168,5,5, + 5,6,0,0,240,136,136,136,136,5,5,5,6,0,0,112, + 136,136,136,112,5,7,7,6,0,254,240,136,136,136,240,128, + 128,5,7,7,6,0,254,120,136,136,136,120,8,8,5,5, + 5,6,0,0,176,200,128,128,128,5,5,5,6,0,0,112, + 128,112,8,240,4,7,7,6,0,0,64,64,240,64,64,64, + 48,5,5,5,6,0,0,136,136,136,136,120,5,5,5,6, + 0,0,136,136,80,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,7,7, + 6,0,254,136,136,136,120,8,136,112,5,5,5,6,0,0, + 248,16,32,64,248,6,9,9,6,0,255,240,240,240,128,156, + 136,156,136,136,4,9,9,6,0,255,240,240,240,16,208,144, + 208,144,144,5,9,9,6,0,255,112,112,0,248,0,112,112, + 32,248,5,3,3,6,0,4,72,168,144,4,9,9,6,1, + 255,240,16,32,64,32,32,32,32,64,6,9,9,6,0,255, + 4,228,4,228,0,20,36,36,204,5,9,9,6,0,255,224, + 32,224,224,0,240,208,208,248,6,8,8,6,0,255,60,40, + 60,44,32,76,68,156,4,9,9,6,0,255,128,240,32,240, + 224,0,240,64,176,5,9,9,6,0,255,32,32,248,32,48, + 96,160,160,32,5,9,9,6,0,255,248,168,248,168,248,32, + 32,32,32,6,9,9,6,0,255,112,32,252,112,168,160,32, + 32,32,5,9,9,6,0,255,112,144,80,32,120,136,40,16, + 96,6,9,9,6,0,255,112,0,252,120,120,120,32,120,240, + 5,9,9,6,0,255,32,32,248,168,168,248,32,32,32,6, + 9,9,6,0,255,16,220,40,204,8,236,4,124,4,4,7, + 7,6,0,0,224,128,192,128,224,0,240,6,9,9,6,0, + 255,16,124,16,28,16,252,36,76,28,4,9,9,6,0,255, + 128,224,128,128,128,240,64,32,128,5,9,9,6,0,255,32, + 248,32,248,248,248,32,248,32,5,9,9,6,0,255,32,32, + 32,248,168,248,168,168,248,6,9,9,6,0,255,36,44,36, + 76,228,168,44,44,36,4,9,9,6,0,255,32,240,32,240, + 0,240,80,240,80,5,9,9,6,0,255,112,16,32,248,40, + 48,32,32,96,5,9,9,6,0,255,32,64,248,136,248,136, + 248,136,248,6,9,9,6,0,255,32,116,112,116,112,120,128, + 40,72,4,9,9,6,0,255,128,224,160,160,224,176,0,160, + 144,6,9,9,6,0,255,4,8,16,32,92,132,28,4,60, + 4,8,8,6,0,255,128,64,32,208,0,128,0,224,6,9, + 9,6,0,255,60,32,44,40,44,76,64,136,136,5,9,9, + 6,0,255,248,128,240,16,240,240,128,144,144,5,9,9,6, + 1,255,8,8,8,120,64,120,0,80,144,4,8,8,6,0, + 255,192,0,224,32,224,0,160,144,6,9,9,6,0,255,36, + 252,120,120,172,60,4,20,124,4,8,8,6,0,255,240,160, + 192,48,192,128,0,224,5,9,9,6,0,255,32,248,112,112, + 112,248,168,32,96,5,9,9,6,0,255,248,200,232,200,232, + 136,232,232,152,6,9,9,6,0,255,60,4,60,36,44,36, + 252,32,32,4,9,9,6,0,255,224,0,224,32,160,32,240, + 32,96,5,9,9,6,0,255,112,32,248,32,248,248,248,32, + 32,6,9,9,6,0,255,96,32,32,80,80,144,136,8,4, + 5,9,9,6,1,255,8,248,128,152,0,56,16,16,32,4, + 8,8,6,0,255,240,16,128,0,192,128,144,224,5,7,7, + 6,0,0,248,8,248,8,8,48,192,4,5,5,6,1,0, + 240,16,80,64,128,4,5,5,6,1,0,48,64,160,32,32, + 5,5,5,6,0,0,32,248,136,16,96,5,4,4,6,0, + 0,112,32,32,248,4,5,5,6,1,0,32,240,96,160,160, + 4,5,5,6,1,0,64,240,80,64,64,4,4,4,6,1, + 0,224,32,32,240,4,5,5,6,1,0,240,16,112,16,240, + 5,4,4,6,0,0,168,168,8,112,5,1,1,6,0,3, + 248,5,7,7,6,0,0,248,8,40,48,32,64,128,4,7, + 7,6,0,0,16,48,96,160,32,32,32,5,7,7,6,0, + 0,32,248,136,8,16,16,96,5,6,6,6,0,0,112,32, + 32,32,32,248,5,7,7,6,0,0,16,248,48,80,80,144, + 16,5,7,7,6,0,0,64,248,72,72,72,136,152,5,7, + 7,6,0,0,32,240,32,32,248,32,32,5,7,7,6,0, + 0,120,136,136,8,16,16,96,5,7,7,6,0,0,128,248, + 144,16,16,16,96,4,7,7,6,1,0,240,16,16,16,16, + 16,240,5,7,7,6,0,0,80,248,80,16,16,16,96,5, + 7,7,6,0,0,232,8,232,8,8,16,96,5,7,7,6, + 0,0,248,8,16,32,80,136,136,5,8,8,6,0,0,64, + 64,248,72,72,64,64,56,5,7,7,6,0,0,136,136,72, + 8,16,16,96,5,8,8,6,0,0,128,248,136,136,104,24, + 16,224,5,7,7,6,0,0,120,16,16,248,16,16,224,5, + 7,7,6,0,0,168,168,168,8,16,16,224,5,7,7,6, + 0,0,112,0,248,16,16,16,96,4,7,7,6,1,0,128, + 128,192,160,144,128,128,5,7,7,6,0,0,16,248,16,16, + 32,32,192,5,6,6,6,0,0,112,0,0,0,0,248,5, + 7,7,6,0,0,120,8,8,80,32,80,136,5,8,8,6, + 0,0,32,120,8,48,112,168,168,32,4,6,6,6,1,1, + 16,16,32,32,64,128,5,6,6,6,0,1,32,16,136,136, + 136,8,5,7,7,6,0,0,128,152,224,128,128,128,120,5, + 7,7,6,0,0,248,8,8,8,16,16,96,5,7,7,6, + 0,0,32,32,80,144,136,8,8,5,7,7,6,0,0,32, + 248,32,32,168,168,168,5,7,7,6,0,0,248,8,8,80, + 32,16,8,5,7,7,6,0,0,112,0,96,0,0,240,8, + 5,7,7,6,0,0,32,64,64,128,136,248,8,5,7,7, + 6,0,0,8,8,80,48,40,72,128,5,7,7,6,0,0, + 240,64,64,248,64,64,56,5,7,7,6,0,0,64,248,72, + 72,80,64,64,5,6,6,6,0,0,112,16,16,16,16,248, + 5,7,7,6,0,0,248,8,8,120,8,8,248,5,7,7, + 6,0,0,112,0,248,8,8,16,96,4,7,7,6,1,0, + 144,144,144,16,16,16,96,5,7,7,6,0,0,32,160,160, + 160,168,168,48,5,7,7,6,0,0,128,128,128,136,136,144, + 224,5,7,7,6,0,0,248,136,136,136,136,136,248,5,7, + 7,6,0,0,248,136,136,8,16,16,96,5,6,6,6,0, + 0,200,8,8,8,48,192,5,2,2,6,0,5,144,72,4, + 4,4,6,0,4,96,144,144,96,6,9,9,6,0,254,56, + 68,64,132,136,252,8,8,4,6,7,7,6,0,255,112,136, + 136,148,252,148,136,3,3,3,6,0,1,192,32,224,5,9, + 9,6,0,255,64,248,64,120,72,168,144,168,72,6,9,9, + 6,0,255,56,72,16,248,216,136,252,80,136,4,7,7,6, + 0,255,240,144,144,144,144,240,16,5,9,9,6,0,255,64, + 240,64,240,240,224,80,72,248,5,9,9,6,1,255,120,8, + 248,168,168,56,56,56,8,5,10,10,6,0,254,240,0,248, + 72,72,224,224,224,0,240,6,9,9,6,0,255,28,208,20, + 20,212,20,16,84,212,5,9,9,6,0,255,248,64,240,240, + 240,240,64,80,80,5,9,9,6,1,255,8,8,120,32,192, + 56,8,48,192,4,7,7,6,0,255,224,64,48,192,0,192, + 48,5,9,9,6,1,255,64,72,0,224,32,32,72,64,184, + 4,9,9,6,0,255,160,240,64,240,64,160,16,0,240,5, + 9,9,6,0,255,64,248,32,248,16,112,128,128,120,0,0, + 0,6,0,8,4,9,9,6,1,255,96,0,240,96,96,96, + 240,144,240,5,9,9,6,0,255,240,144,152,0,248,80,32, + 80,136,5,9,9,6,1,255,8,248,128,56,8,8,72,120, + 128,4,8,8,6,0,255,240,16,192,0,192,0,0,240,6, + 6,6,6,0,1,4,224,172,228,160,228,4,9,9,6,0, + 255,128,192,128,240,224,32,160,32,96,6,8,8,6,0,255, + 16,16,16,28,80,80,80,252,5,9,9,6,0,255,64,240, + 200,136,136,136,152,120,16,5,8,8,6,0,0,224,248,136, + 136,136,136,136,248,6,7,7,6,0,0,32,48,56,252,56, + 48,32,6,7,7,6,0,1,16,56,124,16,16,16,240,5, + 9,9,6,0,255,32,112,168,168,184,136,136,112,32,5,10, + 10,6,0,254,224,128,192,128,176,40,40,48,40,40,5,10, + 10,6,0,254,248,168,136,136,136,136,136,136,168,248,255}; From 2d5134b0ed2492cbe2d6c1de939974ed3eda1051 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 10 Mar 2015 17:46:25 +0100 Subject: [PATCH 05/57] Introduce - clean - prepae language files --- Marlin/language.h | 93 +++++------------------ Marlin/language_an.h | 8 +- Marlin/language_ca.h | 11 ++- Marlin/language_de.h | 30 ++++---- Marlin/language_en.h | 12 ++- Marlin/language_es.h | 8 +- Marlin/language_eu.h | 8 +- Marlin/language_fi.h | 52 +++++++------ Marlin/language_fr.h | 10 ++- Marlin/language_it.h | 8 +- Marlin/language_kana.h | 141 ++++++++++++++++++++++++++++++++++ Marlin/language_kana_utf8.h | 145 +++++++++++++++++++++++++++++++++++ Marlin/language_kanji.h | 147 ++++++++++++++++++++++++++++++++++++ Marlin/language_nl.h | 8 +- Marlin/language_pl.h | 10 ++- Marlin/language_pt-br.h | 32 ++++---- Marlin/language_pt.h | 32 ++++---- Marlin/language_ru.h | 2 +- 18 files changed, 580 insertions(+), 177 deletions(-) create mode 100644 Marlin/language_kana.h create mode 100644 Marlin/language_kana_utf8.h create mode 100644 Marlin/language_kanji.h diff --git a/Marlin/language.h b/Marlin/language.h index f894a27efd..330bb3c91f 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -13,20 +13,23 @@ // ==> ALSO TRY ALL AVAILABLE LANGUAGE OPTIONS // 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 +// kanji Japanese #ifndef LANGUAGE_INCLUDE // pick your language from the list above @@ -198,68 +201,6 @@ #define MSG_MAXTEMP_BED_OFF "Heated bed" MSG_SWITCHED_OFF_MAX // 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" - #endif - #ifdef 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 -#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 e26c7d8682..6155d5742c 100644 --- a/Marlin/language_an.h +++ b/Marlin/language_an.h @@ -8,6 +8,8 @@ #ifndef LANGUAGE_AN_H #define LANGUAGE_AN_H +#define MAPPER_NON + #define WELCOME_MSG MACHINE_NAME " parada." #define MSG_SD_INSERTED "Tarcheta colocada" #define MSG_SD_REMOVED "Tarcheta retirada" @@ -46,9 +48,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 e7f837d5d3..2627438ece 100644 --- a/Marlin/language_ca.h +++ b/Marlin/language_ca.h @@ -8,6 +8,9 @@ #ifndef LANGUAGE_CA_H #define LANGUAGE_CA_H +//#define MAPPER_NON +#define MAPPER_C2C3 // because of "ó" + #define WELCOME_MSG MACHINE_NAME " preparada." #define MSG_SD_INSERTED "SD detectada." #define MSG_SD_REMOVED "SD expulsada." @@ -46,9 +49,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 +79,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 d41df208df..d2eb6d34d5 100644 --- a/Marlin/language_de.h +++ b/Marlin/language_de.h @@ -8,26 +8,28 @@ #ifndef LANGUAGE_DE_H #define LANGUAGE_DE_H +#define MAPPER_C2C3 + #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 +42,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 +77,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 1ba950af9b..42e9f0b1c4 100644 --- a/Marlin/language_en.h +++ b/Marlin/language_en.h @@ -8,6 +8,10 @@ #ifndef LANGUAGE_EN_H #define LANGUAGE_EN_H +#if !(defined(MAPPER_NON) || defined(MAPPER_C2C3) || defined(MAPPER_D0D1_MOD) || defined(MAPPER_E382E383)) + #define MAPPER_NON // For direct asci codes +#endif + #ifndef WELCOME_MSG #define WELCOME_MSG MACHINE_NAME " ready." #endif @@ -156,13 +160,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" @@ -255,7 +259,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 2d7b785bdf..d6a38d3cee 100644 --- a/Marlin/language_es.h +++ b/Marlin/language_es.h @@ -8,6 +8,8 @@ #ifndef LANGUAGE_ES_H #define LANGUAGE_ES_H +#define MAPPER_NON + #define WELCOME_MSG MACHINE_NAME " lista." #define MSG_SD_INSERTED "Tarjeta colocada" #define MSG_SD_REMOVED "Tarjeta retirada" @@ -46,9 +48,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 0f615d5a37..f4857ccfb1 100644 --- a/Marlin/language_eu.h +++ b/Marlin/language_eu.h @@ -8,6 +8,8 @@ #ifndef LANGUAGE_EU_H #define LANGUAGE_EU_H +#define MAPPER_NON + #define WELCOME_MSG MACHINE_NAME " prest." #define MSG_SD_INSERTED "Txartela sartuta" #define MSG_SD_REMOVED "Txartela kenduta" @@ -46,9 +48,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 62fdc76382..76dcb882d5 100644 --- a/Marlin/language_fi.h +++ b/Marlin/language_fi.h @@ -8,6 +8,8 @@ #ifndef LANGUAGE_FI_H #define LANGUAGE_FI_H +#define MAPPER_C2C3 + #define WELCOME_MSG MACHINE_NAME " valmis." #define MSG_SD_INSERTED "Kortti asetettu" #define MSG_SD_REMOVED "Kortti poistettu" @@ -17,21 +19,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 +48,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 +75,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 +86,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 +102,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 8019f96a5b..4c443f90d5 100644 --- a/Marlin/language_fr.h +++ b/Marlin/language_fr.h @@ -8,6 +8,8 @@ #ifndef LANGUAGE_FR_H #define LANGUAGE_FR_H +#define MAPPER_NON + #define WELCOME_MSG MACHINE_NAME " prete." #define MSG_SD_INSERTED "Carte inseree" #define MSG_SD_REMOVED "Carte retiree" @@ -46,9 +48,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 +78,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 b0b644231c..0cb0dc94df 100644 --- a/Marlin/language_it.h +++ b/Marlin/language_it.h @@ -8,6 +8,8 @@ #ifndef LANGUAGE_IT_H #define LANGUAGE_IT_H +#define MAPPER_NON + #define WELCOME_MSG MACHINE_NAME " pronto." #define MSG_SD_INSERTED "SD Card inserita" #define MSG_SD_REMOVED "SD Card rimossa" @@ -46,9 +48,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 0000000000..050ebd5c5b --- /dev/null +++ b/Marlin/language_kana.h @@ -0,0 +1,141 @@ +/** + * Japanese (Kana) + * + * LCD Menu Messages + * Please note these are limited to 17 characters! + * + */ + +#ifndef LANGUAGE_KANA_H +#define LANGUAGE_KANA_H + +#define MAPPER_NON + +// 片仮名表示定義 +#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" + +#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: " + +#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 0000000000..9b74986f8e --- /dev/null +++ b/Marlin/language_kana_utf8.h @@ -0,0 +1,145 @@ +/** + * Japanese (Kana UTF8 version) + * + * LCD Menu Messages + * Please note these are limited to 17 characters! + * + */ + +#ifndef LANGUAGE_KANA_UTF_H +#define LANGUAGE_KANA_UTF_H + +#define MAPPER_E382E383 + +// 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" + +#define MSG_HEATING "セネシチユウ..." // "Heating..." +#define MSG_HEATING_COMPLETE "セネシセンリxョウ" // "Heating done." +#define MSG_BED_HEATING "ヘ゛ツト゛セネシチユウ" // "Bed Heating." 5C 33 34 33 +#define MSG_BED_DONE "ヘ゛ツト゛セネシセンリxョウ" // "Bed done." +#define MSG_ENDSTOPS_HIT "endstops hit: " + +#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_kanji.h b/Marlin/language_kanji.h new file mode 100644 index 0000000000..d2e8546912 --- /dev/null +++ b/Marlin/language_kanji.h @@ -0,0 +1,147 @@ +/** + * Japanese (Kanji) + * + * LCD Menu Messages + * Please note these are limited to 17 characters! + * + */ +#ifndef DOGLCD + #include "language_kana.h" // fallback to kana + #define LANGUAGE_KANJI_H +#endif + +#ifndef LANGUAGE_KANJI_H +#define LANGUAGE_KANJI_H + +#define MAPPER_NON +#define DISPLAY_CHARSET_KANJI + +// HINT FOR ichibey; YOU CAN NOW MAKE USE OF THE LAST 8 SYMBOLS FOR YOUT PURPOSE, SINCE THE MARLIN_SYMBOLS NOW HAVE THEIR OWN FONT: + +// 漢字混じり表示 +#define WELCOME_MSG MACHINE_NAME "\x8a\x8b\x90\x91\xa4\xa5\x7f" // "ready." +#define MSG_SD_INSERTED "SD\xb6\xb0\xc4\xde\x20\x84\xa2\xa3\xbb\xda\xcf\xbc\xc0" // "Card inserted" +#define MSG_SD_REMOVED "SD\xb6\xb0\xc4\xde\x20\x84\xe3\xb6\xda\xcf\xbc\xc0" // "Card removed" +#define MSG_MAIN "\xd2\xb2\xdd" // "Main" +#define MSG_AUTOSTART "\x93\x88\xb6\xb6\xb2\xbc" // "Autostart" +#define MSG_DISABLE_STEPPERS "\xd3\xb0\xc0\xb0\xe7\xe8\xe9\xea\x20\xb5\xcc" // "Disable steppers" +#define MSG_AUTO_HOME "\x98\x99\x9a\x9b\xcd \x86\x87\x88\xb6" // "Auto home" +#define MSG_SET_HOME_OFFSETS "\x8c\x8d\x8a\x8b\xb5\xcc\xbe\xaf\xc4\xf1\xf2\xf3\xf4" // "Set home offsets" +#define MSG_SET_ORIGIN "\x8c\x8d\x8a\x8b\xbe\xaf\xc4" // "Set origin" +#define MSG_PREHEAT_PLA "PLA \x92\x94\x95" // "Preheat PLA" +#define MSG_PREHEAT_PLA_N MSG_PREHEAT_PLA " " +#define MSG_PREHEAT_PLA_ALL MSG_PREHEAT_PLA " \x96\x97\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 \x92\x94\x95" // "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\xe5\x94\x95\xb2\x9e\xf7" // "Cooldown" +#define MSG_SWITCH_PS_ON "\xe7\xe8\xe9\xea\x20\xb5\xdd" // "Switch power on" +#define MSG_SWITCH_PS_OFF "\xe7\xe8\xe9\xea\x20\xb5\xcc" // "Switch power off" +#define MSG_EXTRUDE "\x84\x85\xbc\xc0\xde\xbc" // "Extrude" +#define MSG_RETRACT "\xd8\xc4\xd7\xb8\xc4" // "Retract" +#define MSG_MOVE_AXIS "\x8e\x8f\x86\x87\x88\xb6" // "Move axis" +#define MSG_MOVE_X "X\x8e\x8f\x86\x87\x88\xb6" // "Move X" +#define MSG_MOVE_Y "Y\x8e\x8f\x86\x87\x88\xb6" // "Move Y" +#define MSG_MOVE_Z "Z\x8e\x8f\x86\x87\x88\xb6" // "Move Z" +#define MSG_MOVE_E "\xb4\xb8\xbd\xc4\xd9\xb0\xc0\xde\xb0" // "Extruder" +#define MSG_MOVE_01MM "0.1mm \x86\x87\x88\xb6" // "Move 0.1mm" +#define MSG_MOVE_1MM " 1mm \x86\x87\x88\xb6" // "Move 1mm" +#define MSG_MOVE_10MM " 10mm \x86\x87\x88\xb6" // "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\xed\xe6\x82\x83" // "Fan speed" +#define MSG_FLOW "\xed\xee\xd8\x7d" // "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 "\x93\x88\xb6\x80\x81\x82\x83" // "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\xe5\xed\xe6\x82\x83" // "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 "\x80\x81\x82\x83" // "Temperature" +#define MSG_MOTION "\x88\xb6\xef\xf1\xf2\xf3\xf4" // "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 "\xf1\xf2\xf3\xf4\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 "\x8a\x8b\x90\x91\xf1\xf2\xf3\xf4" // "Prepare" +#define MSG_TUNE "\xf1\x9f\x9c\x9d" // "Tune" +#define MSG_PAUSE_PRINT "\xb0\xf5\xf6\xb2\x9e\xf7" // "Pause print" +#define MSG_RESUME_PRINT "\xcc\xdf\xd8\xdd\xc4 \xa0\xa1\x7b\x7c" // "Resume print" +#define MSG_STOP_PRINT "\xcc\xdf\xd8\xdd\xc4 \xb2\x9e\xf7" // "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 \xa0\xa1\x7b\x7c" // "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 "\x88\xb6\xb7\xcf\xbe\xdd" // "No move." +#define MSG_KILLED "\xbc\xae\xb3\xb7\xae" // "KILLED. " +#define MSG_STOPPED "\xb2\x9e\xf7\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\xeb\xec\x84\xe4" // "Change filament" +#define MSG_INIT_SDCARD "SD\xb6\xb0\xc4\xde\\xa0\xa1\xd6\xd0\xba\xd0" // "Init. SD card" +#define MSG_CNG_SDCARD "SD\xb6\xb0\xc4\xde\xeb\xec\x84\xe4" // "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" +#define MSG_HEATING "\xb6\xe5\x94\x95\x89..." // "Heating..." +#define MSG_HEATING_COMPLETE "\xb6\xe5\x94\x95\xa4\xa5\x7f" // "Heating done." +#define MSG_BED_HEATING "\xcd\xde\xaf\xc4\xde\xb6\xe5\x94\x95\x89" // "Bed Heating." +#define MSG_BED_DONE "\xcd\xde\xaf\xc4\xde\xb6\xe5\x94\x95\xa4\xa5\x7f" // "Bed done." +#define MSG_ENDSTOPS_HIT "endstops hit: " + +#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_JP2_H diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h index 7de2f9a8e2..f691fe6fb9 100644 --- a/Marlin/language_nl.h +++ b/Marlin/language_nl.h @@ -8,6 +8,8 @@ #ifndef LANGUAGE_NL_H #define LANGUAGE_NL_H +#define MAPPER_NON + #define WELCOME_MSG MACHINE_NAME " gereed." #define MSG_SD_INSERTED "Kaart ingestoken" #define MSG_SD_REMOVED "Kaart verwijderd" @@ -46,9 +48,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 93ccf4046b..e8d74100af 100644 --- a/Marlin/language_pl.h +++ b/Marlin/language_pl.h @@ -8,6 +8,8 @@ #ifndef LANGUAGE_PL_H #define LANGUAGE_PL_H +#define MAPPER_NON + #define WELCOME_MSG MACHINE_NAME " gotowy." #define MSG_SD_INSERTED "Karta wlozona" #define MSG_SD_REMOVED "Karta usunieta" @@ -46,9 +48,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 +86,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 924b6e4db5..f15627a050 100644 --- a/Marlin/language_pt-br.h +++ b/Marlin/language_pt-br.h @@ -8,10 +8,12 @@ #ifndef LANGUAGE_PT_BR_H #define LANGUAGE_PT_BR_H +#define MAPPER_NON + #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 +22,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 +43,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 +78,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 +86,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 90c4b5c6c2..17e4c33076 100644 --- a/Marlin/language_pt.h +++ b/Marlin/language_pt.h @@ -8,10 +8,12 @@ #ifndef LANGUAGE_PT_H #define LANGUAGE_PT_H +#define MAPPER_NON + #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 +22,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 +43,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 +78,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 +86,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 bcab50b796..42c974fa18 100644 --- a/Marlin/language_ru.h +++ b/Marlin/language_ru.h @@ -8,7 +8,7 @@ #ifndef LANGUAGE_RU_H #define LANGUAGE_RU_H -#define LANGUAGE_RU +#define MAPPER_D0D1 // For Cyrillic #define WELCOME_MSG MACHINE_NAME " Готов." #define MSG_SD_INSERTED "Карта вставлена" From 901cf203fea3922366ce02218dc9b249ae97ee91 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 10 Mar 2015 17:49:16 +0100 Subject: [PATCH 06/57] Add legal stuff to marlin_kanji.h --- Marlin/dogm_font_data_6x10_marlin_Kanji.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Marlin/dogm_font_data_6x10_marlin_Kanji.h b/Marlin/dogm_font_data_6x10_marlin_Kanji.h index 54c8219703..bc8dc6b1d1 100644 --- a/Marlin/dogm_font_data_6x10_marlin_Kanji.h +++ b/Marlin/dogm_font_data_6x10_marlin_Kanji.h @@ -2,6 +2,9 @@ Fontname : Japanese Original font, Version 0.1 Author : http://www.thingiverse.com/ichibey License : Creative Commons BY-NC + + 営利目的で利用する際は、かならず許可を得てください。非営利の場合は、CCライセンスに従い使用ください。 + http://creativecommons.org/licenses/by-nc/2.1/jp/legalcode */ #include const u8g_fntpgm_uint8_t u8g_font_6x10_marlin[2911] U8G_SECTION(".progmem.u8g_font_6x10_marlin") = { From 6d575b1bc770c6ebed3d5f1ca52a1ff99cda5197 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 10 Mar 2015 17:55:59 +0100 Subject: [PATCH 07/57] Add some documentation. --- Documentation/LCDLanguageFont.md | 125 +++++++++++++++++++++++++++++++ README.md | 1 + 2 files changed, 126 insertions(+) create mode 100644 Documentation/LCDLanguageFont.md diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md new file mode 100644 index 0000000000..a06b39160a --- /dev/null +++ b/Documentation/LCDLanguageFont.md @@ -0,0 +1,125 @@ +# LCD Language Font System + +We deal with a variety of differend displays. +And we try to display different languages on them. +This system is ought to solve some of the related problems. + +## The Displays +We have two different technologys for the displays: + +* Character based displays + Have a fixed set of symbols (charset - font) in their ROM. + All of them have similar but not identical symbols 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 devide 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 '' unaccessible in the size 6x10. + 2.) Because these letters are to big for some locations on the info-screen we use a full ISO10646-1 font in the size of 6x9. + 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. + + 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 thrue 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 the programmer wanted.) + The Germans want to use "a" the Finnish at least "". Other European languages want to see their accents an 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 scritps. 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 so 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. (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 what 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. This makes translations easy because we have less charsets we have to deal with. (What is working on the HD44780s will also work on the dogms.) + 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) + k.) Make mapping functions and tables to convert from UTF8 to the fonts and integrate to 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. + 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. + If you get a lot of question-marks on the Hitachi based displays with your new translation, maybe creating a new language file with the format 'language_xx_utf8.h' is the way to go. + 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 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. + +## User Instructions + Define your hardware and language in 'Configuration.h'. Done. + \ No newline at end of file diff --git a/README.md b/README.md index 5107cf0043..37d4486b65 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) ##### [RepRap.org Wiki Page](http://reprap.org/wiki/Marlin) From 0f26f3abf29a84a5ecf56e440119b9eb017600f3 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 10 Mar 2015 17:59:28 +0100 Subject: [PATCH 08/57] Add a test_language. Will show the compleet utf8 or ASCII charset To se the second half of ASCII click on "01234..." --- Marlin/language_test.h | 200 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 Marlin/language_test.h diff --git a/Marlin/language_test.h b/Marlin/language_test.h new file mode 100644 index 0000000000..9082754144 --- /dev/null +++ b/Marlin/language_test.h @@ -0,0 +1,200 @@ +/** + * TEST + * + * LCD Menu Messages + * Please note these are limited to 17 characters! + * + */ +#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 find the place of the symbol in 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 appers 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 and de) 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). +// d.) So for Kanji we use a very special and selected subset of symbols and the direct mapping like in a). + +//#define MAPPER_NON // For direct asci codes ( until now all languages except ru, de, ... ) +#define MAPPER_C2C3 // For most European languages when language file is in utf8 +//#define MAPPER_D0D1 // For Cyrillic +//#define MAPPER_D0D1_MOD // For Cyrillic on HD44780_CYRILIC (will save 32 byte in the mapper but adds some more decisions) +//#define MAPPER_E382E383 // For Katakana + + +// next 4 lines select variants in this file only +//#define WEST +#define CYRIL +//#define KANA +//#define KANJI + +// 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_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 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 ) || defined (KANJI) + #define WELCOME_MSG "Language TEST" + + #define MSG_WATCH "\001\002\003\004\005\006\007\010\011" + #ifdef KANJI + #define MSG_PREPARE "No UTF8 for Kanji" + #else + #define MSG_PREPARE "UTF8" + #endif + #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 From 6fc2ccd56833c1629782a3f250edfe0788d32fa8 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 10 Mar 2015 18:04:03 +0100 Subject: [PATCH 09/57] Make use of new remenbering fontswitch. --- Marlin/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 2f83afe2d1..add1bd80fd 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -1308,7 +1308,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 From 255ca681237985f35c208addfc0b324ef733c669 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 10 Mar 2015 18:30:09 +0100 Subject: [PATCH 10/57] Changes in ultralcd_implementation_hitachi_HD44780.h in detail Top -> down: We don't need LiquidCrystalRus.cpp and LiquidCrystalRus.h any more. Functionality is now in utf_mapper.h Comment on LCD_STR_BEDTEMP about behaviour in strings. Change LCD_STR_ARROW_RIGHT from "\x7E" to ">" because "\x7E" is only ARROW_RIGHT on displays with DISPLAY_CHARSET_HD44780_JAPAN. Introduce the counting UTF8 enabled lcd_print functions. Replace the old lcd.print functions and make use of them. A bit of reformatting around the changes. --- Marlin/LiquidCrystalRus.cpp | 393 ------------------ Marlin/LiquidCrystalRus.h | 129 ------ .../ultralcd_implementation_hitachi_HD44780.h | 159 ++++--- 3 files changed, 79 insertions(+), 602 deletions(-) delete mode 100644 Marlin/LiquidCrystalRus.cpp delete mode 100644 Marlin/LiquidCrystalRus.h diff --git a/Marlin/LiquidCrystalRus.cpp b/Marlin/LiquidCrystalRus.cpp deleted file mode 100644 index c74146236e..0000000000 --- a/Marlin/LiquidCrystalRus.cpp +++ /dev/null @@ -1,393 +0,0 @@ -#include "LiquidCrystalRus.h" - -#include -#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 ad85394ae3..0000000000 --- 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/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h index 2081414cc2..03c43e428c 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,31 @@ 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; + char i = 0; + char n = 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,8 +620,9 @@ 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(uint8_t row, const char* pstr, char pre_char, char post_char) { char c; @@ -623,12 +636,12 @@ static void lcd_implementation_drawmenu_generic(uint8_t row, const char* pstr, c lcd.print(pre_char); while( ((c = pgm_read_byte(pstr)) != '\0') && (n>0) ) { - lcd.print(c); + n -= lcd_print(c); pstr++; - if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--; } - while(n--) - lcd.print(' '); + while(n--) { + lcd.print(' '); + } lcd.print(post_char); lcd.print(' '); } @@ -643,16 +656,14 @@ static void lcd_implementation_drawmenu_setting_edit_generic(uint8_t row, const #endif lcd.setCursor(0, row); lcd.print(pre_char); - while( ((c = pgm_read_byte(pstr)) != '\0') && (n>0) ) - { - lcd.print(c); - pstr++; - if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--; + while( ((c = pgm_read_byte(pstr)) != '\0') && (n>0) ) { + n -= lcd_print(c); + pstr++; } lcd.print(':'); while(n--) - lcd.print(' '); - lcd.print(data); + lcd.print(' '); + lcd_print(data); } static void lcd_implementation_drawmenu_setting_edit_generic_P(uint8_t row, const char* pstr, char pre_char, const char* data) { @@ -665,15 +676,13 @@ static void lcd_implementation_drawmenu_setting_edit_generic_P(uint8_t row, cons #endif lcd.setCursor(0, row); lcd.print(pre_char); - while( ((c = pgm_read_byte(pstr)) != '\0') && (n>0) ) - { - lcd.print(c); - pstr++; - if ((pgm_read_byte(pstr) & 0xc0) != 0x80) n--; + while( ((c = pgm_read_byte(pstr)) != '\0') && (n>0) ) { + n -= lcd_print(c); + pstr++; } lcd.print(':'); while(n--) - lcd.print(' '); + lcd.print(' '); lcd_printPGM(data); } #define lcd_implementation_drawmenu_setting_edit_int3_selected(row, pstr, pstr2, data, minValue, maxValue) lcd_implementation_drawmenu_setting_edit_generic(row, pstr, '>', itostr3(*(data))) @@ -726,7 +735,7 @@ void lcd_implementation_drawedit(const char* pstr, char* value) #else lcd.setCursor(LCD_WIDTH -1 - lcd_strlen(value), 1); #endif - lcd.print(value); + lcd_print(value); } static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char* pstr, const char* filename, char* longFilename) { @@ -741,9 +750,8 @@ static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char* } while( ((c = *filename) != '\0') && (n>0) ) { - lcd.print(c); + n -= lcd_print(c); filename++; - n--; } while(n--) lcd.print(' '); @@ -761,54 +769,45 @@ static void lcd_implementation_drawmenu_sdfile(uint8_t row, const char* pstr, co } while( ((c = *filename) != '\0') && (n>0) ) { - lcd.print(c); + n -= lcd_print(c); filename++; - n--; } while(n--) lcd.print(' '); } -static void lcd_implementation_drawmenu_sddirectory_selected(uint8_t row, const char* pstr, const char* filename, char* longFilename) -{ - char c; - uint8_t n = LCD_WIDTH - 2; - lcd.setCursor(0, row); - lcd.print('>'); - lcd.print(LCD_STR_FOLDER[0]); - if (longFilename[0] != '\0') - { - filename = longFilename; - longFilename[LCD_WIDTH-2] = '\0'; - } - while( ((c = *filename) != '\0') && (n>0) ) - { - lcd.print(c); - filename++; - n--; - } - while(n--) - lcd.print(' '); +static void lcd_implementation_drawmenu_sddirectory_selected(uint8_t row, const char* pstr, const char* filename, char* longFilename) { + char c; + uint8_t n = LCD_WIDTH - 2; + lcd.setCursor(0, row); + lcd.print('>'); + lcd.print(LCD_STR_FOLDER[0]); + if (longFilename[0] != '\0') { + filename = longFilename; + longFilename[LCD_WIDTH-2] = '\0'; + } + while( ((c = *filename) != '\0') && (n>0) ) { + n -= lcd_print(c); + filename++; + } + while(n--) + lcd.print(' '); } -static void lcd_implementation_drawmenu_sddirectory(uint8_t row, const char* pstr, const char* filename, char* longFilename) -{ - char c; - uint8_t n = LCD_WIDTH - 2; - lcd.setCursor(0, row); +static void lcd_implementation_drawmenu_sddirectory(uint8_t row, const char* pstr, const char* filename, char* longFilename) { + char c; + uint8_t n = LCD_WIDTH - 2; + lcd.setCursor(0, row); + lcd.print(' '); + lcd.print(LCD_STR_FOLDER[0]); + if (longFilename[0] != '\0') { + filename = longFilename; + longFilename[LCD_WIDTH-2] = '\0'; + } + while( ((c = *filename) != '\0') && (n>0) ) { + n -= lcd_print(c); + filename++; + } + while(n--) lcd.print(' '); - lcd.print(LCD_STR_FOLDER[0]); - if (longFilename[0] != '\0') - { - filename = longFilename; - longFilename[LCD_WIDTH-2] = '\0'; - } - while( ((c = *filename) != '\0') && (n>0) ) - { - lcd.print(c); - filename++; - n--; - } - while(n--) - lcd.print(' '); } #define lcd_implementation_drawmenu_back_selected(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]) #define lcd_implementation_drawmenu_back(row, pstr, data) lcd_implementation_drawmenu_generic(row, pstr, ' ', LCD_STR_UPLEVEL[0]) From ae76b1e8a8b8c69bae2435347f2f24c7edad8315 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 10 Mar 2015 22:34:56 +0100 Subject: [PATCH 11/57] Changes in dogm_lcd_implementation.h in detail. Top -> down - We don't need the old Marlion_font package any more - we made new. - But we need information about configured fonts and the mappers. - We support Cyrillic now. - LCD_CLASS is not used in this file. LiquidCrystalRus.h is deleted anyway. - define some fonts - BIG_EDIT_FONT works only together with western languages. - Select a matching FONT for the MENUE depending on the defined language. - Number the different font-types. Wanted to avoid to store complete font-structures when changing fonts back and forth. - Marlin special symbols are now at the lower end - like in 'ultralcd_implementation_hitachi_HD44780.h' - insert the new remembering setFont function. - insert the new counting lcd_print functions. - make use of the new setFont and lcd_print functions. - On some places redefined one character long strings with chars to avoid overhead and reduce warnings. --- Marlin/dogm_lcd_implementation.h | 245 +++++++++++++++++++++---------- 1 file changed, 165 insertions(+), 80 deletions(-) diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index 4e2a567fff..171b42733a 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -17,8 +17,8 @@ #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,35 +32,72 @@ #include #include "DOGMbitmaps.h" -#include "dogm_font_data_marlin.h" #include "ultralcd.h" #include "ultralcd_st7920_u8glib_rrd.h" +#include "configuration.h" +#include "utf_mapper.h" -/* Russian language not supported yet, needs custom font +#include +#include "dogm_font_data_6x9_marlin.h" // Height of 'A' is only 5 pixel. +#include "dogm_font_data_Marlin_symbols.h" // The Marlin special symbols -#ifdef LANGUAGE_RU -#include "LiquidCrystalRus.h" -#define LCD_CLASS LiquidCrystalRus -#else -#include -#define LCD_CLASS LiquidCrystal +#define FONT_STATUSMENU_NAME u8g_font_6x9 // we don't have a small font for Cyrillic, Kana or Kanji +#define FONT_SPECIAL_NAME Marlin_symbols + +// save 3120 bytes of PROGMEM by commenting out the next #define +// we don't have a big font for Cyrillic, Kana or Kanji +#if defined( MAPPER_C2C3 ) || defined( MAPPER_NON ) + #define USE_BIG_EDIT_FONT #endif -*/ -#define USE_BIG_EDIT_FONT // save 3120 bytes of PROGMEM by commenting out this line -#define FONT_STATUSMENU u8g_font_6x9 -#define FONT_MENU u8g_font_6x10_marlin +#if defined( MAPPER_C2C3 ) + #include // System font. This is ISO10646-1 + #define FONT_MENU_NAME u8g_font_6x10 + +#elif defined( MAPPER_D0D1 ) + #include "dogm_font_data_ISO10646_5_Cyrillic.h" + #define FONT_MENU_NAME ISO10646_5_Cyrillic_5x7 + +#elif defined( MAPPER_E382E383 ) + #include "dogm_font_data_ISO10646_Kana.h" + #define FONT_MENU_NAME ISO10646_Kana_5x7 + +#elif defined( DISPLAY_CHARSET_KANJI ) && defined( MAPPER_NON ) + #include "dogm_font_data_6x10_marlin_Kanji.h" + #define FONT_MENU_NAME u8g_font_6x10_marlin + +#elif 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_CYRILIC ) + #include "dogm_font_data_HD44780_C.h" + #define FONT_MENU_NAME HD44780_C_5x7 + +#else // #if defined( MAPPER_C2C3 ) // fall-back + #include // system font + #define FONT_MENU_NAME u8g_font_6x10 +#endif + +#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 u8g_font_6x10_marlin + #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 @@ -68,16 +105,21 @@ #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 LCD_STR_DEGREE +// 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; @@ -96,6 +138,49 @@ U8GLIB_NHD_C12864 u8g(DOGLCD_CS, DOGLCD_A0); U8GLIB_DOGM128 u8g(DOGLCD_CS, DOGLCD_A0); // HW-SPI Com: CS, A0 #endif +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 < ' ')) { + 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 @@ -130,7 +215,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 @@ -143,21 +228,15 @@ 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,6); - 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,27); - 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); @@ -189,7 +268,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 @@ -199,9 +278,9 @@ static void lcd_implementation_status_screen() { u8g.setPrintPos(80,47); 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("--:--")); @@ -215,68 +294,77 @@ 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 - u8g.setFont(FONT_STATUSMENU); + lcd_setFont(FONT_STATUSMENU); u8g.drawBox(0,29,128,10); u8g.setColorIndex(0); // white on black u8g.setPrintPos(2,37); - u8g.print("X"); + lcd_print('X'); u8g.drawPixel(8,33); u8g.drawPixel(8,35); u8g.setPrintPos(10,37); - u8g.print(ftostr31ns(current_position[X_AXIS])); + lcd_print(ftostr31ns(current_position[X_AXIS])); u8g.setPrintPos(43,37); - lcd_printPGM(PSTR("Y")); + lcd_print('Y'); u8g.drawPixel(49,33); u8g.drawPixel(49,35); u8g.setPrintPos(51,37); - u8g.print(ftostr31ns(current_position[Y_AXIS])); + lcd_print(ftostr31ns(current_position[Y_AXIS])); u8g.setPrintPos(83,37); - u8g.print("Z"); + lcd_print('Z'); u8g.drawPixel(89,33); u8g.drawPixel(89,35); u8g.setPrintPos(91,37); - 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,48); - u8g.print(itostr3(feedmultiply)); - u8g.print('%'); + lcd_print(itostr3(feedmultiply)); + lcd_print('%'); // Status line - u8g.setFont(FONT_STATUSMENU); +/* The new fonts are small enough + #ifndef MAPPER_C2C3 + lcd_setFont(FONT_MENU); + #else + lcd_setFont(FONT_STATUSMENU); + #endif +*/ + lcd_setFont(FONT_MENU); + u8g.setPrintPos(0,61); + #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 } @@ -300,13 +388,12 @@ static void lcd_implementation_drawmenu_generic(uint8_t row, const char* pstr, c lcd_implementation_mark_as_selected(row, pre_char); while((c = pgm_read_byte(pstr))) { - u8g.print(c); + 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(uint8_t row, const char* pstr, char pre_char, const char* data, bool pgm) { @@ -316,13 +403,12 @@ static void _drawmenu_setting_edit_generic(uint8_t row, const char* pstr, char p lcd_implementation_mark_as_selected(row, pre_char); while( (c = pgm_read_byte(pstr))) { - u8g.print(c); + 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(row, pstr, pre_char, data) _drawmenu_setting_edit_generic(row, pstr, pre_char, data, false) @@ -374,13 +460,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 - lcd_strlen(value)) rows = 2; } else { - u8g.setFont(FONT_MENU); + lcd_setFont(FONT_MENU); } #endif @@ -391,9 +477,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-lcd_strlen(value)) * char_width, rows * rowHeight + kHalfChar); - u8g.print(value); + lcd_print(value); } static void _drawmenu_sd(uint8_t row, const char* pstr, const char* filename, char * const longFilename, bool isDir, bool isSelected) { @@ -407,13 +493,12 @@ static void _drawmenu_sd(uint8_t row, const char* pstr, const char* filename, ch lcd_implementation_mark_as_selected(row, ((isSelected) ? '>' : ' ')); - if (isDir) u8g.print(LCD_STR_FOLDER[0]); + if (isDir) lcd_print(LCD_STR_FOLDER[0]); while((c = *filename) != '\0') { - u8g.print(c); + n -= lcd_print(c); filename++; - n--; } - while(n--) u8g.print(' '); + while(n--) lcd_print(' '); } #define lcd_implementation_drawmenu_sdfile_selected(row, pstr, filename, longFilename) _drawmenu_sd(row, pstr, filename, longFilename, false, true) From 97ae3c5c6a7c7275a93469b599f5a0bef812d9f2 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Wed, 11 Mar 2015 10:26:36 +0100 Subject: [PATCH 12/57] Corected some errors inrtoduced by a faild global replacement. --- Marlin/language_de.h | 6 +++--- Marlin/language_fi.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/language_de.h b/Marlin/language_de.h index d2eb6d34d5..af7bdf93c2 100644 --- a/Marlin/language_de.h +++ b/Marlin/language_de.h @@ -47,9 +47,9 @@ #define MSG_FAN_SPEED "Lüftergeschw." #define MSG_FLOW "Fluss" #define MSG_CONTROL "Einstellungen" -#define MSG_MIN LCD_STR_THERMOMETER " " Min" -#define MSG_MAX LCD_STR_THERMOMETER " " Max" -#define MSG_FACTOR LCD_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" diff --git a/Marlin/language_fi.h b/Marlin/language_fi.h index 76dcb882d5..d84f1b28a6 100644 --- a/Marlin/language_fi.h +++ b/Marlin/language_fi.h @@ -48,9 +48,9 @@ #define MSG_FAN_SPEED "Tuul. nopeus" #define MSG_FLOW "Virtaus" #define MSG_CONTROL "Kontrolli" -#define MSG_MIN LCD_STR_THERMOMETER "" Min" -#define MSG_MAX LCD_STR_THERMOMETER "" Max" -#define MSG_FACTOR LCD_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" From b60761bcff7705e1102ccab523a480e141751069 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Wed, 11 Mar 2015 10:30:38 +0100 Subject: [PATCH 13/57] Removed some messages that shouldn't be translated in the Japanese files. And made falback to kana work. --- Marlin/language_kana.h | 3 +++ Marlin/language_kana_utf8.h | 6 ------ Marlin/language_kanji.h | 5 +++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h index 050ebd5c5b..8c8ecdb871 100644 --- a/Marlin/language_kana.h +++ b/Marlin/language_kana.h @@ -124,11 +124,14 @@ #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" diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h index 9b74986f8e..d364a0332f 100644 --- a/Marlin/language_kana_utf8.h +++ b/Marlin/language_kana_utf8.h @@ -128,12 +128,6 @@ #define MSG_BABYSTEP_Z "ヒ゛ト゛ウ Z" // "Babystep Z" #define MSG_ENDSTOP_ABORT "Endstop abort" -#define MSG_HEATING "セネシチユウ..." // "Heating..." -#define MSG_HEATING_COMPLETE "セネシセンリxョウ" // "Heating done." -#define MSG_BED_HEATING "ヘ゛ツト゛セネシチユウ" // "Bed Heating." 5C 33 34 33 -#define MSG_BED_DONE "ヘ゛ツト゛セネシセンリxョウ" // "Bed done." -#define MSG_ENDSTOPS_HIT "endstops hit: " - #ifdef DELTA_CALIBRATION_MENU #define MSG_DELTA_CALIBRATE "Delta Calibration" #define MSG_DELTA_CALIBRATE_X "Calibrate X" diff --git a/Marlin/language_kanji.h b/Marlin/language_kanji.h index d2e8546912..15b8359ab0 100644 --- a/Marlin/language_kanji.h +++ b/Marlin/language_kanji.h @@ -5,6 +5,7 @@ * Please note these are limited to 17 characters! * */ +#include "Configuration.h" #ifndef DOGLCD #include "language_kana.h" // fallback to kana #define LANGUAGE_KANJI_H @@ -130,11 +131,15 @@ #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\xe5\x94\x95\x89..." // "Heating..." #define MSG_HEATING_COMPLETE "\xb6\xe5\x94\x95\xa4\xa5\x7f" // "Heating done." #define MSG_BED_HEATING "\xcd\xde\xaf\xc4\xde\xb6\xe5\x94\x95\x89" // "Bed Heating." #define MSG_BED_DONE "\xcd\xde\xaf\xc4\xde\xb6\xe5\x94\x95\xa4\xa5\x7f" // "Bed done." #define MSG_ENDSTOPS_HIT "endstops hit: " + ^ typho +*/ #ifdef DELTA_CALIBRATION_MENU #define MSG_DELTA_CALIBRATE "Delta Calibration" From c4b0087f7a96737f57c5f5affc79f0d2cdbf9134 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Wed, 11 Mar 2015 10:55:16 +0100 Subject: [PATCH 14/57] Insert utf_mapper.h Top -> down - Decide what output function is to use. - Precautions. If non of the DISPLAY_CHARSET_HD44780's is selected fall back to Japanese. - When we are not on the dogms setup a mapping table depending on display type and mapper. - If we are on dogm we use ONE To ONE mapping - except kanji. - select and define one of the mapping functions. --- Marlin/utf_mapper.h | 255 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 Marlin/utf_mapper.h diff --git a/Marlin/utf_mapper.h b/Marlin/utf_mapper.h new file mode 100644 index 0000000000..ad13e3654f --- /dev/null +++ b/Marlin/utf_mapper.h @@ -0,0 +1,255 @@ +#ifndef UTF_MAPPER_H +#define UTF_MAPPER_H + +#include "language.h" + +#ifdef DOGLCD + #define HARDWAERE_CHAR_OUT u8g.print +#else + #define HARDWAERE_CHAR_OUT lcd.write +#endif + +#if !(defined( DISPLAY_CHARSET_HD44780_JAPAN ) || defined( DISPLAY_CHARSET_HD44780_WESTERN ) || defined( DISPLAY_CHARSET_HD44780_CYRILIC )) + #define DISPLAY_CHARSET_HD44780_JAPAN +#endif + +#ifndef DOGLCD + #ifdef DISPLAY_CHARSET_KANJI + #error("Kanji does not work on character based displays!"); + #elif 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,0xed,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_CYRILIC ) + #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 + #endif +#else //DOGLCD + #if defined( DISPLAY_CHARSET_KANJI ) + #define MAPPER_NON + #else + #define MAPPER_ONE_TO_ONE + #endif +#endif //DOGLCD + +#if defined( MAPPER_NON ) + char charset_mapper(char c){ + HARDWAERE_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 + HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20) ); + #else + HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; + #endif + } + else { + HARDWAERE_CHAR_OUT('?'); + } + } + else { + HARDWAERE_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 )) { + HARDWAERE_CHAR_OUT((char) 0xa2 ); // Ё + } else if ((utf_hi_char == 1) && (d == 0x11)) { + HARDWAERE_CHAR_OUT((char) 0xb5 ); // ё + } else { + HARDWAERE_CHAR_OUT((char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x10 )); + } + } + else { + HARDWAERE_CHAR_OUT('?'); + } + } else { + HARDWAERE_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){ + // 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; + #ifndef MAPPER_ONE_TO_ONE + HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20) ); + #else + HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; + #endif + } else { + HARDWAERE_CHAR_OUT('?'); + } + } else { + HARDWAERE_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 + HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20) ); + #else + HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; + #endif + } else { + HARDWAERE_CHAR_OUT((char) '?' ); + } + } else { + HARDWAERE_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 From 817751d4b969baf545b0587aca3007d118872c48 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Wed, 11 Mar 2015 11:10:35 +0100 Subject: [PATCH 15/57] Added new languages, the Cyrillic display and a test language to find out your hardware. --- Marlin/Configuration.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 076e75c538..70b74123ed 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -565,13 +565,15 @@ 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, kanji, 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. +// Chose ONE of the next three charsets. This has to match your hardware. In case of a full graphic display chose that one best fitting to your language. +// to find out what type you have - compile with language_test.h - upload - click to get the menu. + #define DISPLAY_CHARSET_HD44780_JAPAN // this is the most common hardware + //#define DISPLAY_CHARSET_HD44780_WESTERN + //#define DISPLAY_CHARSET_HD44780_CYRILIC //#define ULTRA_LCD //general LCD support, also 16x2 //#define DOGLCD // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family) From 5bafb1fe1f66dfc24e2f003dfe395ea218c9c3fa Mon Sep 17 00:00:00 2001 From: AnHardt Date: Wed, 11 Mar 2015 20:46:52 +0100 Subject: [PATCH 16/57] Add user test to language_test.h and make it default. Improve description in Configuration.h --- Marlin/Configuration.h | 2 +- Marlin/language_test.h | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 70b74123ed..96c307bcbe 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -570,7 +570,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of //#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 chose that one best fitting to your language. -// to find out what type you have - compile with language_test.h - upload - click to get the menu. +// to find out what type you have - compile with language_test.h - upload - click to get the menu. You'll see two typical lines from the upper half of the charset. #define DISPLAY_CHARSET_HD44780_JAPAN // this is the most common hardware //#define DISPLAY_CHARSET_HD44780_WESTERN //#define DISPLAY_CHARSET_HD44780_CYRILIC diff --git a/Marlin/language_test.h b/Marlin/language_test.h index 9082754144..b58da76f60 100644 --- a/Marlin/language_test.h +++ b/Marlin/language_test.h @@ -25,16 +25,17 @@ // 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). // d.) So for Kanji we use a very special and selected subset of symbols and the direct mapping like in a). -//#define MAPPER_NON // For direct asci codes ( until now all languages except ru, de, ... ) -#define MAPPER_C2C3 // For most European languages when language file is in utf8 +#define MAPPER_NON // For direct asci codes ( until now all languages except ru, de, ... ) +//#define MAPPER_C2C3 // For most European languages when language file is in utf8 //#define MAPPER_D0D1 // For Cyrillic -//#define MAPPER_D0D1_MOD // For Cyrillic on HD44780_CYRILIC (will save 32 byte in the mapper but adds some more decisions) +////#define MAPPER_D0D1_MOD // For Cyrillic on HD44780_CYRILIC (will save 32 byte in the mapper but adds some more decisions) //#define MAPPER_E382E383 // For Katakana // next 4 lines select variants in this file only +#define DISPLAYTEST //#define WEST -#define CYRIL +//#define CYRIL //#define KANA //#define KANJI @@ -47,6 +48,8 @@ #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 "ÈÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ" @@ -89,6 +92,14 @@ #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_c + #define MSG_CONTROL STRG_OKTAL_d +#endif + #ifdef WEST #define WELCOME_MSG "Language TEST" From 96f8d20f2f3b130ae0cb76536df6b7c0c27fefc1 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 14:26:58 +0100 Subject: [PATCH 17/57] Change selection logic another time Automatic selection was to unflexible. Updated documentation Updated language files to new logic and documentation. Updated bdf2u8g.exe --- Documentation/LCDLanguageFont.md | 64 ++++++++++++++++------------ Marlin/Configuration.h | 7 ++-- Marlin/dogm_lcd_implementation.h | 70 ++++++++++++++++--------------- Marlin/language.h | 6 +++ Marlin/language_an.h | 5 ++- Marlin/language_ca.h | 5 ++- Marlin/language_de.h | 5 ++- Marlin/language_en.h | 10 ++++- Marlin/language_es.h | 5 ++- Marlin/language_eu.h | 5 ++- Marlin/language_fi.h | 5 ++- Marlin/language_fr.h | 6 ++- Marlin/language_it.h | 5 ++- Marlin/language_kana.h | 5 ++- Marlin/language_kana_utf8.h | 5 ++- Marlin/language_kanji.h | 2 +- Marlin/language_nl.h | 5 ++- Marlin/language_pl.h | 5 ++- Marlin/language_pt-br.h | 5 ++- Marlin/language_pt.h | 5 ++- Marlin/language_ru.h | 7 +++- Marlin/language_test.h | 26 ++++++++---- Marlin/scripts/Fonts/bdf2u8g.exe | Bin 19968 -> 56515 bytes Marlin/utf_mapper.h | 48 ++++++++++----------- 24 files changed, 194 insertions(+), 117 deletions(-) diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md index a06b39160a..13e70b90a9 100644 --- a/Documentation/LCDLanguageFont.md +++ b/Documentation/LCDLanguageFont.md @@ -1,15 +1,15 @@ # LCD Language Font System -We deal with a variety of differend displays. -And we try to display different languages on them. +We deal with a variety of different displays. +And we try to display a lot of different languages on them. This system is ought to solve some of the related problems. ## The Displays -We have two different technologys for 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 similar but not identical symbols at the positions 0 to 127 similar to US-ASCII. + 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 @@ -22,10 +22,10 @@ We have two different technologys for the displays: * 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 devide this area in about 5 Lines with about 22 columns. + 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 '' unaccessible in the size 6x10. + 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 are to big for some locations on the info-screen we use a full ISO10646-1 font in the size of 6x9. 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. @@ -48,17 +48,18 @@ We have two different technologys for the displays: 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 thrue 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 the programmer wanted.) - The Germans want to use "a" the Finnish at least "". Other European languages want to see their accents an their letters. + 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 thrue 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 the programmer wanted.) + The Germans want to use "ÄäÖöÜüß" the Finnish at least "äö". Other European languages want to see their accents an 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 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 scritps. 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. + 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 @@ -74,15 +75,15 @@ We have two different technologys for the displays: ### 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. (language_xx.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 what 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. This makes translations easy because we have less charsets we have to deal with. (What is working on the HD44780s will also work on the dogms.) - 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) - k.) Make mapping functions and tables to convert from UTF8 to the fonts and integrate to the new output functions. (utf_mapper.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'. @@ -92,13 +93,13 @@ We have two different technologys for the displays: 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. + 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. + 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" + 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)) @@ -106,20 +107,31 @@ We have two different technologys for the displays: 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. - If you get a lot of question-marks on the Hitachi based displays with your new translation, maybe creating a new language file with the format 'language_xx_utf8.h' is the way to go. + 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 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. + 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. + 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 language in 'Configuration.h'. Done. - \ No newline at end of file + Define your hardware and the wanted language in 'Configuration.h'. + To find out what charset you harware 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/Configuration.h b/Marlin/Configuration.h index 96c307bcbe..53f916b311 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -567,10 +567,11 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of // Define your display language below. Replace (en) with your language code and uncomment. // en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, kanji, test // See also language.h -//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en) +#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 chose that one best fitting to your language. -// to find out what type you have - compile with language_test.h - upload - click to get the menu. You'll see two typical lines from the upper half of the charset. +// 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. +// Se also documentation/LCDLanguageFont.md #define DISPLAY_CHARSET_HD44780_JAPAN // this is the most common hardware //#define DISPLAY_CHARSET_HD44780_WESTERN //#define DISPLAY_CHARSET_HD44780_CYRILIC diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index 171b42733a..ab61751a74 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -35,10 +35,10 @@ #include "ultralcd.h" #include "ultralcd_st7920_u8glib_rrd.h" #include "configuration.h" -#include "utf_mapper.h" + #include -#include "dogm_font_data_6x9_marlin.h" // Height of 'A' is only 5 pixel. +#include "dogm_font_data_6x9_marlin.h" // Height of 'A' is only 6 pixel. #include "dogm_font_data_Marlin_symbols.h" // The Marlin special symbols #define FONT_STATUSMENU_NAME u8g_font_6x9 // we don't have a small font for Cyrillic, Kana or Kanji @@ -50,38 +50,38 @@ #define USE_BIG_EDIT_FONT #endif -#if defined( MAPPER_C2C3 ) - #include // System font. This is ISO10646-1 - #define FONT_MENU_NAME u8g_font_6x10 - -#elif defined( MAPPER_D0D1 ) - #include "dogm_font_data_ISO10646_5_Cyrillic.h" - #define FONT_MENU_NAME ISO10646_5_Cyrillic_5x7 - -#elif defined( MAPPER_E382E383 ) - #include "dogm_font_data_ISO10646_Kana.h" - #define FONT_MENU_NAME ISO10646_Kana_5x7 - -#elif defined( DISPLAY_CHARSET_KANJI ) && defined( MAPPER_NON ) - #include "dogm_font_data_6x10_marlin_Kanji.h" - #define FONT_MENU_NAME u8g_font_6x10_marlin - -#elif 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_CYRILIC ) - #include "dogm_font_data_HD44780_C.h" - #define FONT_MENU_NAME HD44780_C_5x7 - -#else // #if defined( MAPPER_C2C3 ) // fall-back - #include // system font - #define FONT_MENU_NAME u8g_font_6x10 -#endif +#ifndef SIMULATE_ROMFONT + #if defined( DISPLAY_CHARSET_ISO10646_1 ) + #include // System font. + #define FONT_MENU_NAME u8g_font_6x10 + #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 + #elif defined( DISPLAY_CHARSET_KANJI ) + #include "dogm_font_data_6x10_marlin_Kanji.h" + #define FONT_MENU_NAME u8g_font_6x10_marlin + #else // fall-back + #include // system font + #define FONT_MENU_NAME u8g_font_6x10 + #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_CYRILIC ) + #include "dogm_font_data_HD44780_C.h" + #define FONT_MENU_NAME HD44780_C_5x7 + #else // fall-back + #include // system font + #define FONT_MENU_NAME u8g_font_6x10 + #endif +#endif // SIMULATE_ROMFONT #define FONT_STATUSMENU 1 #define FONT_SPECIAL 2 @@ -138,6 +138,8 @@ 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) { diff --git a/Marlin/language.h b/Marlin/language.h index 330bb3c91f..b4c6f3aba6 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -11,6 +11,7 @@ // // ==> ALWAYS TRY TO COMPILE MARLIN WITH/WITHOUT "ULTIPANEL" / "ULTRALCD" / "SDSUPPORT" #define IN "Configuration.h" // ==> ALSO TRY ALL AVAILABLE LANGUAGE OPTIONS +// Se also documentation/LCDLanguageFont.md // Languages // en English @@ -201,6 +202,11 @@ #define MSG_MAXTEMP_BED_OFF "Heated bed" MSG_SWITCHED_OFF_MAX // LCD Menu Messages + +#if !(defined( DISPLAY_CHARSET_HD44780_JAPAN ) || defined( DISPLAY_CHARSET_HD44780_WESTERN ) || defined( DISPLAY_CHARSET_HD44780_CYRILIC )) + #define DISPLAY_CHARSET_HD44780_JAPAN +#endif + #include LANGUAGE_INCLUDE #include "language_en.h" diff --git a/Marlin/language_an.h b/Marlin/language_an.h index 6155d5742c..aef304075b 100644 --- a/Marlin/language_an.h +++ b/Marlin/language_an.h @@ -2,13 +2,16 @@ * Aragonese * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_ca.h b/Marlin/language_ca.h index 2627438ece..8f00f8b7db 100644 --- a/Marlin/language_ca.h +++ b/Marlin/language_ca.h @@ -2,7 +2,7 @@ * Catalan * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_CA_H @@ -10,6 +10,9 @@ //#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." diff --git a/Marlin/language_de.h b/Marlin/language_de.h index af7bdf93c2..2487ba93a2 100644 --- a/Marlin/language_de.h +++ b/Marlin/language_de.h @@ -2,13 +2,16 @@ * German * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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." diff --git a/Marlin/language_en.h b/Marlin/language_en.h index 42e9f0b1c4..51c575aae6 100644 --- a/Marlin/language_en.h +++ b/Marlin/language_en.h @@ -2,16 +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_MOD) || defined(MAPPER_E382E383)) +#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)|| defined(DISPLAY_CHARSET_KANJI) ) + #define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays. +#endif + + #ifndef WELCOME_MSG #define WELCOME_MSG MACHINE_NAME " ready." #endif diff --git a/Marlin/language_es.h b/Marlin/language_es.h index d6a38d3cee..1602c3c1c4 100644 --- a/Marlin/language_es.h +++ b/Marlin/language_es.h @@ -2,13 +2,16 @@ * Spanish * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_eu.h b/Marlin/language_eu.h index f4857ccfb1..9bce0a7c1a 100644 --- a/Marlin/language_eu.h +++ b/Marlin/language_eu.h @@ -2,13 +2,16 @@ * Basque-Euskera * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_fi.h b/Marlin/language_fi.h index d84f1b28a6..711f096395 100644 --- a/Marlin/language_fi.h +++ b/Marlin/language_fi.h @@ -2,13 +2,16 @@ * Finnish * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h index 4c443f90d5..7e1194d7b2 100644 --- a/Marlin/language_fr.h +++ b/Marlin/language_fr.h @@ -2,13 +2,17 @@ * French * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_it.h b/Marlin/language_it.h index 0cb0dc94df..5b2709faf8 100644 --- a/Marlin/language_it.h +++ b/Marlin/language_it.h @@ -2,13 +2,16 @@ * Italian * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h index 8c8ecdb871..5810fa11d4 100644 --- a/Marlin/language_kana.h +++ b/Marlin/language_kana.h @@ -2,7 +2,7 @@ * Japanese (Kana) * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se also documentation/LCDLanguageFont.md * */ @@ -10,6 +10,9 @@ #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." diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h index d364a0332f..5501475ea8 100644 --- a/Marlin/language_kana_utf8.h +++ b/Marlin/language_kana_utf8.h @@ -2,7 +2,7 @@ * Japanese (Kana UTF8 version) * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se also documentation/LCDLanguageFont.md * */ @@ -10,6 +10,9 @@ #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. diff --git a/Marlin/language_kanji.h b/Marlin/language_kanji.h index 15b8359ab0..8c98b6a051 100644 --- a/Marlin/language_kanji.h +++ b/Marlin/language_kanji.h @@ -2,7 +2,7 @@ * Japanese (Kanji) * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se also documentation/LCDLanguageFont.md * */ #include "Configuration.h" diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h index f691fe6fb9..81eef72bbb 100644 --- a/Marlin/language_nl.h +++ b/Marlin/language_nl.h @@ -2,13 +2,16 @@ * Dutch * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_pl.h b/Marlin/language_pl.h index e8d74100af..2d56430248 100644 --- a/Marlin/language_pl.h +++ b/Marlin/language_pl.h @@ -2,13 +2,16 @@ * Polish * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_pt-br.h b/Marlin/language_pt-br.h index f15627a050..734272a299 100644 --- a/Marlin/language_pt-br.h +++ b/Marlin/language_pt-br.h @@ -2,13 +2,16 @@ * Portuguese (Brazil) * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_pt.h b/Marlin/language_pt.h index 17e4c33076..08274e112f 100644 --- a/Marlin/language_pt.h +++ b/Marlin/language_pt.h @@ -2,13 +2,16 @@ * Portuguese * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se 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" diff --git a/Marlin/language_ru.h b/Marlin/language_ru.h index 42c974fa18..3e33598555 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! + * Se also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_RU_H #define LANGUAGE_RU_H -#define MAPPER_D0D1 // For Cyrillic +#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 index b58da76f60..a2ba43faea 100644 --- a/Marlin/language_test.h +++ b/Marlin/language_test.h @@ -2,7 +2,7 @@ * TEST * * LCD Menu Messages - * Please note these are limited to 17 characters! + * Se also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_TEST_H @@ -10,12 +10,12 @@ // 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 find the place of the symbol in the font in use. +// 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 appers 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 +// 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 and de) the non ASCII [0x00-0x7F] symbols are represented by more then one byte. +// 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. @@ -25,14 +25,22 @@ // 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). // d.) So for Kanji we use a very special and selected subset of symbols and the direct mapping like in a). -#define MAPPER_NON // For direct asci codes ( until now all languages except ru, de, ... ) +#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_D0D1_MOD // For Cyrillic on HD44780_CYRILIC (will save 32 byte in the mapper but adds some more decisions) //#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 -// next 4 lines select variants in this file only +// Select the better font for full graphic displays. +//#define DISPLAY_CHARSET_ISO10646_1 +//#define DISPLAY_CHARSET_ISO10646_5 +//#define DISPLAY_CHARSET_ISO10646_KANA +//#define DISPLAY_CHARSET_KANJI + + +// next 5 lines select variants in this file only #define DISPLAYTEST //#define WEST //#define CYRIL @@ -96,8 +104,8 @@ #define WELCOME_MSG "Language TEST" #define MSG_WATCH "Display test" - #define MSG_PREPARE STRG_OKTAL_c - #define MSG_CONTROL STRG_OKTAL_d + #define MSG_PREPARE STRG_OKTAL_b + #define MSG_CONTROL STRG_OKTAL_c #endif #ifdef WEST diff --git a/Marlin/scripts/Fonts/bdf2u8g.exe b/Marlin/scripts/Fonts/bdf2u8g.exe index ab4e3f96dd34f1378d0ca929f86570ad32c10f80..1e51b26567d78d2ba1b5eda6942a18561846dee2 100644 GIT binary patch literal 56515 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 literal 19968 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 diff --git a/Marlin/utf_mapper.h b/Marlin/utf_mapper.h index ad13e3654f..d54be6ceb9 100644 --- a/Marlin/utf_mapper.h +++ b/Marlin/utf_mapper.h @@ -9,14 +9,18 @@ #define HARDWAERE_CHAR_OUT lcd.write #endif -#if !(defined( DISPLAY_CHARSET_HD44780_JAPAN ) || defined( DISPLAY_CHARSET_HD44780_WESTERN ) || defined( DISPLAY_CHARSET_HD44780_CYRILIC )) - #define DISPLAY_CHARSET_HD44780_JAPAN -#endif - -#ifndef DOGLCD - #ifdef DISPLAY_CHARSET_KANJI - #error("Kanji does not work on character based displays!"); - #elif defined( DISPLAY_CHARSET_HD44780_JAPAN ) +#ifndef SIMULATE_ROMFONT + #if defined( DISPLAY_CHARSET_ISO10646_1 ) && defined( DOGLCD ) + #define MAPPER_ONE_TO_ONE + #elif defined( DISPLAY_CHARSET_ISO10646_5 ) && defined( DOGLCD ) + #define MAPPER_ONE_TO_ONE + #elif defined( DISPLAY_CHARSET_ISO10646_KANA ) && defined( DOGLCD ) + #define MAPPER_ONE_TO_ONE + #elif defined( DISPLAY_CHARSET_KANJI ) && defined( DOGLCD ) + #define MAPPER_NON + #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 @@ -27,11 +31,11 @@ 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 ü ä + // ö 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,0xed,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0x3f // c3b - // n ö ü + 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[] = @@ -115,14 +119,8 @@ #elif defined( MAPPER_E382E383 ) #error( "Katakana on a cyrillic display makes no sense. There are no matching symbols." ); #endif - #endif -#else //DOGLCD - #if defined( DISPLAY_CHARSET_KANJI ) - #define MAPPER_NON - #else - #define MAPPER_ONE_TO_ONE - #endif -#endif //DOGLCD + #endif // DISPLAY_CHARSET_HD44780_CYRILIC +#endif // SIMULATE_ROMFONT #if defined( MAPPER_NON ) char charset_mapper(char c){ @@ -193,20 +191,18 @@ 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; + 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 &= 0x3f; + d &= 0x3fu; #ifndef MAPPER_ONE_TO_ONE HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20) ); #else - HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; + HARDWAERE_CHAR_OUT( (char) (0xa0u + ( utf_hi_char << 6 ) + d) ) ; #endif } else { HARDWAERE_CHAR_OUT('?'); From 09838dc948bed223f4656d7b73a64ac63a05b761 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 14:46:15 +0100 Subject: [PATCH 18/57] reformat documentation --- Documentation/LCDLanguageFont.md | 66 ++++++++++++++++---------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md index 13e70b90a9..c42bf7aa50 100644 --- a/Documentation/LCDLanguageFont.md +++ b/Documentation/LCDLanguageFont.md @@ -12,11 +12,11 @@ We have two different technologies for the displays: 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 + ** 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 + ** 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 + ** 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 @@ -25,9 +25,9 @@ We have two different technologies for the displays: 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 are to big for some locations on the info-screen we use a full ISO10646-1 font in the size of 6x9. - 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. + ** 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 are to big for some locations on the info-screen we use a full ISO10646-1 font in the size of 6x9. + ** 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: @@ -66,32 +66,32 @@ We have two different technologies for the displays: 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 so 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. + * 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'. + * 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' + * 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. @@ -99,7 +99,7 @@ We have two different technologies for the displays: 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" + * 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)) @@ -112,14 +112,14 @@ We have two different technologies for the displays: 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. + * 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. + * 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. From d9b3232e940a8340aea18d9d14a3ff331f8872dd Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 14:55:15 +0100 Subject: [PATCH 19/57] Another update for the documentation. --- Documentation/LCDLanguageFont.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md index c42bf7aa50..35317a62e5 100644 --- a/Documentation/LCDLanguageFont.md +++ b/Documentation/LCDLanguageFont.md @@ -12,12 +12,13 @@ We have two different technologies for the displays: 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 + * 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 + * 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 + * 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 @@ -25,9 +26,9 @@ We have two different technologies for the displays: 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 are to big for some locations on the info-screen we use a full ISO10646-1 font in the size of 6x9. - ** 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. + * 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 are to big for some locations on the info-screen we use a full ISO10646-1 font in the size of 6x9. + * 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: @@ -63,7 +64,7 @@ We have two different technologies for the displays: 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 so limit the used space (Alone unifont.ttf is about 12MB) and have to make some compromise. + 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) @@ -128,7 +129,7 @@ We have two different technologies for the displays: ## User Instructions Define your hardware and the wanted language in 'Configuration.h'. - To find out what charset you harware is define language 'test' and compile. In the menu you will see two lines from the upper half of the charset. + 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 "РСТУФХЦЧШЩЪЫЬЭЮЯ" From 9518b1c873c259ae12c51cd3b6033749d6f7a408 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 14:59:53 +0100 Subject: [PATCH 20/57] And another update for the documentation. --- Documentation/LCDLanguageFont.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md index 35317a62e5..249918e927 100644 --- a/Documentation/LCDLanguageFont.md +++ b/Documentation/LCDLanguageFont.md @@ -46,9 +46,11 @@ We have two different technologies for the displays: * 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. + + appeared. ## The Problem All of this languages, except the English, normally use extended symbol sets, not contained in US-ASCII. From 1feb71895b652c2a0f392a2b9d8e589da475d1e2 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 15:16:55 +0100 Subject: [PATCH 21/57] And an other one --- Documentation/LCDLanguageFont.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md index 249918e927..f6e31944ad 100644 --- a/Documentation/LCDLanguageFont.md +++ b/Documentation/LCDLanguageFont.md @@ -55,8 +55,8 @@ We have two different technologies for the displays: ## 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 thrue 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 the programmer wanted.) - The Germans want to use "ÄäÖöÜüß" the Finnish at least "äö". Other European languages want to see their accents an their letters. + And worse, in the code itself symbols are used, not taking in account, on what display they are written. [(This is thrue 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. @@ -104,9 +104,10 @@ We have two different technologies for the displays: 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)) + * 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. @@ -126,7 +127,9 @@ We have two different technologies for the displays: 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 From bfb8a5315607d1b636b6cf20a6142481039f0c02 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 15:23:30 +0100 Subject: [PATCH 22/57] Documentation reformating The last for today - i hope. --- Documentation/LCDLanguageFont.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md index f6e31944ad..83b821145b 100644 --- a/Documentation/LCDLanguageFont.md +++ b/Documentation/LCDLanguageFont.md @@ -126,7 +126,7 @@ We have two different technologies for the displays: * 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. + The length of the strings is limited. '17 chars' a 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') @@ -139,5 +139,7 @@ We have two different technologies for the displays: * 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. + 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. From ace3c62a1c6b3665ab9c6c694749283b8f95f2c6 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 15:26:01 +0100 Subject: [PATCH 23/57] Argh! Did not hit save --- Documentation/LCDLanguageFont.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md index 83b821145b..2d6b9cbf7a 100644 --- a/Documentation/LCDLanguageFont.md +++ b/Documentation/LCDLanguageFont.md @@ -113,9 +113,9 @@ We have two different technologies for the displays: 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. + * 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) From 3240d89f7d275d93357d38cd3f7d6665760975ae Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 19:45:10 +0100 Subject: [PATCH 24/57] Logic cleanup in utf_mapper. --- Marlin/utf_mapper.h | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/Marlin/utf_mapper.h b/Marlin/utf_mapper.h index d54be6ceb9..f04f1f87cd 100644 --- a/Marlin/utf_mapper.h +++ b/Marlin/utf_mapper.h @@ -9,14 +9,14 @@ #define HARDWAERE_CHAR_OUT lcd.write #endif -#ifndef SIMULATE_ROMFONT - #if defined( DISPLAY_CHARSET_ISO10646_1 ) && defined( DOGLCD ) +#if !(defined( SIMULATE_ROMFONT )) && defined( DOGLCD ) + #if defined( DISPLAY_CHARSET_ISO10646_1 ) #define MAPPER_ONE_TO_ONE - #elif defined( DISPLAY_CHARSET_ISO10646_5 ) && defined( DOGLCD ) + #elif defined( DISPLAY_CHARSET_ISO10646_5 ) #define MAPPER_ONE_TO_ONE - #elif defined( DISPLAY_CHARSET_ISO10646_KANA ) && defined( DOGLCD ) + #elif defined( DISPLAY_CHARSET_ISO10646_KANA ) #define MAPPER_ONE_TO_ONE - #elif defined( DISPLAY_CHARSET_KANJI ) && defined( DOGLCD ) + #elif defined( DISPLAY_CHARSET_KANJI ) #define MAPPER_NON #endif #else // SIMULATE_ROMFONT @@ -59,6 +59,7 @@ #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 ¡¢£¤¥¦§¨©ª«¬­®¯ @@ -119,6 +120,8 @@ #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_CYRILIC #endif // SIMULATE_ROMFONT @@ -141,7 +144,7 @@ else if (seen_c2){ d &= 0x3f; #ifndef MAPPER_ONE_TO_ONE - HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20) ); + HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); #else HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; #endif @@ -175,7 +178,7 @@ } else if ((utf_hi_char == 1) && (d == 0x11)) { HARDWAERE_CHAR_OUT((char) 0xb5 ); // ё } else { - HARDWAERE_CHAR_OUT((char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x10 )); + HARDWAERE_CHAR_OUT((char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x10 ) ); } } else { @@ -200,9 +203,9 @@ } else if (seen_d5) { d &= 0x3fu; #ifndef MAPPER_ONE_TO_ONE - HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20) ); + HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); #else - HARDWAERE_CHAR_OUT( (char) (0xa0u + ( utf_hi_char << 6 ) + d) ) ; + HARDWAERE_CHAR_OUT( (char) (0xa0u + ( utf_hi_char << 6 ) + d ) ) ; #endif } else { HARDWAERE_CHAR_OUT('?'); @@ -230,9 +233,9 @@ } else if ((seen_e3 == true) && (seen_82_83 == true)){ d &= 0x3f; #ifndef MAPPER_ONE_TO_ONE - HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20) ); + HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); #else - HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; + HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d ) ) ; #endif } else { HARDWAERE_CHAR_OUT((char) '?' ); From 730497aaa1781446064bacea771c512502b0b669 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 13 Mar 2015 19:47:40 +0100 Subject: [PATCH 25/57] Make use of ligatures in language_kana_utf8.h --- Marlin/language_kana_utf8.h | 96 ++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h index 5501475ea8..d08c188337 100644 --- a/Marlin/language_kana_utf8.h +++ b/Marlin/language_kana_utf8.h @@ -20,54 +20,54 @@ // 片仮名表示定義 #define WELCOME_MSG MACHINE_NAME " ready." -#define MSG_SD_INSERTED "セート゛ ンウニユウアレマシタ" // "Card inserted" -#define MSG_SD_REMOVED "セート゛セ゛アリマセン" // "Card removed" +#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_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_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_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_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_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_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_ACC "センケド" // "Accel" #define MSG_VXY_JERK "Vxy-jerk" #define MSG_VZ_JERK "Vz-jerk" #define MSG_VE_JERK "Ve-jerk" @@ -84,8 +84,8 @@ #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_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" @@ -98,18 +98,18 @@ #define MSG_RESTORE_FAILSAFE "セツテイリセツト" // "Restore failsafe" #define MSG_REFRESH "リフレツシユ" // "Refresh" #define MSG_WATCH "インフォ" // "Info screen" -#define MSG_PREPARE "シ゛ユンヒ゛セツテイ" //"Prepare" +#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_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" @@ -121,14 +121,14 @@ #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_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_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 From 44a205d9d9ead16cc8dcc069b8d2a88fec2a48c1 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Sat, 14 Mar 2015 12:27:47 +0100 Subject: [PATCH 26/57] Corrected Cyrillic fonts. Cleaned typo in language_test.h Cyrillic part. --- Marlin/dogm_font_data_HD44780_C.h | 62 ++++---- Marlin/dogm_font_data_ISO10646_5_Cyrillic.h | 153 ++++++++++--------- Marlin/language_test.h | 4 +- Marlin/scripts/Fonts/HD44780_C.fon | Bin 4176 -> 4176 bytes Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon | Bin 4224 -> 4224 bytes 5 files changed, 110 insertions(+), 109 deletions(-) diff --git a/Marlin/dogm_font_data_HD44780_C.h b/Marlin/dogm_font_data_HD44780_C.h index b4e3ff1977..a4c826103e 100644 --- a/Marlin/dogm_font_data_HD44780_C.h +++ b/Marlin/dogm_font_data_HD44780_C.h @@ -2,7 +2,7 @@ Fontname: HD44780_C Copyright: A. Hardtung, public domain Capital A Height: 7, '1' Height: 7 - Calculated Max Values w= 5 h= 8 x= 2 y= 8 dx= 6 dy= 0 ascent= 8 len= 8 + 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 @@ -10,9 +10,9 @@ Max Font ascent = 8 descent=-1 */ #include -const u8g_fntpgm_uint8_t HD44780_C_5x7[2520] U8G_SECTION(".progmem.HD44780_C_5x7") = { +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,8,1,7,7,6,2,0,128,128,128, + 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, @@ -84,18 +84,18 @@ const u8g_fntpgm_uint8_t HD44780_C_5x7[2520] U8G_SECTION(".progmem.HD44780_C_5x7 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,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,5, + 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, @@ -108,7 +108,7 @@ const u8g_fntpgm_uint8_t HD44780_C_5x7[2520] U8G_SECTION(".progmem.HD44780_C_5x7 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,112,8,136,112, + 168,168,200,5,7,7,6,0,0,112,136,8,48,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, @@ -146,8 +146,8 @@ const u8g_fntpgm_uint8_t HD44780_C_5x7[2520] U8G_SECTION(".progmem.HD44780_C_5x7 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,0,120,40,72,136,248,136,5, - 7,7,6,0,0,32,32,112,168,168,112,32,5,6,6,6, + 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, @@ -156,16 +156,16 @@ const u8g_fntpgm_uint8_t HD44780_C_5x7[2520] U8G_SECTION(".progmem.HD44780_C_5x7 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,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,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,7,7,6,0,0,112, - 16,240,16,112,16,56,5,7,7,6,0,0,32,112,32,248, - 32,112,32,5,7,7,6,0,0,16,144,80,48,80,144,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,7,7,6,0, - 0,248,248,248,248,248,248,248}; + 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_ISO10646_5_Cyrillic.h b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h index 4a9b5802b1..5b0e43e082 100644 --- a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h +++ b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h @@ -10,7 +10,7 @@ Max Font ascent = 8 descent=-1 */ #include -const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2559] U8G_SECTION(".progmem.ISO10646_5_Cyrillic_5x7") = { +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, @@ -96,78 +96,79 @@ const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2559] U8G_SECTION(".progmem.ISO 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,32,0,248,128,240,128,248,5,7,7,6,0,0,80,0, - 248,128,240,128,248,5,7,7,6,0,0,248,128,128,240,136, - 136,240,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,255,160,160,160,184,168,168,184,5, - 7,7,6,0,255,160,160,160,248,168,168,184,4,7,7,6, - 0,255,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,224,64,64,112,72,72,112,5,7,7,6, - 0,0,240,136,136,240,136,136,240,5,7,7,6,0,255,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,255,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,240,136,136,136,240,5, - 7,7,6,0,0,112,136,8,112,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,0,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}; + 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,48,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,0,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/language_test.h b/Marlin/language_test.h index a2ba43faea..ba6f7e523f 100644 --- a/Marlin/language_test.h +++ b/Marlin/language_test.h @@ -65,11 +65,11 @@ #define STRG_C3_a "àáâãäåæçèéêëìíîï" #define STRG_C3_b "ðñòóôõö÷øùúûüýþÿ" -#define STRG_D0_8 "ЈЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ" +#define STRG_D0_8 "ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ" #define STRG_D0_9 "АБВГДЕЖЗИЙКЛМНОП" #define STRG_D0_a "РСТУФХЦЧШЩЪЫЬЭЮЯ" #define STRG_D0_b "абвгдежзийклмноп" -#define STRG_D1_8 "шстуфхцчшщъыьэюя" +#define STRG_D1_8 "рстуфхцчшщъыьэюя" #define STRG_D1_9 "ѐёђѓєѕіїјљњћќѝўџ" #define STRG_D1_a "ѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯ" #define STRG_D1_b "ѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿ" diff --git a/Marlin/scripts/Fonts/HD44780_C.fon b/Marlin/scripts/Fonts/HD44780_C.fon index 00936e2541764768f6d2f027832b19dbf5e361f8..0ca52b47d6ca5c1780cce1bff4f9ab58be29275d 100644 GIT binary patch delta 123 zcmcbha6w_h0!EFA3lmjU-2DAQf?R_Y3=Ir)EX{yO!Aily#l*zi!XVyR!9t76e#=vVjxRkLV!WQgvt5> M;#>?rAb^1Z0D-|GZU6uP diff --git a/Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon b/Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon index 13d56d5e50ab3e2e8f59c9f40bd498a7ce4c413d..75a7dd273247e0d50ec52185c5b7c33c5aceb19f 100644 GIT binary patch delta 157 zcmZorY*3uAfYE5;!fZyp$-Io3tO{j@dWM^=85_8ze>60FXlVGszz_guF+6Z^DDdzo zn0$@LUS`391v^%(*ulWS0A&4uupT%R1ONfUWJ6vP8IZP)jt@WuAPU0z(a`_`43isq f4{&sJbj--$;9!{S$*02uQ(Mr%VX(Q8?>{2|8!|qM delta 157 zcmZorY*3uAfKhki!fZy($-Io3tPCKq*_yF|TUvqPN5hAPA3%Npob{uj;X_BqhsoD? z>}41hELgB(#flw31whsh2!d;Hsm#tdEnqs;NejKln3bnA|Q+5M@It)Om5^o gz`@Yb(J>=~gJZHMpAHXD0a!&r2S>r?M!x@y0Nr&v!T Date: Sat, 14 Mar 2015 15:10:45 +0100 Subject: [PATCH 27/57] Corrected Cyrillic fonts. Round II. --- Marlin/dogm_font_data_HD44780_C.h | 4 ++-- Marlin/dogm_font_data_ISO10646_5_Cyrillic.h | 4 ++-- Marlin/scripts/Fonts/HD44780_C.fon | Bin 4176 -> 4176 bytes Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon | Bin 4224 -> 4224 bytes 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/dogm_font_data_HD44780_C.h b/Marlin/dogm_font_data_HD44780_C.h index a4c826103e..bc6af91506 100644 --- a/Marlin/dogm_font_data_HD44780_C.h +++ b/Marlin/dogm_font_data_HD44780_C.h @@ -1,5 +1,5 @@ /* - Fontname: HD44780_C + 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 @@ -108,7 +108,7 @@ const u8g_fntpgm_uint8_t HD44780_C_5x7[2522] U8G_SECTION(".progmem.HD44780_C_5x7 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,48,8,136,112, + 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, diff --git a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h index 5b0e43e082..9c93fc8c52 100644 --- a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h +++ b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h @@ -1,5 +1,5 @@ /* - Fontname: ISO10646_5_Cyrillic + Fontname: ISO10646_5_Cyrillic v1.2 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 @@ -133,7 +133,7 @@ const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2560] U8G_SECTION(".progmem.ISO 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,48,8,136,112,5,7,7, + 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, diff --git a/Marlin/scripts/Fonts/HD44780_C.fon b/Marlin/scripts/Fonts/HD44780_C.fon index 0ca52b47d6ca5c1780cce1bff4f9ab58be29275d..bb9ca2a500ff1b0ea691f2358f0dcd814d0900f1 100644 GIT binary patch delta 21 ccmcbha6w^%8Y838W_3np9!87J+PtdF07jSvApigX delta 21 ccmcbha6w^%8Y83OW_3np9!7)B+PtdF07hE{7ytkO diff --git a/Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon b/Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon index 75a7dd273247e0d50ec52185c5b7c33c5aceb19f..bb13545ba81d4580e41adc238070459638b41e9f 100644 GIT binary patch delta 21 ccmZorY*5@_#mH#1*_zRnm(gN#Bj0~U071b99RL6T delta 21 ccmZorY*5@_#mH#5*_zRnm(gHzBj0~U06~NX6aWAK From 2f374f146537387e415b525782e27d50beae42c8 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Sun, 15 Mar 2015 16:44:37 +0100 Subject: [PATCH 28/57] Removed Kanji. --- Marlin/Configuration.h | 2 +- Marlin/dogm_font_data_6x10_marlin_Kanji.h | 192 ---------------------- Marlin/dogm_lcd_implementation.h | 7 +- Marlin/language.h | 1 - Marlin/language_en.h | 2 +- Marlin/language_kanji.h | 152 ----------------- Marlin/language_test.h | 14 +- Marlin/utf_mapper.h | 2 - 8 files changed, 9 insertions(+), 363 deletions(-) delete mode 100644 Marlin/dogm_font_data_6x10_marlin_Kanji.h delete mode 100644 Marlin/language_kanji.h diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 53f916b311..eb23965a6b 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -565,7 +565,7 @@ 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, kana, kana_utf8, kanji, test +// 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) diff --git a/Marlin/dogm_font_data_6x10_marlin_Kanji.h b/Marlin/dogm_font_data_6x10_marlin_Kanji.h deleted file mode 100644 index bc8dc6b1d1..0000000000 --- a/Marlin/dogm_font_data_6x10_marlin_Kanji.h +++ /dev/null @@ -1,192 +0,0 @@ -/* - Fontname : Japanese Original font, Version 0.1 - Author : http://www.thingiverse.com/ichibey - License : Creative Commons BY-NC - - 営利目的で利用する際は、かならず許可を得てください。非営利の場合は、CCライセンスに従い使用ください。 - http://creativecommons.org/licenses/by-nc/2.1/jp/legalcode -*/ -#include -const u8g_fntpgm_uint8_t u8g_font_6x10_marlin[2911] U8G_SECTION(".progmem.u8g_font_6x10_marlin") = { - 0,6,10,0,254,7,1,153,3,43,32,255,254,8,254,7, - 254,0,0,0,6,0,8,1,7,7,6,2,0,128,128,128, - 128,128,0,128,3,3,3,6,1,4,160,160,160,5,7,7, - 6,0,0,80,80,248,80,248,80,80,5,7,7,6,0,0, - 32,112,160,112,40,112,32,5,7,7,6,0,0,72,168,80, - 32,80,168,144,5,7,7,6,0,0,64,160,160,64,168,144, - 104,1,3,3,6,2,4,128,128,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,136,80,248,80,136,5, - 5,5,6,0,1,32,32,248,32,32,3,3,3,6,1,255, - 96,64,128,5,1,1,6,0,3,248,3,3,3,6,1,255, - 64,224,64,5,7,7,6,0,0,8,8,16,32,64,128,128, - 5,7,7,6,0,0,112,152,168,168,168,200,112,5,7,7, - 6,0,0,32,96,32,32,32,32,248,5,7,7,6,0,0, - 112,136,8,112,128,128,248,5,7,7,6,0,0,112,136,8, - 48,8,136,112,5,7,7,6,0,0,112,144,144,144,248,16, - 16,5,7,7,6,0,0,248,128,240,8,8,136,112,5,7, - 7,6,0,0,112,136,128,240,136,136,112,5,7,7,6,0, - 0,248,8,8,16,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, - 136,112,3,7,7,6,1,0,64,224,64,0,64,224,64,3, - 7,7,6,1,0,64,224,64,0,96,64,128,4,7,7,6, - 1,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,16,32,32,0,32,5,7,7,6, - 0,0,112,136,152,168,176,128,112,5,7,7,6,0,0,112, - 136,136,136,248,136,136,5,7,7,6,0,0,240,136,136,240, - 136,136,240,5,7,7,6,0,0,112,136,128,128,128,136,112, - 5,7,7,6,0,0,240,136,136,136,136,136,240,5,7,7, - 6,0,0,248,128,128,240,128,128,248,5,7,7,6,0,0, - 248,128,128,240,128,128,128,5,7,7,6,0,0,112,136,128, - 152,136,136,112,5,7,7,6,0,0,136,136,136,248,136,136, - 136,3,7,7,6,1,0,224,64,64,64,64,64,224,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,136,216,168,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,8,8,6,0,255,112, - 136,136,136,136,168,112,8,5,7,7,6,0,0,240,136,136, - 240,136,136,136,5,7,7,6,0,0,112,136,128,112,8,136, - 112,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,80,80,80,32,5,7,7,6,0,0,136,136, - 136,168,168,216,136,5,7,7,6,0,0,136,136,80,32,80, - 136,136,5,7,7,6,0,0,136,136,80,32,32,32,32,5, - 7,7,6,0,0,248,8,80,32,80,128,248,3,7,7,6, - 1,0,224,128,128,128,128,128,224,5,7,7,6,0,0,128, - 128,64,32,16,8,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,255,248,2,2,2,6,2,6,128,64,5,5,5,6,0, - 0,112,8,120,136,120,5,7,7,6,0,0,128,128,240,136, - 136,136,240,5,5,5,6,0,0,112,136,128,136,112,5,7, - 7,6,0,0,8,8,120,136,136,136,120,5,5,5,6,0, - 0,112,136,248,128,120,4,7,7,6,0,0,48,64,64,240, - 64,64,64,5,7,7,6,0,254,120,136,136,120,8,8,112, - 5,7,7,6,0,0,128,128,240,136,136,136,136,3,7,7, - 6,1,0,64,0,192,64,64,64,224,4,9,9,6,1,254, - 16,0,48,16,16,16,16,16,224,5,7,7,6,0,0,128, - 128,136,144,224,144,136,3,7,7,6,1,0,192,64,64,64, - 64,64,224,5,5,5,6,0,0,240,168,168,168,168,5,5, - 5,6,0,0,240,136,136,136,136,5,5,5,6,0,0,112, - 136,136,136,112,5,7,7,6,0,254,240,136,136,136,240,128, - 128,5,7,7,6,0,254,120,136,136,136,120,8,8,5,5, - 5,6,0,0,176,200,128,128,128,5,5,5,6,0,0,112, - 128,112,8,240,4,7,7,6,0,0,64,64,240,64,64,64, - 48,5,5,5,6,0,0,136,136,136,136,120,5,5,5,6, - 0,0,136,136,80,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,7,7, - 6,0,254,136,136,136,120,8,136,112,5,5,5,6,0,0, - 248,16,32,64,248,6,9,9,6,0,255,240,240,240,128,156, - 136,156,136,136,4,9,9,6,0,255,240,240,240,16,208,144, - 208,144,144,5,9,9,6,0,255,112,112,0,248,0,112,112, - 32,248,5,3,3,6,0,4,72,168,144,4,9,9,6,1, - 255,240,16,32,64,32,32,32,32,64,6,9,9,6,0,255, - 4,228,4,228,0,20,36,36,204,5,9,9,6,0,255,224, - 32,224,224,0,240,208,208,248,6,8,8,6,0,255,60,40, - 60,44,32,76,68,156,4,9,9,6,0,255,128,240,32,240, - 224,0,240,64,176,5,9,9,6,0,255,32,32,248,32,48, - 96,160,160,32,5,9,9,6,0,255,248,168,248,168,248,32, - 32,32,32,6,9,9,6,0,255,112,32,252,112,168,160,32, - 32,32,5,9,9,6,0,255,112,144,80,32,120,136,40,16, - 96,6,9,9,6,0,255,112,0,252,120,120,120,32,120,240, - 5,9,9,6,0,255,32,32,248,168,168,248,32,32,32,6, - 9,9,6,0,255,16,220,40,204,8,236,4,124,4,4,7, - 7,6,0,0,224,128,192,128,224,0,240,6,9,9,6,0, - 255,16,124,16,28,16,252,36,76,28,4,9,9,6,0,255, - 128,224,128,128,128,240,64,32,128,5,9,9,6,0,255,32, - 248,32,248,248,248,32,248,32,5,9,9,6,0,255,32,32, - 32,248,168,248,168,168,248,6,9,9,6,0,255,36,44,36, - 76,228,168,44,44,36,4,9,9,6,0,255,32,240,32,240, - 0,240,80,240,80,5,9,9,6,0,255,112,16,32,248,40, - 48,32,32,96,5,9,9,6,0,255,32,64,248,136,248,136, - 248,136,248,6,9,9,6,0,255,32,116,112,116,112,120,128, - 40,72,4,9,9,6,0,255,128,224,160,160,224,176,0,160, - 144,6,9,9,6,0,255,4,8,16,32,92,132,28,4,60, - 4,8,8,6,0,255,128,64,32,208,0,128,0,224,6,9, - 9,6,0,255,60,32,44,40,44,76,64,136,136,5,9,9, - 6,0,255,248,128,240,16,240,240,128,144,144,5,9,9,6, - 1,255,8,8,8,120,64,120,0,80,144,4,8,8,6,0, - 255,192,0,224,32,224,0,160,144,6,9,9,6,0,255,36, - 252,120,120,172,60,4,20,124,4,8,8,6,0,255,240,160, - 192,48,192,128,0,224,5,9,9,6,0,255,32,248,112,112, - 112,248,168,32,96,5,9,9,6,0,255,248,200,232,200,232, - 136,232,232,152,6,9,9,6,0,255,60,4,60,36,44,36, - 252,32,32,4,9,9,6,0,255,224,0,224,32,160,32,240, - 32,96,5,9,9,6,0,255,112,32,248,32,248,248,248,32, - 32,6,9,9,6,0,255,96,32,32,80,80,144,136,8,4, - 5,9,9,6,1,255,8,248,128,152,0,56,16,16,32,4, - 8,8,6,0,255,240,16,128,0,192,128,144,224,5,7,7, - 6,0,0,248,8,248,8,8,48,192,4,5,5,6,1,0, - 240,16,80,64,128,4,5,5,6,1,0,48,64,160,32,32, - 5,5,5,6,0,0,32,248,136,16,96,5,4,4,6,0, - 0,112,32,32,248,4,5,5,6,1,0,32,240,96,160,160, - 4,5,5,6,1,0,64,240,80,64,64,4,4,4,6,1, - 0,224,32,32,240,4,5,5,6,1,0,240,16,112,16,240, - 5,4,4,6,0,0,168,168,8,112,5,1,1,6,0,3, - 248,5,7,7,6,0,0,248,8,40,48,32,64,128,4,7, - 7,6,0,0,16,48,96,160,32,32,32,5,7,7,6,0, - 0,32,248,136,8,16,16,96,5,6,6,6,0,0,112,32, - 32,32,32,248,5,7,7,6,0,0,16,248,48,80,80,144, - 16,5,7,7,6,0,0,64,248,72,72,72,136,152,5,7, - 7,6,0,0,32,240,32,32,248,32,32,5,7,7,6,0, - 0,120,136,136,8,16,16,96,5,7,7,6,0,0,128,248, - 144,16,16,16,96,4,7,7,6,1,0,240,16,16,16,16, - 16,240,5,7,7,6,0,0,80,248,80,16,16,16,96,5, - 7,7,6,0,0,232,8,232,8,8,16,96,5,7,7,6, - 0,0,248,8,16,32,80,136,136,5,8,8,6,0,0,64, - 64,248,72,72,64,64,56,5,7,7,6,0,0,136,136,72, - 8,16,16,96,5,8,8,6,0,0,128,248,136,136,104,24, - 16,224,5,7,7,6,0,0,120,16,16,248,16,16,224,5, - 7,7,6,0,0,168,168,168,8,16,16,224,5,7,7,6, - 0,0,112,0,248,16,16,16,96,4,7,7,6,1,0,128, - 128,192,160,144,128,128,5,7,7,6,0,0,16,248,16,16, - 32,32,192,5,6,6,6,0,0,112,0,0,0,0,248,5, - 7,7,6,0,0,120,8,8,80,32,80,136,5,8,8,6, - 0,0,32,120,8,48,112,168,168,32,4,6,6,6,1,1, - 16,16,32,32,64,128,5,6,6,6,0,1,32,16,136,136, - 136,8,5,7,7,6,0,0,128,152,224,128,128,128,120,5, - 7,7,6,0,0,248,8,8,8,16,16,96,5,7,7,6, - 0,0,32,32,80,144,136,8,8,5,7,7,6,0,0,32, - 248,32,32,168,168,168,5,7,7,6,0,0,248,8,8,80, - 32,16,8,5,7,7,6,0,0,112,0,96,0,0,240,8, - 5,7,7,6,0,0,32,64,64,128,136,248,8,5,7,7, - 6,0,0,8,8,80,48,40,72,128,5,7,7,6,0,0, - 240,64,64,248,64,64,56,5,7,7,6,0,0,64,248,72, - 72,80,64,64,5,6,6,6,0,0,112,16,16,16,16,248, - 5,7,7,6,0,0,248,8,8,120,8,8,248,5,7,7, - 6,0,0,112,0,248,8,8,16,96,4,7,7,6,1,0, - 144,144,144,16,16,16,96,5,7,7,6,0,0,32,160,160, - 160,168,168,48,5,7,7,6,0,0,128,128,128,136,136,144, - 224,5,7,7,6,0,0,248,136,136,136,136,136,248,5,7, - 7,6,0,0,248,136,136,8,16,16,96,5,6,6,6,0, - 0,200,8,8,8,48,192,5,2,2,6,0,5,144,72,4, - 4,4,6,0,4,96,144,144,96,6,9,9,6,0,254,56, - 68,64,132,136,252,8,8,4,6,7,7,6,0,255,112,136, - 136,148,252,148,136,3,3,3,6,0,1,192,32,224,5,9, - 9,6,0,255,64,248,64,120,72,168,144,168,72,6,9,9, - 6,0,255,56,72,16,248,216,136,252,80,136,4,7,7,6, - 0,255,240,144,144,144,144,240,16,5,9,9,6,0,255,64, - 240,64,240,240,224,80,72,248,5,9,9,6,1,255,120,8, - 248,168,168,56,56,56,8,5,10,10,6,0,254,240,0,248, - 72,72,224,224,224,0,240,6,9,9,6,0,255,28,208,20, - 20,212,20,16,84,212,5,9,9,6,0,255,248,64,240,240, - 240,240,64,80,80,5,9,9,6,1,255,8,8,120,32,192, - 56,8,48,192,4,7,7,6,0,255,224,64,48,192,0,192, - 48,5,9,9,6,1,255,64,72,0,224,32,32,72,64,184, - 4,9,9,6,0,255,160,240,64,240,64,160,16,0,240,5, - 9,9,6,0,255,64,248,32,248,16,112,128,128,120,0,0, - 0,6,0,8,4,9,9,6,1,255,96,0,240,96,96,96, - 240,144,240,5,9,9,6,0,255,240,144,152,0,248,80,32, - 80,136,5,9,9,6,1,255,8,248,128,56,8,8,72,120, - 128,4,8,8,6,0,255,240,16,192,0,192,0,0,240,6, - 6,6,6,0,1,4,224,172,228,160,228,4,9,9,6,0, - 255,128,192,128,240,224,32,160,32,96,6,8,8,6,0,255, - 16,16,16,28,80,80,80,252,5,9,9,6,0,255,64,240, - 200,136,136,136,152,120,16,5,8,8,6,0,0,224,248,136, - 136,136,136,136,248,6,7,7,6,0,0,32,48,56,252,56, - 48,32,6,7,7,6,0,1,16,56,124,16,16,16,240,5, - 9,9,6,0,255,32,112,168,168,184,136,136,112,32,5,10, - 10,6,0,254,224,128,192,128,176,40,40,48,40,40,5,10, - 10,6,0,254,248,168,136,136,136,136,136,136,168,248,255}; diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index ab61751a74..47571c710f 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -41,11 +41,11 @@ #include "dogm_font_data_6x9_marlin.h" // Height of 'A' is only 6 pixel. #include "dogm_font_data_Marlin_symbols.h" // The Marlin special symbols -#define FONT_STATUSMENU_NAME u8g_font_6x9 // we don't have a small font for Cyrillic, Kana or Kanji +#define FONT_STATUSMENU_NAME u8g_font_6x9 // we don't have a small font for Cyrillic, Kana #define FONT_SPECIAL_NAME Marlin_symbols // save 3120 bytes of PROGMEM by commenting out the next #define -// we don't have a big font for Cyrillic, Kana or Kanji +// we don't have a big font for Cyrillic, Kana #if defined( MAPPER_C2C3 ) || defined( MAPPER_NON ) #define USE_BIG_EDIT_FONT #endif @@ -60,9 +60,6 @@ #elif defined( DISPLAY_CHARSET_ISO10646_KANA ) #include "dogm_font_data_ISO10646_Kana.h" #define FONT_MENU_NAME ISO10646_Kana_5x7 - #elif defined( DISPLAY_CHARSET_KANJI ) - #include "dogm_font_data_6x10_marlin_Kanji.h" - #define FONT_MENU_NAME u8g_font_6x10_marlin #else // fall-back #include // system font #define FONT_MENU_NAME u8g_font_6x10 diff --git a/Marlin/language.h b/Marlin/language.h index b4c6f3aba6..124b7e9910 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -30,7 +30,6 @@ // eu Basque-Euskera // kana Japanese // kana_utf Japanese -// kanji Japanese #ifndef LANGUAGE_INCLUDE // pick your language from the list above diff --git a/Marlin/language_en.h b/Marlin/language_en.h index 51c575aae6..4bc41600f2 100644 --- a/Marlin/language_en.h +++ b/Marlin/language_en.h @@ -13,7 +13,7 @@ #endif //#define SIMULATE_ROMFONT //Comment in to see what is seen on the character based displays -#if !( defined(SIMULATE_ROMFONT)|| defined(DISPLAY_CHARSET_ISO10646_1)|| defined(DISPLAY_CHARSET_ISO10646_5)|| defined(DISPLAY_CHARSET_ISO10646_KANA)|| defined(DISPLAY_CHARSET_KANJI) ) +#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 diff --git a/Marlin/language_kanji.h b/Marlin/language_kanji.h deleted file mode 100644 index 8c98b6a051..0000000000 --- a/Marlin/language_kanji.h +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Japanese (Kanji) - * - * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md - * - */ -#include "Configuration.h" -#ifndef DOGLCD - #include "language_kana.h" // fallback to kana - #define LANGUAGE_KANJI_H -#endif - -#ifndef LANGUAGE_KANJI_H -#define LANGUAGE_KANJI_H - -#define MAPPER_NON -#define DISPLAY_CHARSET_KANJI - -// HINT FOR ichibey; YOU CAN NOW MAKE USE OF THE LAST 8 SYMBOLS FOR YOUT PURPOSE, SINCE THE MARLIN_SYMBOLS NOW HAVE THEIR OWN FONT: - -// 漢字混じり表示 -#define WELCOME_MSG MACHINE_NAME "\x8a\x8b\x90\x91\xa4\xa5\x7f" // "ready." -#define MSG_SD_INSERTED "SD\xb6\xb0\xc4\xde\x20\x84\xa2\xa3\xbb\xda\xcf\xbc\xc0" // "Card inserted" -#define MSG_SD_REMOVED "SD\xb6\xb0\xc4\xde\x20\x84\xe3\xb6\xda\xcf\xbc\xc0" // "Card removed" -#define MSG_MAIN "\xd2\xb2\xdd" // "Main" -#define MSG_AUTOSTART "\x93\x88\xb6\xb6\xb2\xbc" // "Autostart" -#define MSG_DISABLE_STEPPERS "\xd3\xb0\xc0\xb0\xe7\xe8\xe9\xea\x20\xb5\xcc" // "Disable steppers" -#define MSG_AUTO_HOME "\x98\x99\x9a\x9b\xcd \x86\x87\x88\xb6" // "Auto home" -#define MSG_SET_HOME_OFFSETS "\x8c\x8d\x8a\x8b\xb5\xcc\xbe\xaf\xc4\xf1\xf2\xf3\xf4" // "Set home offsets" -#define MSG_SET_ORIGIN "\x8c\x8d\x8a\x8b\xbe\xaf\xc4" // "Set origin" -#define MSG_PREHEAT_PLA "PLA \x92\x94\x95" // "Preheat PLA" -#define MSG_PREHEAT_PLA_N MSG_PREHEAT_PLA " " -#define MSG_PREHEAT_PLA_ALL MSG_PREHEAT_PLA " \x96\x97\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 \x92\x94\x95" // "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\xe5\x94\x95\xb2\x9e\xf7" // "Cooldown" -#define MSG_SWITCH_PS_ON "\xe7\xe8\xe9\xea\x20\xb5\xdd" // "Switch power on" -#define MSG_SWITCH_PS_OFF "\xe7\xe8\xe9\xea\x20\xb5\xcc" // "Switch power off" -#define MSG_EXTRUDE "\x84\x85\xbc\xc0\xde\xbc" // "Extrude" -#define MSG_RETRACT "\xd8\xc4\xd7\xb8\xc4" // "Retract" -#define MSG_MOVE_AXIS "\x8e\x8f\x86\x87\x88\xb6" // "Move axis" -#define MSG_MOVE_X "X\x8e\x8f\x86\x87\x88\xb6" // "Move X" -#define MSG_MOVE_Y "Y\x8e\x8f\x86\x87\x88\xb6" // "Move Y" -#define MSG_MOVE_Z "Z\x8e\x8f\x86\x87\x88\xb6" // "Move Z" -#define MSG_MOVE_E "\xb4\xb8\xbd\xc4\xd9\xb0\xc0\xde\xb0" // "Extruder" -#define MSG_MOVE_01MM "0.1mm \x86\x87\x88\xb6" // "Move 0.1mm" -#define MSG_MOVE_1MM " 1mm \x86\x87\x88\xb6" // "Move 1mm" -#define MSG_MOVE_10MM " 10mm \x86\x87\x88\xb6" // "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\xed\xe6\x82\x83" // "Fan speed" -#define MSG_FLOW "\xed\xee\xd8\x7d" // "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 "\x93\x88\xb6\x80\x81\x82\x83" // "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\xe5\xed\xe6\x82\x83" // "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 "\x80\x81\x82\x83" // "Temperature" -#define MSG_MOTION "\x88\xb6\xef\xf1\xf2\xf3\xf4" // "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 "\xf1\xf2\xf3\xf4\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 "\x8a\x8b\x90\x91\xf1\xf2\xf3\xf4" // "Prepare" -#define MSG_TUNE "\xf1\x9f\x9c\x9d" // "Tune" -#define MSG_PAUSE_PRINT "\xb0\xf5\xf6\xb2\x9e\xf7" // "Pause print" -#define MSG_RESUME_PRINT "\xcc\xdf\xd8\xdd\xc4 \xa0\xa1\x7b\x7c" // "Resume print" -#define MSG_STOP_PRINT "\xcc\xdf\xd8\xdd\xc4 \xb2\x9e\xf7" // "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 \xa0\xa1\x7b\x7c" // "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 "\x88\xb6\xb7\xcf\xbe\xdd" // "No move." -#define MSG_KILLED "\xbc\xae\xb3\xb7\xae" // "KILLED. " -#define MSG_STOPPED "\xb2\x9e\xf7\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\xeb\xec\x84\xe4" // "Change filament" -#define MSG_INIT_SDCARD "SD\xb6\xb0\xc4\xde\\xa0\xa1\xd6\xd0\xba\xd0" // "Init. SD card" -#define MSG_CNG_SDCARD "SD\xb6\xb0\xc4\xde\xeb\xec\x84\xe4" // "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\xe5\x94\x95\x89..." // "Heating..." -#define MSG_HEATING_COMPLETE "\xb6\xe5\x94\x95\xa4\xa5\x7f" // "Heating done." -#define MSG_BED_HEATING "\xcd\xde\xaf\xc4\xde\xb6\xe5\x94\x95\x89" // "Bed Heating." -#define MSG_BED_DONE "\xcd\xde\xaf\xc4\xde\xb6\xe5\x94\x95\xa4\xa5\x7f" // "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_JP2_H diff --git a/Marlin/language_test.h b/Marlin/language_test.h index ba6f7e523f..da79d4f1b6 100644 --- a/Marlin/language_test.h +++ b/Marlin/language_test.h @@ -23,7 +23,7 @@ // 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). -// d.) So for Kanji we use a very special and selected subset of symbols and the direct mapping like in a). + #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 @@ -37,7 +37,7 @@ //#define DISPLAY_CHARSET_ISO10646_1 //#define DISPLAY_CHARSET_ISO10646_5 //#define DISPLAY_CHARSET_ISO10646_KANA -//#define DISPLAY_CHARSET_KANJI + // next 5 lines select variants in this file only @@ -45,7 +45,7 @@ //#define WEST //#define CYRIL //#define KANA -//#define KANJI + // TESTSTRINGS @@ -178,15 +178,11 @@ #endif -#if defined( KANA ) || defined (KANJI) +#if defined( KANA ) #define WELCOME_MSG "Language TEST" #define MSG_WATCH "\001\002\003\004\005\006\007\010\011" - #ifdef KANJI - #define MSG_PREPARE "No UTF8 for Kanji" - #else - #define MSG_PREPARE "UTF8" - #endif + #define MSG_PREPARE "UTF8" #define MSG_CONTROL "ASCII" //#define MSG_MAIN ".." diff --git a/Marlin/utf_mapper.h b/Marlin/utf_mapper.h index f04f1f87cd..5a0ba2f43c 100644 --- a/Marlin/utf_mapper.h +++ b/Marlin/utf_mapper.h @@ -16,8 +16,6 @@ #define MAPPER_ONE_TO_ONE #elif defined( DISPLAY_CHARSET_ISO10646_KANA ) #define MAPPER_ONE_TO_ONE - #elif defined( DISPLAY_CHARSET_KANJI ) - #define MAPPER_NON #endif #else // SIMULATE_ROMFONT #if defined( DISPLAY_CHARSET_HD44780_JAPAN ) From 08e4651ecedb0081e7af7b081e6d7b8e8f7f77ae Mon Sep 17 00:00:00 2001 From: AnHardt Date: Mon, 16 Mar 2015 16:59:14 +0100 Subject: [PATCH 29/57] Corrected cyrillic font again Thank you @Nprod. --- Marlin/dogm_font_data_ISO10646_5_Cyrillic.h | 4 ++-- Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon | Bin 4224 -> 4224 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h index 9c93fc8c52..b44936cefa 100644 --- a/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h +++ b/Marlin/dogm_font_data_ISO10646_5_Cyrillic.h @@ -1,5 +1,5 @@ /* - Fontname: ISO10646_5_Cyrillic v1.2 + 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 @@ -138,7 +138,7 @@ const u8g_fntpgm_uint8_t ISO10646_5_Cyrillic_5x7[2560] U8G_SECTION(".progmem.ISO 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,0,120,40,72,136,248, + 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, diff --git a/Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon b/Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon index bb13545ba81d4580e41adc238070459638b41e9f..f52970cbc7712b5ee871c78a93d4575fd77cf827 100644 GIT binary patch delta 27 icmZorY*5@_#mH#9*_yGFmz|+P!=vLz$L7;~TNwdztO+0h delta 27 icmZorY*5@_#mH#1*_yGFm%T#6qvJ;h!{*a`TNwd$i3uM7 From 7e69f72db661ec4a50ed911e3a8b0ae3feb00bcf Mon Sep 17 00:00:00 2001 From: AnHardt Date: Mon, 16 Mar 2015 17:27:27 +0100 Subject: [PATCH 30/57] Moved font directory. Updated README.fonts --- Marlin/{scripts/Fonts => fonts}/HD44780_C.fon | Bin Marlin/{scripts/Fonts => fonts}/HD44780_J.fon | Bin Marlin/{scripts/Fonts => fonts}/HD44780_W.fon | Bin .../Fonts => fonts}/ISO10646-5_Cyrillic.fon | Bin Marlin/{scripts/Fonts => fonts}/ISO10646_Kana.fon | Bin Marlin/{scripts/Fonts => fonts}/Marlin_symbols.fon | Bin Marlin/{scripts/Fonts => fonts}/README.fonts | 2 +- Marlin/{scripts/Fonts => fonts}/bdf2u8g.exe | Bin Marlin/{scripts/Fonts => fonts}/make_fonts.bat | 0 9 files changed, 1 insertion(+), 1 deletion(-) rename Marlin/{scripts/Fonts => fonts}/HD44780_C.fon (100%) rename Marlin/{scripts/Fonts => fonts}/HD44780_J.fon (100%) rename Marlin/{scripts/Fonts => fonts}/HD44780_W.fon (100%) rename Marlin/{scripts/Fonts => fonts}/ISO10646-5_Cyrillic.fon (100%) rename Marlin/{scripts/Fonts => fonts}/ISO10646_Kana.fon (100%) rename Marlin/{scripts/Fonts => fonts}/Marlin_symbols.fon (100%) rename Marlin/{scripts/Fonts => fonts}/README.fonts (78%) rename Marlin/{scripts/Fonts => fonts}/bdf2u8g.exe (100%) rename Marlin/{scripts/Fonts => fonts}/make_fonts.bat (100%) diff --git a/Marlin/scripts/Fonts/HD44780_C.fon b/Marlin/fonts/HD44780_C.fon similarity index 100% rename from Marlin/scripts/Fonts/HD44780_C.fon rename to Marlin/fonts/HD44780_C.fon diff --git a/Marlin/scripts/Fonts/HD44780_J.fon b/Marlin/fonts/HD44780_J.fon similarity index 100% rename from Marlin/scripts/Fonts/HD44780_J.fon rename to Marlin/fonts/HD44780_J.fon diff --git a/Marlin/scripts/Fonts/HD44780_W.fon b/Marlin/fonts/HD44780_W.fon similarity index 100% rename from Marlin/scripts/Fonts/HD44780_W.fon rename to Marlin/fonts/HD44780_W.fon diff --git a/Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon b/Marlin/fonts/ISO10646-5_Cyrillic.fon similarity index 100% rename from Marlin/scripts/Fonts/ISO10646-5_Cyrillic.fon rename to Marlin/fonts/ISO10646-5_Cyrillic.fon diff --git a/Marlin/scripts/Fonts/ISO10646_Kana.fon b/Marlin/fonts/ISO10646_Kana.fon similarity index 100% rename from Marlin/scripts/Fonts/ISO10646_Kana.fon rename to Marlin/fonts/ISO10646_Kana.fon diff --git a/Marlin/scripts/Fonts/Marlin_symbols.fon b/Marlin/fonts/Marlin_symbols.fon similarity index 100% rename from Marlin/scripts/Fonts/Marlin_symbols.fon rename to Marlin/fonts/Marlin_symbols.fon diff --git a/Marlin/scripts/Fonts/README.fonts b/Marlin/fonts/README.fonts similarity index 78% rename from Marlin/scripts/Fonts/README.fonts rename to Marlin/fonts/README.fonts index 976cdb749f..0bfc9e9889 100644 --- a/Marlin/scripts/Fonts/README.fonts +++ b/Marlin/fonts/README.fonts @@ -1,6 +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 ' and moved to the main directory. +The .h files must be edited to replace '#include "u8g.h"' with '#include ', replace 'U8G_FONT_SECTION' with 'U8G_SECTION', inset '.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/scripts/Fonts/bdf2u8g.exe b/Marlin/fonts/bdf2u8g.exe similarity index 100% rename from Marlin/scripts/Fonts/bdf2u8g.exe rename to Marlin/fonts/bdf2u8g.exe diff --git a/Marlin/scripts/Fonts/make_fonts.bat b/Marlin/fonts/make_fonts.bat similarity index 100% rename from Marlin/scripts/Fonts/make_fonts.bat rename to Marlin/fonts/make_fonts.bat From 8a29dd4839fde0c81cef420c908bf47506c51006 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Mon, 16 Mar 2015 20:18:48 +0100 Subject: [PATCH 31/57] Cleaned typo in dogm_lcd_implementation.h --- Marlin/dogm_lcd_implementation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index ca9a631704..c13c2d32e1 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -34,7 +34,7 @@ #include "DOGMbitmaps.h" #include "ultralcd.h" #include "ultralcd_st7920_u8glib_rrd.h" -#include "configuration.h" +#include "Configuration.h" #include From 1883e1bb602ad054b2dfeb5ae0d65b278ad8475c Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 17 Mar 2015 11:23:44 +0100 Subject: [PATCH 32/57] Applied thinkyheads corrections from 2015-03-17 --- Marlin/Configuration.h | 4 +-- Marlin/dogm_lcd_implementation.h | 4 +-- Marlin/language.h | 4 +-- Marlin/language_an.h | 2 +- Marlin/language_ca.h | 2 +- Marlin/language_de.h | 2 +- Marlin/language_es.h | 2 +- Marlin/language_eu.h | 2 +- Marlin/language_fi.h | 2 +- Marlin/language_fr.h | 2 +- Marlin/language_it.h | 2 +- Marlin/language_kana.h | 2 +- Marlin/language_kana_utf8.h | 2 +- Marlin/language_nl.h | 2 +- Marlin/language_pl.h | 2 +- Marlin/language_pt-br.h | 2 +- Marlin/language_pt.h | 2 +- Marlin/language_ru.h | 2 +- Marlin/language_test.h | 2 +- Marlin/utf_mapper.h | 44 ++++++++++++++++---------------- 20 files changed, 43 insertions(+), 45 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 87102f79a1..1a432f1cc7 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -558,10 +558,10 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o // 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. -// Se also documentation/LCDLanguageFont.md +// 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_CYRILIC + //#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/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index c13c2d32e1..f92696ac80 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -14,8 +14,6 @@ #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. */ @@ -71,7 +69,7 @@ #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_CYRILIC ) + #elif defined( DISPLAY_CHARSET_HD44780_CYRILLIC ) #include "dogm_font_data_HD44780_C.h" #define FONT_MENU_NAME HD44780_C_5x7 #else // fall-back diff --git a/Marlin/language.h b/Marlin/language.h index 5055814966..559e33571b 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -11,7 +11,7 @@ // // ==> ALWAYS TRY TO COMPILE MARLIN WITH/WITHOUT "ULTIPANEL" / "ULTRALCD" / "SDSUPPORT" #define IN "Configuration.h" // ==> ALSO TRY ALL AVAILABLE LANGUAGE OPTIONS -// Se also documentation/LCDLanguageFont.md +// See also documentation/LCDLanguageFont.md // Languages // en English @@ -203,7 +203,7 @@ // LCD Menu Messages -#if !(defined( DISPLAY_CHARSET_HD44780_JAPAN ) || defined( DISPLAY_CHARSET_HD44780_WESTERN ) || defined( DISPLAY_CHARSET_HD44780_CYRILIC )) +#if !(defined( DISPLAY_CHARSET_HD44780_JAPAN ) || defined( DISPLAY_CHARSET_HD44780_WESTERN ) || defined( DISPLAY_CHARSET_HD44780_CYRILLIC )) #define DISPLAY_CHARSET_HD44780_JAPAN #endif diff --git a/Marlin/language_an.h b/Marlin/language_an.h index aef304075b..b8e83d3b3c 100644 --- a/Marlin/language_an.h +++ b/Marlin/language_an.h @@ -2,7 +2,7 @@ * Aragonese * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_AN_H diff --git a/Marlin/language_ca.h b/Marlin/language_ca.h index 8f00f8b7db..f25fe57890 100644 --- a/Marlin/language_ca.h +++ b/Marlin/language_ca.h @@ -2,7 +2,7 @@ * Catalan * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_CA_H diff --git a/Marlin/language_de.h b/Marlin/language_de.h index 2487ba93a2..0f7b832a58 100644 --- a/Marlin/language_de.h +++ b/Marlin/language_de.h @@ -2,7 +2,7 @@ * German * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_DE_H diff --git a/Marlin/language_es.h b/Marlin/language_es.h index 1602c3c1c4..143a1f4579 100644 --- a/Marlin/language_es.h +++ b/Marlin/language_es.h @@ -2,7 +2,7 @@ * Spanish * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_ES_H diff --git a/Marlin/language_eu.h b/Marlin/language_eu.h index 9bce0a7c1a..21cb733a1c 100644 --- a/Marlin/language_eu.h +++ b/Marlin/language_eu.h @@ -2,7 +2,7 @@ * Basque-Euskera * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_EU_H diff --git a/Marlin/language_fi.h b/Marlin/language_fi.h index 711f096395..e1bfbf1af3 100644 --- a/Marlin/language_fi.h +++ b/Marlin/language_fi.h @@ -2,7 +2,7 @@ * Finnish * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_FI_H diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h index 7e1194d7b2..ed65efdbde 100644 --- a/Marlin/language_fr.h +++ b/Marlin/language_fr.h @@ -2,7 +2,7 @@ * French * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_FR_H diff --git a/Marlin/language_it.h b/Marlin/language_it.h index 5b2709faf8..7fbcb46ac6 100644 --- a/Marlin/language_it.h +++ b/Marlin/language_it.h @@ -2,7 +2,7 @@ * Italian * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_IT_H diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h index 5810fa11d4..272440bac6 100644 --- a/Marlin/language_kana.h +++ b/Marlin/language_kana.h @@ -2,7 +2,7 @@ * Japanese (Kana) * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h index d08c188337..94ce69bc4f 100644 --- a/Marlin/language_kana_utf8.h +++ b/Marlin/language_kana_utf8.h @@ -2,7 +2,7 @@ * Japanese (Kana UTF8 version) * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h index 81eef72bbb..bc44dcc7ef 100644 --- a/Marlin/language_nl.h +++ b/Marlin/language_nl.h @@ -2,7 +2,7 @@ * Dutch * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_NL_H diff --git a/Marlin/language_pl.h b/Marlin/language_pl.h index 2d56430248..f654594bc4 100644 --- a/Marlin/language_pl.h +++ b/Marlin/language_pl.h @@ -2,7 +2,7 @@ * Polish * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_PL_H diff --git a/Marlin/language_pt-br.h b/Marlin/language_pt-br.h index 734272a299..060f3ba89b 100644 --- a/Marlin/language_pt-br.h +++ b/Marlin/language_pt-br.h @@ -2,7 +2,7 @@ * Portuguese (Brazil) * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_PT_BR_H diff --git a/Marlin/language_pt.h b/Marlin/language_pt.h index 08274e112f..9d3ff26540 100644 --- a/Marlin/language_pt.h +++ b/Marlin/language_pt.h @@ -2,7 +2,7 @@ * Portuguese * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_PT_H diff --git a/Marlin/language_ru.h b/Marlin/language_ru.h index 3e33598555..b961be7eef 100644 --- a/Marlin/language_ru.h +++ b/Marlin/language_ru.h @@ -2,7 +2,7 @@ * Russian * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_RU_H diff --git a/Marlin/language_test.h b/Marlin/language_test.h index da79d4f1b6..57505bc130 100644 --- a/Marlin/language_test.h +++ b/Marlin/language_test.h @@ -2,7 +2,7 @@ * TEST * * LCD Menu Messages - * Se also documentation/LCDLanguageFont.md + * See also documentation/LCDLanguageFont.md * */ #ifndef LANGUAGE_TEST_H diff --git a/Marlin/utf_mapper.h b/Marlin/utf_mapper.h index 5a0ba2f43c..69e2e5da59 100644 --- a/Marlin/utf_mapper.h +++ b/Marlin/utf_mapper.h @@ -4,9 +4,9 @@ #include "language.h" #ifdef DOGLCD - #define HARDWAERE_CHAR_OUT u8g.print + #define HARDWARE_CHAR_OUT u8g.print #else - #define HARDWAERE_CHAR_OUT lcd.write + #define HARDWARE_CHAR_OUT lcd.write #endif #if !(defined( SIMULATE_ROMFONT )) && defined( DOGLCD ) @@ -90,7 +90,7 @@ #error( "Katakana on a western display makes no sense. There are no matching symbols." ); #endif - #elif defined( DISPLAY_CHARSET_HD44780_CYRILIC ) + #elif defined( DISPLAY_CHARSET_HD44780_CYRILLIC ) #if defined( MAPPER_D0D1 ) #define MAPPER_D0D1_MOD // it is a Russian alphabet translation @@ -120,12 +120,12 @@ #endif #else #error("Something went wrong in the selection of DISPLAY_CHARSET_HD44780's"); - #endif // DISPLAY_CHARSET_HD44780_CYRILIC + #endif // DISPLAY_CHARSET_HD44780_CYRILLIC #endif // SIMULATE_ROMFONT #if defined( MAPPER_NON ) char charset_mapper(char c){ - HARDWAERE_CHAR_OUT( c ); + HARDWARE_CHAR_OUT( c ); return 1; } #elif defined( MAPPER_C2C3 ) @@ -142,17 +142,17 @@ else if (seen_c2){ d &= 0x3f; #ifndef MAPPER_ONE_TO_ONE - HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); + HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); #else - HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; + HARDWARE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d) ) ; #endif } else { - HARDWAERE_CHAR_OUT('?'); + HARDWARE_CHAR_OUT('?'); } } else { - HARDWAERE_CHAR_OUT((char) c ); + HARDWARE_CHAR_OUT((char) c ); } seen_c2 = false; return 1; @@ -172,18 +172,18 @@ } else if (seen_d5) { d &= 0x3f; if ( !utf_hi_char && ( d == 1 )) { - HARDWAERE_CHAR_OUT((char) 0xa2 ); // Ё + HARDWARE_CHAR_OUT((char) 0xa2 ); // Ё } else if ((utf_hi_char == 1) && (d == 0x11)) { - HARDWAERE_CHAR_OUT((char) 0xb5 ); // ё + HARDWARE_CHAR_OUT((char) 0xb5 ); // ё } else { - HARDWAERE_CHAR_OUT((char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x10 ) ); + HARDWARE_CHAR_OUT((char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x10 ) ); } } else { - HARDWAERE_CHAR_OUT('?'); + HARDWARE_CHAR_OUT('?'); } } else { - HARDWAERE_CHAR_OUT((char) c ); + HARDWARE_CHAR_OUT((char) c ); } seen_d5 = false; return 1; @@ -201,15 +201,15 @@ } else if (seen_d5) { d &= 0x3fu; #ifndef MAPPER_ONE_TO_ONE - HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); + HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); #else - HARDWAERE_CHAR_OUT( (char) (0xa0u + ( utf_hi_char << 6 ) + d ) ) ; + HARDWARE_CHAR_OUT( (char) (0xa0u + ( utf_hi_char << 6 ) + d ) ) ; #endif } else { - HARDWAERE_CHAR_OUT('?'); + HARDWARE_CHAR_OUT('?'); } } else { - HARDWAERE_CHAR_OUT((char) c ); + HARDWARE_CHAR_OUT((char) c ); } seen_d5 = false; return 1; @@ -231,15 +231,15 @@ } else if ((seen_e3 == true) && (seen_82_83 == true)){ d &= 0x3f; #ifndef MAPPER_ONE_TO_ONE - HARDWAERE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); + HARDWARE_CHAR_OUT( (char) pgm_read_byte_near( utf_recode + d + ( utf_hi_char << 6 ) - 0x20 ) ); #else - HARDWAERE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d ) ) ; + HARDWARE_CHAR_OUT( (char) (0x80 + ( utf_hi_char << 6 ) + d ) ) ; #endif } else { - HARDWAERE_CHAR_OUT((char) '?' ); + HARDWARE_CHAR_OUT((char) '?' ); } } else { - HARDWAERE_CHAR_OUT((char) c ); + HARDWARE_CHAR_OUT((char) c ); } seen_e3 = false; seen_82_83 = false; From eff6a2bd2e558fae617f1f27c9115e1586b54667 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Thu, 19 Mar 2015 12:58:43 +0100 Subject: [PATCH 33/57] Clean out a warning in ultralcd_implementation_hitachi_HD44780.h lcd_print( about array index. --- Marlin/ultralcd_implementation_hitachi_HD44780.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h index 507b747b0b..8ac0fac59f 100644 --- a/Marlin/ultralcd_implementation_hitachi_HD44780.h +++ b/Marlin/ultralcd_implementation_hitachi_HD44780.h @@ -414,7 +414,7 @@ char lcd_printPGM(const char* str) { char lcd_print(char* str) { char c; - char i = 0; + unsigned char i = 0; char n = 0; while((c = str[i++])) { n += charset_mapper(c); From 8c5bb3874871e1baf4efd5ce141c113053a36dc9 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Fri, 20 Mar 2015 14:12:12 +0100 Subject: [PATCH 34/57] Removed now unneded FONT_STATUSMENU --- Marlin/dogm_lcd_implementation.h | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index cd0e09a17d..4abf67aa00 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -74,12 +74,9 @@ #endif #endif // SIMULATE_ROMFONT -#define FONT_STATUSMENU_NAME FONT_MENU_NAME - -#define FONT_STATUSMENU 1 +#define FONT_MENU 1 #define FONT_SPECIAL 2 #define FONT_MENU_EDIT 3 -#define FONT_MENU 4 // DOGM parameters (size in pixels) #define DOG_CHAR_WIDTH 6 @@ -137,7 +134,6 @@ 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; @@ -227,7 +223,7 @@ static void _draw_heater_status(int x, int heater) { bool isBed = heater < 0; int y = 17 + (isBed ? 1 : 0); - lcd_setFont(FONT_STATUSMENU); + lcd_setFont(FONT_MENU); u8g.setPrintPos(x,7); lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5))); lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); @@ -252,7 +248,8 @@ static void lcd_implementation_status_screen() { // Symbols menu graphics, animated fan u8g.drawBitmapP(9,1,STATUS_SCREENBYTEWIDTH,STATUS_SCREENHEIGHT, (blink % 2) && fanSpeed ? status_screen0_bmp : status_screen1_bmp); - + lcd_setFont(FONT_MENU); + #ifdef SDSUPPORT // SD Card Symbol u8g.drawBox(42,42,8,7); @@ -264,8 +261,6 @@ static void lcd_implementation_status_screen() { u8g.drawFrame(54,49,73,4); // SD Card Progress bar and clock - lcd_setFont(FONT_STATUSMENU); - if (IS_SD_PRINTING) { // Progress bar solid part u8g.drawBox(55, 50, (unsigned int)(71.f * card.percentDone() / 100.f), 2); @@ -290,7 +285,6 @@ static void lcd_implementation_status_screen() { if (EXTRUDERS < 4) _draw_heater_status(81, -1); // Fan - lcd_setFont(FONT_STATUSMENU); u8g.setPrintPos(104,27); #if defined(FAN_PIN) && FAN_PIN > -1 int per = ((fanSpeed + 1) * 100) / 256; @@ -307,7 +301,6 @@ static void lcd_implementation_status_screen() { // X, Y, Z-Coordinates #define XYZ_BASELINE 38 - u8g.setFont(FONT_STATUSMENU); u8g.drawBox(0,30,128,9); u8g.setColorIndex(0); // white on black u8g.setPrintPos(2,XYZ_BASELINE); @@ -331,16 +324,13 @@ static void lcd_implementation_status_screen() { u8g.setColorIndex(1); // black on white // Feedrate - lcd_setFont(FONT_MENU); u8g.setPrintPos(3,49); lcd_print(LCD_STR_FEEDRATE[0]); - u8g.setFont(FONT_STATUSMENU); u8g.setPrintPos(12,49); lcd_print(itostr3(feedmultiply)); lcd_print('%'); // Status line - u8g.setFont(FONT_STATUSMENU); u8g.setPrintPos(0,63); #ifndef FILAMENT_LCD_DISPLAY lcd_print(lcd_status_message); From b00a531df806f089b3fda18a70d226f71cc47a24 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 24 Mar 2015 17:01:56 +0100 Subject: [PATCH 35/57] Revert "Removed now unneded FONT_STATUSMENU" This reverts commit 8c5bb3874871e1baf4efd5ce141c113053a36dc9. --- Marlin/dogm_lcd_implementation.h | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index 4abf67aa00..cd0e09a17d 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -74,9 +74,12 @@ #endif #endif // SIMULATE_ROMFONT -#define FONT_MENU 1 +#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 @@ -134,6 +137,7 @@ 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; @@ -223,7 +227,7 @@ static void _draw_heater_status(int x, int heater) { bool isBed = heater < 0; int y = 17 + (isBed ? 1 : 0); - lcd_setFont(FONT_MENU); + lcd_setFont(FONT_STATUSMENU); u8g.setPrintPos(x,7); lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5))); lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); @@ -248,8 +252,7 @@ static void lcd_implementation_status_screen() { // Symbols menu graphics, animated fan u8g.drawBitmapP(9,1,STATUS_SCREENBYTEWIDTH,STATUS_SCREENHEIGHT, (blink % 2) && fanSpeed ? status_screen0_bmp : status_screen1_bmp); - lcd_setFont(FONT_MENU); - + #ifdef SDSUPPORT // SD Card Symbol u8g.drawBox(42,42,8,7); @@ -261,6 +264,8 @@ static void lcd_implementation_status_screen() { u8g.drawFrame(54,49,73,4); // SD Card Progress bar and clock + lcd_setFont(FONT_STATUSMENU); + if (IS_SD_PRINTING) { // Progress bar solid part u8g.drawBox(55, 50, (unsigned int)(71.f * card.percentDone() / 100.f), 2); @@ -285,6 +290,7 @@ static void lcd_implementation_status_screen() { if (EXTRUDERS < 4) _draw_heater_status(81, -1); // Fan + lcd_setFont(FONT_STATUSMENU); u8g.setPrintPos(104,27); #if defined(FAN_PIN) && FAN_PIN > -1 int per = ((fanSpeed + 1) * 100) / 256; @@ -301,6 +307,7 @@ static void lcd_implementation_status_screen() { // X, Y, Z-Coordinates #define XYZ_BASELINE 38 + u8g.setFont(FONT_STATUSMENU); u8g.drawBox(0,30,128,9); u8g.setColorIndex(0); // white on black u8g.setPrintPos(2,XYZ_BASELINE); @@ -324,13 +331,16 @@ static void lcd_implementation_status_screen() { u8g.setColorIndex(1); // black on white // Feedrate + lcd_setFont(FONT_MENU); u8g.setPrintPos(3,49); lcd_print(LCD_STR_FEEDRATE[0]); + u8g.setFont(FONT_STATUSMENU); u8g.setPrintPos(12,49); lcd_print(itostr3(feedmultiply)); lcd_print('%'); // Status line + u8g.setFont(FONT_STATUSMENU); u8g.setPrintPos(0,63); #ifndef FILAMENT_LCD_DISPLAY lcd_print(lcd_status_message); From c686069ccd24d29d12768b655fa7c44dc96289ac Mon Sep 17 00:00:00 2001 From: AnHardt Date: Mon, 16 Mar 2015 11:18:27 +0100 Subject: [PATCH 36/57] Revert "Remove 6x9 font" This reverts commit e6cb8ee1884db31d0a4034ded7f26e928e7b8a22. Conflicts: Marlin/dogm_lcd_implementation.h Confilkt solved Needs rework. --- Marlin/dogm_lcd_implementation.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index cd0e09a17d..812c290f0b 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -43,6 +43,8 @@ #if defined( MAPPER_C2C3 ) || defined( MAPPER_NON ) #define USE_BIG_EDIT_FONT #endif +#define FONT_STATUSMENU u8g_font_6x9 +#define FONT_MENU u8g_font_6x10_marlin #ifndef SIMULATE_ROMFONT #if defined( DISPLAY_CHARSET_ISO10646_1 ) @@ -233,6 +235,7 @@ static void _draw_heater_status(int x, int heater) { lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); u8g.setPrintPos(x,28); 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); From 4beffbca691dd2159035f1dad40d0180be62d731 Mon Sep 17 00:00:00 2001 From: AnHardt Date: Tue, 24 Mar 2015 23:40:04 +0100 Subject: [PATCH 37/57] Make SMALL_INFOFONT configurable. Tweak the documentation --- Documentation/LCDLanguageFont.md | 14 ++++++------ Marlin/dogm_lcd_implementation.h | 39 +++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/Documentation/LCDLanguageFont.md b/Documentation/LCDLanguageFont.md index 2d6b9cbf7a..a1acfb63fb 100644 --- a/Documentation/LCDLanguageFont.md +++ b/Documentation/LCDLanguageFont.md @@ -1,13 +1,13 @@ # LCD Language Font System We deal with a variety of different displays. -And we try to display a lot of different languages on them. +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 +* 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. @@ -21,13 +21,13 @@ We have two different technologies for the displays: 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 +* 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 are to big for some locations on the info-screen we use a full ISO10646-1 font in the size of 6x9. + * 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 @@ -55,7 +55,7 @@ We have two different technologies for the displays: ## 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 thrue 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.) + 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. @@ -126,7 +126,7 @@ We have two different technologies for the displays: * 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' a 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. + 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') @@ -134,7 +134,7 @@ We have two different technologies for the displays: ## 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. + 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 "РСТУФХЦЧШЩЪЫЬЭЮЯ" diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index 812c290f0b..205b69589f 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -35,16 +35,24 @@ #include "ultralcd_st7920_u8glib_rrd.h" #include "Configuration.h" -#include "dogm_font_data_Marlin_symbols.h" // The Marlin special symbols -#define FONT_SPECIAL_NAME Marlin_symbols - // 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 +// #define USE_BIG_EDIT_FONT #endif -#define FONT_STATUSMENU u8g_font_6x9 -#define FONT_MENU u8g_font_6x10_marlin + +// 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 + #define FONT_STATUSMENU_NAME FONT_MENU_NAME +#endif + +#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 ) @@ -76,7 +84,7 @@ #endif #endif // SIMULATE_ROMFONT -#define FONT_STATUSMENU_NAME FONT_MENU_NAME +//#define FONT_STATUSMENU_NAME FONT_MENU_NAME #define FONT_STATUSMENU 1 #define FONT_SPECIAL 2 @@ -310,8 +318,13 @@ static void lcd_implementation_status_screen() { // 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); lcd_print('X'); @@ -337,14 +350,18 @@ static void lcd_implementation_status_screen() { lcd_setFont(FONT_MENU); u8g.setPrintPos(3,49); lcd_print(LCD_STR_FEEDRATE[0]); - u8g.setFont(FONT_STATUSMENU); + lcd_setFont(FONT_STATUSMENU); u8g.setPrintPos(12,49); 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 lcd_print(lcd_status_message); #else From 4c3cbc09619155d0c397b46755129b55933f25c8 Mon Sep 17 00:00:00 2001 From: Christian Bohn Date: Wed, 25 Mar 2015 12:23:50 +0100 Subject: [PATCH 38/57] use only one implementation for beeper feedback --- Marlin/dogm_lcd_implementation.h | 12 --------- Marlin/ultralcd.cpp | 23 +++++++++++++++- .../ultralcd_implementation_hitachi_HD44780.h | 26 ------------------- 3 files changed, 22 insertions(+), 39 deletions(-) diff --git a/Marlin/dogm_lcd_implementation.h b/Marlin/dogm_lcd_implementation.h index 7025e87bbd..e38b1d2a40 100644 --- a/Marlin/dogm_lcd_implementation.h +++ b/Marlin/dogm_lcd_implementation.h @@ -408,16 +408,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/ultralcd.cpp b/Marlin/ultralcd.cpp index f6af156d53..846a5ac096 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -1137,7 +1137,28 @@ 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 +#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) +#define LCD_FEEDBACK_FREQUENCY_HZ 500 +#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 50 +#endif + const unsigned int delay = 1000000 / LCD_FEEDBACK_FREQUENCY_HZ / 2; + int8_t 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 **/ diff --git a/Marlin/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h index 044ac95eee..c303ff06a3 100644 --- a/Marlin/ultralcd_implementation_hitachi_HD44780.h +++ b/Marlin/ultralcd_implementation_hitachi_HD44780.h @@ -709,32 +709,6 @@ static void lcd_implementation_drawmenu_sddirectory(bool sel, uint8_t row, const #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() { From 2dfd0e5ce73f1948494267aa9fe2f3f80c1cc3f0 Mon Sep 17 00:00:00 2001 From: chris-bo Date: Wed, 25 Mar 2015 12:44:29 +0100 Subject: [PATCH 39/57] Update Configuration.h documentation how to disable buzzer feedback --- Marlin/Configuration.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index f5a36e6b9c..cffcf40c46 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -579,8 +579,9 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o //#define ENCODER_STEPS_PER_MENU_ITEM 5 // Set according to ENCODER_PULSES_PER_STEP or your liking //#define ULTIMAKERCONTROLLER //as available from the Ultimaker online store. //#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 +#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 From 96b5da71983adffa86dffa5961da78aa24183fb4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Mar 2015 20:36:24 -0700 Subject: [PATCH 40/57] Fix up bed leveling code - Init `zprobe_zoffset` - Remove `current_position[Z_AXIS] = zprobe_zoffset` lines from the `set_bed_level_equation_*` functions - Apply standards to `mesh_bed_leveling` files - Document `MESH_BED_LEVELING` --- Marlin/ConfigurationStore.cpp | 2 +- Marlin/Marlin_main.cpp | 287 +++++++++++++++++----------------- Marlin/mesh_bed_leveling.cpp | 22 ++- Marlin/mesh_bed_leveling.h | 62 ++++---- 4 files changed, 181 insertions(+), 192 deletions(-) diff --git a/Marlin/ConfigurationStore.cpp b/Marlin/ConfigurationStore.cpp index fc485e2262..a0be202767 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 diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index b3235f5595..ff6e964990 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -255,7 +255,7 @@ 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; +float zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER; // Extruder offset #if EXTRUDERS > 1 @@ -1092,9 +1092,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 @@ -1121,9 +1118,6 @@ 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]); } @@ -2010,8 +2004,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; @@ -2053,7 +2058,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; @@ -2063,16 +2068,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")); @@ -2080,9 +2083,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); @@ -2091,9 +2092,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. @@ -2154,9 +2153,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) SERIAL_PROTOCOLPGM("G29 Auto Bed Leveling\n"); @@ -2210,7 +2209,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 @@ -2218,19 +2217,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]); - #endif + #else //!DELTA + // make sure the bed_level_rotation_matrix is identity or the planner will get it wrong + //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 //!DELTA setup_for_endstop_move(); @@ -2242,26 +2240,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; @@ -2294,12 +2290,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; @@ -2316,16 +2312,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 @@ -2333,60 +2329,61 @@ 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 + 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 - set_bed_level_equation_lsq(plane_equation_coefficients); - free(plane_equation_coefficients); - #else - extrapolate_unprobed_bed_level(); - print_bed_level(); - #endif + set_bed_level_equation_lsq(plane_equation_coefficients); + free(plane_equation_coefficients); + + #endif // !DELTA #else // !AUTO_BED_LEVELING_GRID @@ -2409,33 +2406,33 @@ 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:"); - - // 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. - 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 + #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. + 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 - #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 diff --git a/Marlin/mesh_bed_leveling.cpp b/Marlin/mesh_bed_leveling.cpp index b383fe589a..a48a6e6195 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 From 5261d35737f4a129327de8c5b9ed7e7f4cccbe30 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Mar 2015 21:20:50 -0700 Subject: [PATCH 41/57] Fix custom m-code behavior MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don’t set CUSTOM_M_CODE_SET_Z_PROBE_OFFSET if there’s no Z probe --- Marlin/Configuration.h | 8 +++++--- Marlin/configurator/config/Configuration.h | 8 +++++--- Marlin/example_configurations/Felix/Configuration.h | 8 +++++--- Marlin/example_configurations/Felix/Configuration_DUAL.h | 8 +++++--- Marlin/example_configurations/Hephestos/Configuration.h | 8 +++++--- Marlin/example_configurations/K8200/Configuration.h | 8 +++++--- Marlin/example_configurations/SCARA/Configuration.h | 8 +++++--- Marlin/example_configurations/WITBOX/Configuration.h | 8 +++++--- .../example_configurations/delta/generic/Configuration.h | 8 +++++--- .../delta/kossel_mini/Configuration.h | 8 +++++--- Marlin/example_configurations/makibox/Configuration.h | 8 +++++--- .../example_configurations/tvrrug/Round2/Configuration.h | 8 +++++--- 12 files changed, 60 insertions(+), 36 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index f5a36e6b9c..cb46c530e4 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -533,9 +533,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 diff --git a/Marlin/configurator/config/Configuration.h b/Marlin/configurator/config/Configuration.h index 71cbdebaec..78c40b2e9b 100644 --- a/Marlin/configurator/config/Configuration.h +++ b/Marlin/configurator/config/Configuration.h @@ -570,9 +570,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/example_configurations/Felix/Configuration.h b/Marlin/example_configurations/Felix/Configuration.h index e9801813f8..17631860c8 100644 --- a/Marlin/example_configurations/Felix/Configuration.h +++ b/Marlin/example_configurations/Felix/Configuration.h @@ -512,9 +512,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 e9e4623cab..e72277417c 100644 --- a/Marlin/example_configurations/Felix/Configuration_DUAL.h +++ b/Marlin/example_configurations/Felix/Configuration_DUAL.h @@ -512,9 +512,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 c5b0243d57..1e726a0b76 100644 --- a/Marlin/example_configurations/Hephestos/Configuration.h +++ b/Marlin/example_configurations/Hephestos/Configuration.h @@ -540,9 +540,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 bc0f3e5dfe..edb026b7af 100644 --- a/Marlin/example_configurations/K8200/Configuration.h +++ b/Marlin/example_configurations/K8200/Configuration.h @@ -544,9 +544,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 d42bebe3af..79b3ded980 100644 --- a/Marlin/example_configurations/SCARA/Configuration.h +++ b/Marlin/example_configurations/SCARA/Configuration.h @@ -570,9 +570,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 481b591255..6362bb9971 100644 --- a/Marlin/example_configurations/WITBOX/Configuration.h +++ b/Marlin/example_configurations/WITBOX/Configuration.h @@ -537,9 +537,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 0baf7de1c0..9a41656054 100644 --- a/Marlin/example_configurations/delta/generic/Configuration.h +++ b/Marlin/example_configurations/delta/generic/Configuration.h @@ -553,9 +553,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/kossel_mini/Configuration.h b/Marlin/example_configurations/delta/kossel_mini/Configuration.h index 9f5f89ca5a..ca77c39848 100644 --- a/Marlin/example_configurations/delta/kossel_mini/Configuration.h +++ b/Marlin/example_configurations/delta/kossel_mini/Configuration.h @@ -555,9 +555,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 diff --git a/Marlin/example_configurations/makibox/Configuration.h b/Marlin/example_configurations/makibox/Configuration.h index f6561b3af8..341ac60348 100644 --- a/Marlin/example_configurations/makibox/Configuration.h +++ b/Marlin/example_configurations/makibox/Configuration.h @@ -535,9 +535,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 17928b536b..da82ccd636 100644 --- a/Marlin/example_configurations/tvrrug/Round2/Configuration.h +++ b/Marlin/example_configurations/tvrrug/Round2/Configuration.h @@ -542,9 +542,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 From 32331faee49b426bf5966816687dc56fd0aa8ea7 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Mar 2015 22:13:59 -0700 Subject: [PATCH 42/57] Prettify Bed Level Correction Matrix - Put + in front of positive values in the output --- Marlin/vector_3.cpp | 84 ++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 54 deletions(-) diff --git a/Marlin/vector_3.cpp b/Marlin/vector_3.cpp index 2e42da5534..681eceec2e 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(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]; @@ -150,6 +125,7 @@ void matrix_3x3::debug(char* 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 From abadeac08dd19739d30ef5d5c54086772ca7f022 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Mar 2015 23:06:33 -0700 Subject: [PATCH 43/57] Group zprobe_zoffset with bed leveling --- Marlin/ConfigurationStore.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/ConfigurationStore.cpp b/Marlin/ConfigurationStore.cpp index ac41d7b659..2ae1e19a82 100644 --- a/Marlin/ConfigurationStore.cpp +++ b/Marlin/ConfigurationStore.cpp @@ -470,9 +470,13 @@ void Config_ResetDefault() { max_e_jerk = DEFAULT_EJERK; home_offset[X_AXIS] = home_offset[Y_AXIS] = home_offset[Z_AXIS] = 0; - #if defined(MESH_BED_LEVELING) + #ifdef MESH_BED_LEVELING mbl.active = 0; - #endif // MESH_BED_LEVELING + #endif + + #ifdef ENABLE_AUTO_BED_LEVELING + zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER; + #endif #ifdef DELTA endstop_adj[X_AXIS] = endstop_adj[Y_AXIS] = endstop_adj[Z_AXIS] = 0; @@ -493,10 +497,6 @@ void Config_ResetDefault() { absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED; #endif - #ifdef ENABLE_AUTO_BED_LEVELING - zprobe_zoffset = -Z_PROBE_OFFSET_FROM_EXTRUDER; - #endif - #ifdef DOGLCD lcd_contrast = DEFAULT_LCD_CONTRAST; #endif From eab5fad53983b1ca39fa3e29e2d67ec8db706794 Mon Sep 17 00:00:00 2001 From: Christian Bohn Date: Thu, 26 Mar 2015 09:00:34 +0100 Subject: [PATCH 44/57] code formatting --- Marlin/Configuration.h | 4 ++-- Marlin/ultralcd.cpp | 48 +++++++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index cffcf40c46..7ee90d1179 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -579,8 +579,8 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o //#define ENCODER_STEPS_PER_MENU_ITEM 5 // Set according to ENCODER_PULSES_PER_STEP or your liking //#define ULTIMAKERCONTROLLER //as available from the Ultimaker online store. //#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 +//#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) diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 846a5ac096..0bc49dea5f 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -1137,28 +1137,32 @@ menu_edit_type(unsigned long, long5, ftostr5, 0.01) static void lcd_quick_feedback() { lcdDrawUpdate = 2; blocking_enc = millis() + 500; - -#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) -#define LCD_FEEDBACK_FREQUENCY_HZ 500 -#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 50 -#endif - const unsigned int delay = 1000000 / LCD_FEEDBACK_FREQUENCY_HZ / 2; - int8_t i = LCD_FEEDBACK_FREQUENCY_DURATION_MS * LCD_FEEDBACK_FREQUENCY_HZ / 1000; - while (i--) { - WRITE(BEEPER,HIGH); - delayMicroseconds(delay); - WRITE(BEEPER,LOW); - delayMicroseconds(delay); -} -#endif + + #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 **/ From 78090275a9999f8fd4a335576891f7087a2c304b Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Mar 2015 13:52:48 -0700 Subject: [PATCH 45/57] Fix probe range editing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Increase the probe offset range to -20…20 - Apply the range limits to the menu item --- Marlin/Configuration.h | 4 ++-- Marlin/ultralcd.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index d191ead2ad..760c3f2602 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -534,8 +534,8 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o #ifdef CUSTOM_M_CODES #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 + #define Z_PROBE_OFFSET_RANGE_MIN -20 + #define Z_PROBE_OFFSET_RANGE_MAX 20 #endif #endif diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index f6af156d53..6233271818 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); From 04328d7537807ebfe0520927aaf686a4b3a6969e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Mar 2015 15:29:16 -0700 Subject: [PATCH 46/57] Add zprobe_zoffset in set_bed_level_equation_* - Also a small tweak to SanityCheck.h --- Marlin/Marlin_main.cpp | 5 ++--- Marlin/SanityCheck.h | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 8b4472ab71..19d07cbe79 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -1090,7 +1090,7 @@ static void set_bed_level_equation_lsq(double *plane_equation_coefficients) // corrected_position.debug("position after"); current_position[X_AXIS] = corrected_position.x; current_position[Y_AXIS] = corrected_position.y; - current_position[Z_AXIS] = corrected_position.z; + current_position[Z_AXIS] = corrected_position.z + zprobe_zoffset; plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); } @@ -1116,10 +1116,9 @@ static void set_bed_level_equation_3pts(float z_at_pt_1, float z_at_pt_2, float vector_3 corrected_position = plan_get_position(); current_position[X_AXIS] = corrected_position.x; current_position[Y_AXIS] = corrected_position.y; - current_position[Z_AXIS] = corrected_position.z; + current_position[Z_AXIS] = corrected_position.z + 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 diff --git a/Marlin/SanityCheck.h b/Marlin/SanityCheck.h index a8937b44ba..d5183abbaa 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't 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't 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't 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't 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)) From 53169d96e8f2df88b8bd0bd45234235c65dc78aa Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Mar 2015 16:02:15 -0700 Subject: [PATCH 47/57] Set temp_meas_ready in set_current_temp_raw --- Marlin/temperature.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index cb70013246..0450d1ccd2 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -226,7 +226,7 @@ void PID_autotune(float temp, int extruder, int ncycles) unsigned long ms = millis(); - if (temp_meas_ready == true) { // temp sample ready + if (temp_meas_ready) { // temp sample ready updateTemperaturesFromRawValues(); input = (extruder<0)?current_temperature_bed:current_temperature[extruder]; @@ -1198,6 +1198,7 @@ static void set_current_temp_raw() { redundant_temperature_raw = raw_temp_value[1]; #endif current_temperature_bed_raw = raw_temp_bed_value; + temp_meas_ready = true; } // @@ -1507,16 +1508,14 @@ ISR(TIMER0_COMPB_vect) { } // switch(temp_state) if (temp_count >= OVERSAMPLENR) { // 10 * 16 * 1/(16000000/64/256) = 164ms. - if (!temp_meas_ready) { //Only update the raw values if they have been read. Else we could be updating them during reading. - set_current_temp_raw(); - } //!temp_meas_ready + // Update the raw values if they've been read. Else we could be updating them during reading. + if (!temp_meas_ready) set_current_temp_raw(); // Filament Sensor - can be read any time since IIR filtering is used #if HAS_FILAMENT_SENSOR current_raw_filwidth = raw_filwidth_value >> 10; // Divide to get to 0-16384 range since we used 1/128 IIR filter approach #endif - temp_meas_ready = true; temp_count = 0; for (int i = 0; i < TEMP_SENSOR_COUNT; i++) raw_temp_value[i] = 0; raw_temp_bed_value = 0; From 0b3243155109c9c946ddc818919efb9099aa9ff6 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Mar 2015 16:20:23 -0700 Subject: [PATCH 48/57] Remove abs() from planeNormal.z --- Marlin/Marlin_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 36156a3d2a..47a4a7908d 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -1114,7 +1114,7 @@ static void set_bed_level_equation_3pts(float z_at_pt_1, float z_at_pt_2, float 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)); + planeNormal = vector_3(planeNormal.x, planeNormal.y, planeNormal.z); plan_bed_level_matrix = matrix_3x3::create_look_at(planeNormal); From b76a352d41a2483409dfd471457d0db4fc0b9231 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Mar 2015 17:14:07 -0700 Subject: [PATCH 49/57] Fix the planeNormal calculation --- Marlin/Marlin_main.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 47a4a7908d..f1667cbf8e 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -1110,11 +1110,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, 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); From 267d6bef15f7014b16f3fa093dc4a4f1fef621c3 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Mar 2015 20:07:17 -0700 Subject: [PATCH 50/57] Eliminate most warnings - Fix a bug reading `code_value` for `M503 Sn` - Hide and remove unused variables --- Marlin/Marlin_main.cpp | 36 +++++++++++++++++++++--------------- Marlin/stepper.cpp | 6 +++--- Marlin/temperature.cpp | 2 +- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index f1667cbf8e..ee620bfbba 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -3548,7 +3548,6 @@ inline void gcode_M200() { } } - float area = .0; if (code_seen('D')) { float diameter = code_value(); // setting any extruder filament size disables volumetric on the assumption that @@ -4286,7 +4285,7 @@ inline void gcode_M502() { * M503: print settings currently in memory */ inline void gcode_M503() { - Config_PrintSettings(code_seen('S') && code_value == 0); + Config_PrintSettings(code_seen('S') && code_value() == 0); } #ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED @@ -4583,9 +4582,14 @@ inline void gcode_T() { SERIAL_ECHOLN(MSG_INVALID_EXTRUDER); } else { - boolean make_move = false; + #if EXTRUDERS > 1 + bool make_move = false; + #endif + if (code_seen('F')) { - make_move = true; + #if EXTRUDERS > 1 + make_move = true; + #endif next_feedrate = code_value(); if (next_feedrate > 0.0) feedrate = next_feedrate; } @@ -5182,20 +5186,22 @@ void ClearToSend() SERIAL_PROTOCOLLNPGM(MSG_OK); } -void get_coordinates() -{ - bool seen[4]={false,false,false,false}; - 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]; - seen[i]=true; +void get_coordinates() { + for (int i = 0; i < NUM_AXIS; i++) { + float dest; + if (code_seen(axis_codes[i])) { + dest = code_value(); + if (axis_relative_modes[i] || relative_mode) + dest += current_position[i]; } - else destination[i] = current_position[i]; //Are these else lines really needed? + else + dest = current_position[i]; + + destination[i] = dest; } - 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/stepper.cpp b/Marlin/stepper.cpp index 8be4b98af4..8d55d7ba3d 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -1176,8 +1176,6 @@ void digipot_current(uint8_t driver, int current) { } void microstep_init() { - const uint8_t microstep_modes[] = MICROSTEP_MODES; - #if defined(E1_MS1_PIN) && E1_MS1_PIN >= 0 pinMode(E1_MS1_PIN,OUTPUT); pinMode(E1_MS2_PIN,OUTPUT); @@ -1192,7 +1190,9 @@ void microstep_init() { pinMode(Z_MS2_PIN,OUTPUT); pinMode(E0_MS1_PIN,OUTPUT); pinMode(E0_MS2_PIN,OUTPUT); - for (int i = 0; i <= 4; i++) microstep_mode(i, microstep_modes[i]); + const uint8_t microstep_modes[] = MICROSTEP_MODES; + for (int i = 0; i < sizeof(microstep_modes) / sizeof(microstep_modes[0]); i++) + microstep_mode(i, microstep_modes[i]); #endif } diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 4a5f7a7e5f..6b26b0b5c3 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -55,7 +55,7 @@ int target_temperature[EXTRUDERS] = { 0 }; int target_temperature_bed = 0; -int current_temperature_raw[EXTRUDERS] = { 0 }; +int current_temperature_raw[4] = { 0 }; float current_temperature[EXTRUDERS] = { 0.0 }; int current_temperature_bed_raw = 0; float current_temperature_bed = 0.0; From b2496533c6a5e632ec2fd537dac4ccfbbd53b4a9 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Mar 2015 20:30:14 -0700 Subject: [PATCH 51/57] Put " M" into pmem --- Marlin/ConfigurationStore.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Marlin/ConfigurationStore.cpp b/Marlin/ConfigurationStore.cpp index 2ae1e19a82..939d83f9e3 100644 --- a/Marlin/ConfigurationStore.cpp +++ b/Marlin/ConfigurationStore.cpp @@ -754,8 +754,7 @@ void Config_PrintSettings(bool forReplay) { SERIAL_ECHOLNPGM("Z-Probe Offset (mm):"); SERIAL_ECHO_START; } - SERIAL_ECHO(" M"); - SERIAL_ECHO(CUSTOM_M_CODE_SET_Z_PROBE_OFFSET); + SERIAL_ECHOPAIR(" M", CUSTOM_M_CODE_SET_Z_PROBE_OFFSET); SERIAL_ECHOPAIR(" Z", -zprobe_zoffset); #else if (!forReplay) { From 460f73056bd20458380c17fedaa5204e9b912570 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Mar 2015 00:46:39 -0700 Subject: [PATCH 52/57] Fix ECHOPAIR ambiguity - Also patch up some warnings --- Marlin/ConfigurationStore.cpp | 2 +- Marlin/Marlin_main.cpp | 2 +- Marlin/vector_3.cpp | 4 ++-- Marlin/vector_3.h | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/ConfigurationStore.cpp b/Marlin/ConfigurationStore.cpp index 939d83f9e3..3872b505d0 100644 --- a/Marlin/ConfigurationStore.cpp +++ b/Marlin/ConfigurationStore.cpp @@ -754,7 +754,7 @@ void Config_PrintSettings(bool forReplay) { SERIAL_ECHOLNPGM("Z-Probe Offset (mm):"); SERIAL_ECHO_START; } - SERIAL_ECHOPAIR(" M", CUSTOM_M_CODE_SET_Z_PROBE_OFFSET); + SERIAL_ECHOPAIR(" M", (unsigned long)CUSTOM_M_CODE_SET_Z_PROBE_OFFSET); SERIAL_ECHOPAIR(" Z", -zprobe_zoffset); #else if (!forReplay) { diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index ee620bfbba..70fd46957f 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -2922,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 diff --git a/Marlin/vector_3.cpp b/Marlin/vector_3.cpp index 681eceec2e..243f0838f0 100644 --- a/Marlin/vector_3.cpp +++ b/Marlin/vector_3.cpp @@ -59,7 +59,7 @@ void vector_3::apply_rotation(matrix_3x3 matrix) { 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); @@ -120,7 +120,7 @@ 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++) { diff --git a/Marlin/vector_3.h b/Marlin/vector_3.h index 0b9decafad..0c5938bac9 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[]); }; From 782464ea4d65884c63530362b4aaae349ec346b0 Mon Sep 17 00:00:00 2001 From: Edward Patel Date: Fri, 27 Mar 2015 20:22:59 +0100 Subject: [PATCH 53/57] Parentheses need here otherwise sanitycheck.h does wrong thing on line 222 --- Marlin/Conditionals.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/Conditionals.h b/Marlin/Conditionals.h index c471ec4366..c72f9d13eb 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) /** From ce485175eb5f1e710a389bfdc1b467197d1e4849 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Mar 2015 16:11:28 -0700 Subject: [PATCH 54/57] Give all temp arrays 4 indices --- Marlin/temperature.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 4a5f7a7e5f..8f43aab08e 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 From fe29bdd72b899c5a236617a82c79cad18f41ab5b Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Mar 2015 16:26:07 -0700 Subject: [PATCH 55/57] Also fix temperature externs --- Marlin/temperature.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/temperature.h b/Marlin/temperature.h index b29fc2b572..853179be52 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; From df02b992b0879fd04ed4143f7c4be98cbe6c5a09 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Mar 2015 16:37:22 -0700 Subject: [PATCH 56/57] Fix redundant_temperatrure_raw setting --- Marlin/temperature.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 8f43aab08e..7b7eceaf7c 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -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 From 55739a4efef19969e8fb167345593d4f520ca959 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Mar 2015 17:02:11 -0700 Subject: [PATCH 57/57] Fix Z_APPLY_STEP --- Marlin/stepper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 8d55d7ba3d..40d5a36eb4 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -155,7 +155,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)