From 43b7092bd42d639a527b32dae4af87e37528ef57 Mon Sep 17 00:00:00 2001 From: Kevin Townsend Date: Tue, 14 Jun 2011 12:46:14 +0200 Subject: [PATCH] Upgrade to v0.92 --- ChangeLog.txt | 4 ++ Makefile | 6 +- build/codelite/LPC1343 Workspace.tags | Bin 104448 -> 135168 bytes .../LPC1343 Workspace.workspace.session | 24 +++----- build/codelite/LPC1343_CodeBase.project | 7 +++ build/crossworks/LPC1343_CodeBase.hzp | 10 +++ build/crossworks/LPC1343_CodeBase.hzs | 12 +++- core/i2c/i2c.h | 2 +- drivers/chibi/chb.c | 6 +- drivers/chibi/chb_drvr.c | 26 +++++--- drivers/lcd/bitmap/ssd1306/ssd1306.c | 2 +- drivers/lcd/bitmap/ssd1306/ssd1306.h | 1 + drivers/lcd/tft/drawing.c | 10 --- drivers/lcd/tft/drawing.h | 12 ++-- drivers/lcd/tft/hw/ILI9325.c | 20 +++--- drivers/lcd/tft/hw/ILI9328.c | 24 +++++--- project/cmd_tbl.h | 6 +- project/commands/cmd_sysinfo.c | 2 +- project/commands/cmd_uart.c | 13 +++- project/commands/drawing/cmd_rectangle.c | 35 +++++++++++ project/commands/drawing/cmd_text.c | 26 +++++++- project/commands/drawing/cmd_textw.c | 27 +++++++- project/commands/drawing/cmd_tswait.c | 4 +- projectconfig.h | 58 ++++++++++++------ 24 files changed, 243 insertions(+), 94 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index b7ab346..3135a34 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,6 +1,10 @@ v0.9.2 - Ongoing ================ +- Added ISL12022M RTC Driver (/drivers/rtc/isl12022m) +- Fixed a bug drawing filled circles with lcdDrawVLine +- Added CLI command to toggle LCD backlight +- Added rounded rectangle command to CLI - Added CFG_INTERFACE_DROPCR to projectconfig.h to ignore CR (\r) characters in incoming data for the CLI diff --git a/Makefile b/Makefile index 57e7680..789305a 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ VPATH += project/commands OBJS += cmd_chibi_addr.o cmd_chibi_tx.o cmd_uart.o OBJS += cmd_i2ceeprom_read.o cmd_i2ceeprom_write.o cmd_lm75b_gettemp.o OBJS += cmd_sysinfo.o cmd_sd_dir.o cmd_tswait.o cmd_orientation.o -OBJS += cmd_tsthreshhold.o +OBJS += cmd_tsthreshhold.o cmd_backlight.o VPATH += project/commands/drawing OBJS += cmd_button.o cmd_circle.o cmd_clear.o cmd_line.o cmd_pixel.o @@ -49,6 +49,10 @@ OBJS += eeprom.o mcp24aa.o VPATH += drivers/sensors/lm75b OBJS += lm75b.o +# ISL12022M RTC +VPATH += drivers/rtc/isl12022m +OBJS += isl12022m.o + # TFT LCD support VPATH += drivers/lcd/tft drivers/lcd/tft/hw drivers/lcd/tft/fonts VPATH += drivers/lcd/tft/dialogues diff --git a/build/codelite/LPC1343 Workspace.tags b/build/codelite/LPC1343 Workspace.tags index 87d277c9d015be97d4e4d3ee5dff77dd22d4ad80..ce7c0c64976208c99d2fd36dae1039cb0e224d8a 100644 GIT binary patch literal 135168 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 literal 104448 zcmeHw30Pdod0@R)G&+$$8mWb(mKqQPtqU525Yp)A3up-%=x&4#G(9b7L64el)ZIv8 zF1Z;^*7n9noXekgoVAlU8QXDutnD1m#&+yDiJf?z*h%bcVmr>pPBzK<+Ss`^*}tk@ z)vMPBAc=mXqkA-u`roUnzy81Os{aU$48*fB`;}CBCYrT(qAH{)=#<@#5VFGm+(f;Xs80W#z!yDhp1bChQ|vF5rK~KfvF` ze~-U~zk&Y(e;I!fe;)rH{xtqL{&oBj`~m!4{0sP<_+|Xl_$~MiIE$acG5j<>i!b64 z{33oWp2ufcR%I=8CG!dg?mG^g&tWLjSdL7Jm#@R)$uvABv+x*6!ecxIkH|Ir0k!R!9(!a z?}W#`gYek94<373;nB1Q9=q-E*hOY<+ctRYcnlufYvEyC509;@;jyKv2LBzx_)7?X z3I8Mh8oa9fDjcYA;DP4A8U=4rv(c#xdTA}j^~#{j6C4U%1)A0>z5W4TXpM@kEVQZy z-c~D4gtw{hRCnN?R$c+1@+-}Oxm6aFi&c4!j*n(y>CE_<*!6gF+?$%1n~5c}neoAS zyEmPhy_~u^J`NS{AEKADbRCpji2 zCdac^vH(YK#FJA8CkFrUV%xQ9KznJ0(Jq4W!=G54!&MfvpsX~`*>vjZ*hF@GA~iD; zO-^Pwo#PWTlaXvDJDrYYrl(VhNg(`#m)|yr%fRmf!n3KliRsKlIu=V3w9&tRUInys zCewZ+8qZSnTc#|4-d`s46RG5t_|(B^VDFd7-dx2$AnpAqUH{Wy>E>VgQsF>_0}n6< z-~i5Y8p_{w4jzYk*TS<}8Ai%)sUJ|=aU*^ifXeT#IdH8i7gNk!9ITqD%3WGvj0Mx9 zSc+8Ns#;K18rvPL2&&4!-vVk4ivc`em76n}Vzv%YC#rJ(GGXRR0E?>5qE*Ttk;982 z^|cUa!hflL1^+hwiM#Fsm4vT02O4wRs%>4l8_Jcr9()7zR%&orDbyAedkw zyCbRoJK8o`Z99;&8VctDmNg7mYzN}T*YWg3A~u|Yf@WIbVV}6U-%kI|v%eY$kRXN@ z%yAPkylA&ryK9u0C~U(#y?qg%Z#XzK7#Vd1!;#Ri&*$yL9@M;RAvBP59Q7?TC#-fwwTd$|$la4d^zoU_*iw?2&J#Mkt4v1U`r+VXw zL~CBr#{pq*kHvaYDtfp#JmB$0!lB3+-}zye*XtW_oj(o{S8uaeTj1|mtHs(ZB^dB| zBf~?%FgfabD({N5Dn0+n2n}k4J^QTaypidXZ0K){7pH?%SuFr##7AOMoa^Bon(f7fV7pjUYB~D(_<};l_SQ>B!<$R;yLX_0cTp zZ5Mr18Isdi%jL9@xzS8E0;EKzrec$v%Z^-k)hcU!y|Un^XxW7uds+;L*}J>LY^YX4 z^~W<2zSD~&;#X8}b<=aqgZK_u;(a3C^j|5zUJ{GLgO2o*OJ`+M2 zNGCCerv|dwqGc0y^@SqCt{}|#1YfNo6X_%8Rx6vY9mm&KTX%0!Mrm2Jc;SAM#l~V; zg!`ooveS-J>#D5{Ta@#9@{ng}*hkWDC`?bki45qZ?>N3TzW{_4B!im549F*uo=j|x zehU=9s!Y)W(8-#zl7_0a3=Hi@k3%w|P%D|Y9cQao5l-YRIxQq2Daop08Bu1D7@|OA z0kz*w7CQUwV!`A%wyN4{+oFVMwr8MLBYy8WlIv;%ef*0dH^;HnQeskAo_LKRG5;bG zQ;G)G&~`?O6}zc5BvN1&Tvv=JDHh2~Zf<1$SMe7}A0GgzUm74le(?1U+&6Pq|I8fohvN&*jJ+>)N zOeIp6qlpt;()>SIng5r?z)GYF2kvJMI11+f)@9BArz-RR{ame;vQ;>+5*#>LF#jv; z;J>GG{=X9Zt>jVRz>UTYiT;m*zlGpmG(+ut8hiH)1^Ng)#P^)Km&>PY0okW=WS}5!acwGZS0bhA*`%nqW z7b}smk{64~$gr4BXc{3`VNT#K!yS!)hl>9D*kLARy4H}-X20J){p z*52LGPJa%&y{*mev}fZJSMA5`&d!5JjwC}m4@vLmnQ->yF0H1GfKWTn8Ucw$RZQKk zQEw20`^!x6ua>0PPzs6cR;RNIXwK{8hS-9>$yK%J7^}^ct>&0knW6Kcu-|hgLe)?~ zt~4?jDl?UDD@kRMvQS!Eop}Tni73dtQC*Ar#8lO%ky$WR1$}4zWX>utv0xVoG?te! zTk+zEx?Os<;z>B=tpC3k;bwJ6c@Dkzp8J3KGROti*Yc4C+9DrVxTbS?>jZsAsubhE z!V4g3K?}5Y<~2Ybk@G$`ysj2?vd%STtLfyOD>U3533<*8L%(W|94<3me^ipLkg*)b zfiUl*AStxA7IiU_&f99bijdS1aXQOP)9){fCQ^{nM3Jw8s&i{<(E&zP##VDcql%4~ zqrD;jg>nz_zgChWxe#&-Z0&M(_uX)%eO~pp+*qTS%71J&MxJ<|BHXWmf^#5uljFhnQ8TAMo1>jZXcMlvey%v3@ zW9&5@W1s05`%TB_Hyz_?w*G%7!cKKk`APK7duaCMNt(M>TgMm4Ijgiv_Ig}!!UXE` z-l4$2`SPwP6?@6`SIAfnu>^zdCxqcZVQ?;!wO@|e+wG~eJ%7PzOw1Q$xq*$fs7dU) zo3!;N**^^R_Li4a^!<{gYWM|-JW#OH)*=dWPH(714T78onVd3jrP22mrzXH@(Ek?f zp(!;1LCio+sk(s;Tbb+TyNgl-_;oV0P;34sfKUSwIXSHVe}e4)2b7;cpD0f!E?=&> zk;g=JzyTcZDx)EHMG{e_J*WhQBxM3V8CgQ3scFw^l%l>6)^u}y{p8oo`|Mo5ph?EOP&T%z<5S_rvb z3VOR-T0z*kI&sPigps3uQq6i)(4;GKy)-O?GAM;aTEX#?p}3qhsb^l`yMO#f>FvW7 zG;haB94?rLEnzCQ8Nik<_bH0O4(}te8#jIZ?`8A88Y$A|sQ>7BqHkEw;X4G?sZD9a(}jaGto@_KWEMr_=8MzZXYf%fM z?~JXcMWavHZ7Or$cy~$CL1!#fP3;+5VrKv=<^f~l(#jCucu2*N(FM%b%msfTqD3+TE_Kj^O;MipXj@>5Uu$zFR!2}$Q zCg5l?0mmK_a5R(tzZTgL{tSK#vf*jms9sP$0=fX-Mz2Fxt8Ke;PL2&Ib z?y&^?uL$oYvJ;j}{FxZ@1>=pU!SM_+1e&!^^01VOxobf$#;8*m11=Bs{?ZFBQovh{ zKy#CMWs$O&FL=Y9(TGGEmW4>Qts!SEf@Nj$&jA%Jx!ndAFP`aW8cq#lKQE=YCi&Dk zLcHdH!O3iTZX#>%9SVd&*tXYxC6&xNZseM(ZH@)q9}TG(g2o-s&O~QhLF)mo90lz+ zhvPS6iT&V&$MAYydoAK=*!5_n411>%^Rr<2lEfk~1^Z+1sp;%+bSef8e+*y7;*;5F zC`QI{J=Y7oUYIiQ!abMGrjin`S6aGSVYaMUsIfvfTH7ARne!trv@%wxrpXV*JcCUIw zYU%RbNYS$JRzTW2pDi44R{}k~orvranY|;%W0DzdOH1J^=n*i68olKt|0HkPrcuGnW{GpY1^ zQ5JDLoH@Bmj~BbK@ppJM_LTn&P2D81#&~06EQU^gYiE0R{=JzouAuKkbI}_cPG5N^ zIJItR(u~z4sNe*U_5W)0b!7hO-?B%Vdx~hn8A^)@I9g4>;V=QmUK4QaGXckb6L1_b z0mnho|97EJBKY?;^bbn4vQueOJj$4IO<7Rhp?qBVQ|14uyH%Gup}t=ICH3>_ckou+ zj)!m(zZw55{x$r$SJ`ry4WFd04P=uIL0_-e7xMQ7#)v6ox}+z|k)zZK3en=Hixd4a zv}X$jqQwVKzbg>%4IJKt9nxEJdv|Cv-Y2~pb_M+2?!0$HW4>S)H@M6&k;^E5$TK=L z8ah&on^_Lr2{R|4=pv(a7k1I;hOeQ1SagzgmBWfV<zE zh{rYHcN4n=-n|XDZ;@CLS76@~G2DUuOT_R54m^%W7Q^E8gP^uA=v*QrZ{Xk(F?@lx zC1Ugj+81F=xF6Wp-#;|q?cmj?ah)p8GLPZBJ_<|&P%Ac7r9TskDVUe9AT?LZudc%_ zlv!e;Zr+NW#y4=Ae8Km)h{&CK?Oepnr=7Qa<37M2Xe9l=8IJnk-w%~q<$!Wr8BoTR z8RfR}Hsx2L_y3LZL%0)cRFA4b^{V=xz)#q(sDGyZ6W)NEa0fn(C-E)(Cj4LVFTq&w z8T{w>j}7si_&DPmXAl?~;R`KF7LqR9( z*hh<}xxI%ogn>~Q(Fa`v1LWK*bgU8klK4$RuLO!T|JMN){)xJo=s@r&zflov# zZ;K4Wu=p6U)eR*la&1nR1a!D1pwmOBDKPP)kogPz0Qr;gY&@EXXJV6H(k|fD0O&!0 zSG#Pcw=)03U|N~~$>vG2%wA9^poUTXE9{@xs}y%!jkbq{G=Fw-SZr(GH;VZY4UYApvqLamaX< zTaqq*w!5%(Zyg%a88W0@Mix(~9SW40DM#;!DO#C;G5JgpS2cMS6&9sUFlMzwzodqi z!cEg^iP@ozIAkd^M|u|LNM2#2ONzY9s~&!N)lsyW|S2A%Nqf_!n(u4h68uP5Kp-oQc8)fc(09k zN-;#V_2n_dBQa$EoiM~*ZibYyAW?!L?otfty0aGI77Sti|5L30f9iqk{|nokb!bGN z=0+Bs<|5j8bD2kV*By3!b_iZD&mFqMmaY-UNB4yd?RV1Ld&}M2Pu&?;dP_9-LwDHR zdqs0!*wA(-4DpqlAt&#QA-+-!xx+Q0PcWo%|DR6HUQXQ{pNWIbW%pb>0dnHw#8t|; zX1t#NjgXh_XeO5LT%g^Ads?RnI66$g(P;vXLnh$pG6Bb76L561`Tsje{g(1g^qmKC z{=cI_=Q4-tkV9K6wApGL+G2rikIJv1tG-bh@r}}GdJ*(Z9tnZCs__Lta2hZ)G8{S+ zIdb^OVE+Z+9b)%i zeEqNI!x^x!wPU$QA-WhqnVI2UoEh@&P%jf{55|rEA+bAL`Y1%thckxs|0>jvFg(;& zumEtEzuYs2>$v5IoKrXbz}liFQB!7yzFA^uv96_+LTXzjx)yY*1MvUB!}h`cXNvVL zEho;z+*3!2$%!-CCE=ek)Blzw=$A^O@t{BwzM#m0#Pi*?XdfFl!7kB0!>~!^pvp|# zk1a(Uk;Rg#mW-P>ogJNr@+@I!6q4A2w)w6)PFt?KfH)%1Rc7Mev=niq4EeYWALIzef)U?nN2Js19xT>)he>9f_R9MIp4b09CalwrntQRrxo&~Jo_;`)tj1))oim%02uzIgd1n_he+(CTdO zD8B5`3(aXH^Zz>KG*V70A5wRyC)HoXoAE{bEJ*bJI{sgG(XAiZBvZt+h{K?`&9t_~ ze$Bq9zWk!rEp)~1=fQx&zFb2QJa=YfgyhIfT$Hdf@>~-bzA);|hhrJA`T@%O>16Bm zRD9C$ED*gjv`s%tSgCOAfQwgHh0Q zze(fI&>+0GJBGj#O;^q)h|a{a9*}6goQ@L9GAzvsA#()!z(|8`_8^;~n3#!~Fjxd> zl{v?^;&#~-0W;(=up3N%=={_2ffC0U?}A4DW;3AXAD#w74%5@A#3YL|y4_-{m-8U9 zyzJ93SQM%6797cDg0bjiYc>;3%}q>uquFRA3oM7fj*%S}+YUJs67w9(Mf3mhBEq%m zIpsEb@m1))xff0mbFgy?SXBr8Sul6MMYnoVp22l|A_YzslarZoV)i1QoEq0L9-KJL z4Ia^+TioPI+moaN*!5(K#MP%5JvtwMNiMmOlftnf%ro4vA(!1R4-3HB#FhBe!D+mq zeHZ)<11dMuC2>B@DTC}!iAtrN;ik^0G!6fyLAeGr{5_D+<0=D4um0OuUs zeuK8YF)9(1nT*dZK}N(_8df{4g^pc|mYvf}*8iK(pCI`6ABsZ>C>iC)l@BOiRQ|8J z4Rn64sqa?5fH#7k&rA3dufo`Hmnd7hR-+olroiWakrenZ~9gBvKc6 zJV&}Zp}y!stI=Bs13s|pLvm^uA+fp&V==ow6j_i&5rd7PT|+#SMcxPzrEi(wYlZvIYbK~eaMEd_OWfUo+VDs~}%Da@`guefG z%D<><;WV&A9adB7Yt)}q->ZH~{TfD~^Y6lAIDv2Dp87gSCQleEguZ z0~F~zZ!tz|1sC|RB3m91rU5VVb}E0>?GlW0B>cGG64$ubZ4USYPx4Vye+lJ@@F6Kr z5%H-->L%s8a31jU%5%ykh*tR-IAFWV4py|&c(N9QwHF+@FfZS>rwcxVktgz*I%a%4 zPCobWb1kh|NamrC<~wwn#OvnAO}zPtWgvr8P1*>~VIHyP@4zNVEeY zGZ(C^;f8`NPywB@!_gEY5!(1cyJ1}`a%r6;kxueliY|?zSb%T;1c~Waw6iBYX1;hA zA=crzOk(@^5tbIaK&*%yYVC=VsN%%0h*dFiCT4$%#OmZ3=ItFwj9n2DLtMug_8f4y z=&(IWz8}cTfjSZ=#n^s{d~W9S@r@0n>~QpqlW#6^4MnblitmX~QJeEE7fI5SJX<-b z*lbabHC`YQ#o?%Nvxb=O$@=rGjM~W}-{Fy?OeX*LF@&9JRQW0NF+=mdzk%F2Z!M_u z#Gs|tTx6O&Mr&s)d_Oyxj$e!glLe`i3H#+# zDq%Mk$bQ`3>jK{g$MhR$V+4LHo9p+~A{&qfel*Y9Kv>RJqupb6nn_fLb_2~-b$A)< z1s9(>K|GEiWza21nJ|#jVJ0cg;-qxgi{JJZ(9P^70o%H`sC61K1a$R{*d9(6% zqs8L$HU6Y4wFUsgW`G6H`LKEuAP z{u^EccEOv#GWc*z$w0jf zY?px@GO$wyY%;J*26oGUT?QItpiu^zWMGdBG|Rx_GSDIetuo+{fxR-YPX_kOzyTRJ zC*6iGH_f5PRPJX88{^a)UY%!4mB*z0goKbD+4|m=#_y!8R(Y*zYLs~fip5N zAOnLk5Ric(85ov<5g7=|Ku89{GB7FwXJuea2CmD%4H>v81M@QQj0`+01JB98^D^*) z4BWyWN9%c&7~1Fp{z{22x1n#<@HAKC+>$bos?7i93_?iedS(7koT$wIi4&Fi-;B;@ z7%?mJKV1h^=KsWr%KV==kz(in??ZT<`h+rz-e*RKylWh}Q~gAXoSyifWLo5Ke$LcC z%{+WPq968i^q{dSiefz8XT{@7v7EoJ7Bw*v{I;4VIN67E;Sh7jVkQyYG7(%$S1QZJ z&P&Ja`oXdEMbI+POY|0Lb(~>(ix5lrmNAoVbYl~jZ%65J^1I*ddiF#lH7*cSDKoM^KCuToDS^@RGH_y~Ua zuKQ*s;Uma_TU85+vclbBHl2DJ91oXL(awste{kaLd=;pTn~VQOG@d;;ams|VdBp@A zn9cuv2yakNDc4ZnT{hx{mH}e^FQ(dRE|Iab4V3r`EGMjRMJ;+CkKQYk_?Ky~LDT3j zDD`sfJ?K+qK^Ak9qyn2z7oEm)w%jPS4!60OSt>Ip z4)m8|<}g^;x@*f@Fw4NQz+Q~5l`^-b&rZd#@Tm$)u@D-pLnkT6Be^bWnx}tu#@9)?9!DNAqZ=wy5@18g-I>Y{6|qI3xRDNE(3v#}&kI4=#T zN&m;_FOm9Rls|<(58p4B8L36}wAplnb+P&yn}aRs%xoe`Tr?2__caS`qB;1|=~P;* z!HZgRGgfqTGOt#(9CEH_+VGl3(+Z8OcFFL09tO^37_IpFU-2rh zps%azxg7ArG7y-shN?9I#|9H{Y%~E!oe4NLnSf)n2{;}z0ml{Zc=JKlp2f^2~s58$)-Df~3f zf^N`j@muiA_!sa8z|X*^@#pcE@i*|_;~xOsclje?etd(5s3^aHs3<>&s3<=Ns3<=N zs3<=Ns3<=Ns3<=Ns3<=NQbewo14;F(XblAng`qNsJPx{T_(nAl#J2@Gw_7qm1;Tke zDk{zaDn!l!DqhY3DtOKTDw56tDy+@{D#p$MD&WomDhJO2Dk0ASDm%vkDpk(`DsRsL zDrU$5D*n#_D*n#_D*n#_D*n#_D*n#_D*n#_D*n#_D*n%bku}(=Q1w`7tY|F_sp1_d zs%c-VM93mS)grV?gjS2t8WCD6LhD3my$IEa&;}9OC_=R&R3}24L};@JJtjh1L};rB zSw(1@2-Sj(L7NN&Qs6~WYMaUsSdqrrU2<;c410r-#gxW-?U4)z>)FDEh zB6LWEx+{i z%c9AtL=4^DfOpeZE;w?(fnMB*8z|_ZHvds>Gj>pTAfAkQQ{eJu61|2P&?LF|!FPu9 zaF&?oC7?T=or%u+XQETFIbwxTl9cVM!z~mRLTf%^8IrjH(IwfaX-?fY$SLJpXamWa zmTi*cN%8arJA!@gYrGilxokF-%n)P3J{jQ`VN*OBX0{nAQ9Ue zPb7f61yVAain4$SB-4cgc}XHYLo9+406f(&*G6OU$?P;;nvmCoSGQ{LZW?DeelwPs z=R6utr>4NQO~xHfr-{W(5*=viIFwDnpRU7QDV{e2vnh99(AC*73$3V*M&>oQ4R_MA zi>lO${}M5}W{4R~&B2}8WRmlX75RByBnDFUJjdTj4vwBB@AA&ghX{^h*OUQ5Q-Rpm z0I50cE%EykBw6P9`59e{>){=_`xs_HBF{6j4)1`sBzW$$9zK6Y4`1*TyQC#A`vw`V zknB?^OqxnIGX@fjy{WYCI(WedRr-IW|5y6|quc+RcksiQESUx4^yi z=4{3=c$!M&F+rqOKKu1(VlJlL7w45scphVMi?zGRXJHGqzQJPcDU2W)Ro%ALVr??Uh=5hr zEk#~~E!W33TdX!Mwr1MU=_-8J;VyjF>5*6y0gnx*eV(vqDA4Qgi}Xj7ofey;M&TQA z*ff$oKpec9W@3|G@cY?p_$ag$d#x7RZo?<0VA@{~?nVvoxl(B#`2TD%e$lt1HR@ZD zir$XU+m(+(@c#NOY&~0x4uFaocm@T>m!@Foix~=O>a!?ObGxdZ{G#K_j}CN_Ws3(L72;g1%m_FXZnF zl!rsyeQ2jRTFfRi)HFX{KMFyC2V69;kA;{jk68Y<#E`oydn6yo@{#R5d zf`64?g#$}-;KhNYP<*(t&`A{^j2%-ucU#$>xwuFLZd=LTDRpWlufN|;dl5TN^rX^B zFar%c&IuMGV!U*iH*__P3oFu{@3=rEy1!N?x&M>(|3-B$QunI;YD|4Stp9&k{i^ye z*oqJ1Q9K70JbxL3d*I6NQRjfoVs%Q(W}~6`9nw;l%}=Oh9zk4kbUo!R5I&NUPpQ$QxXV=AYb1*drFO6ug(Gd^J3@;EBa4j55OtNhafJ8~A)X8$&rcQz`+~hL zk8fw*)?4?`>I=Bs13vK6ZqM7j>rt2!_r|;{NaJ@nJZNaLSdYtP=Ex(uOLtpIB+Rq> zu9A7^4&Ha?-B@aV-Z$nQ9WZzA8;V4RfnaK#g*Tv>CaU1J~ zEJhi6xqd49|3`k%yDJ8mzBe8)9pj+s7z3tb9AfkTA*8;n9J;H9@CYVan9Si##18>E z6mb&cf4jA9DOK1pb2?LB7SoxS?@QU9%fz3Fv72mfJPqnJ@l+Bnu_t*rf9{fRwJBZF zdO?b7m;>(+gK>hQNaVR`;i;Uu2_0a3w&uXa0FeMA=MHS0Q4R^9#jga^$s+8&`^A$a zHy~3~zLgo{n9O6=|Ka@qT^0MEcQTYM#B-KSAfQIa0P_UYmS~>;A)4pCEp7|83_-4b z$6C<6E?`;y#_peoLT;oBW4WqL#5D(#2J}(i9CRQMiA)`I|G4aIE-Qm&){^!AdUYF8 zx2ea~33Wkzzxrj+_1}xnfj;kh@E7l-PgLSQJRHaq+41?vxm3i{?|1tnexDBnVZ6cC zyt6(-q)vz~> zw??#9wX<9joMO8w61<#$(P}8NP#-CkIB#Jk+gadqKi@5q`M+8TqlZ=c@6~9~WjMuI zeBFP;bc{Dm$2e~~#%D~&_^jy|pQH1?(u&|;<+lh2UK&kvWAwK--Uj7wFcCm^pps=9 zQ>T(26x)NAIG4LY%=Ad#repD`>1+wDmdmL$@u#Ph}4U;L~o&A+u?|ptaVQ$3I z1~bJO{iK;j93$rgFoqDvltLRt=ZB`(BT&9NMKiW!y>xPGUTB-E(`;3mGcPP&xmE8M zwW~AFcosnh8c?-*)#e7W{$GurM(Sbp6|m*~2Jq)GjQ#>%toSbtUcXc`yB2!Me3ZA% zNBN@pC>KmWr+&e7jJM2Z>ubzMnWOT5=-o*9Iy~;@-@>76ou&$UE7z>AVVN<0Gsl&x zt4ogRVzk$0X934ymcMvOo@QD3mtIqr$jLY>vdrWe@wP3)6`IPw_FrN)>{veE?xPj7 zv?O{+*Z&w@MCv<0|Nr8O4gd=q=j${n`Aa!iZgU}dx`H*c!=g_vzu~dtW2w$*X_whO zC6CKwTThe9opGW4W}PO_9w)~ZMsarLal=%`=<+Baj$)sHBM15y?#Rer4U})p3fRNs z)>+Y8?$n_6@V750ssqV>b%2DhQ;o%A?f?9iT!r4pD;I} zSy=G;dhO(#LY@i8mWEQa%+|Ja=6NjU`OEwz^FKy^hH#_mfj>LT*C2@n^a3gnGZuX33Y1 znOzipO|Y39Wyl>&Dp9_72r^ttpAF<)e5O{jfO7yWkidUb?t_XX933Cc!0Gw;nb`Gs za@?Dmn419w?acV#yxp5l&0bF39G{6#q*Ly>cmjkf#yzRY*tlk)ng5NDm+ojLw)pA^ Z=}HG;HCZqklS1jW&psRLki?Lw`~OU7 - - - + + + - - - + + + - - - - - - - - - + + + diff --git a/build/codelite/LPC1343_CodeBase.project b/build/codelite/LPC1343_CodeBase.project index a7dade6..582d2f6 100644 --- a/build/codelite/LPC1343_CodeBase.project +++ b/build/codelite/LPC1343_CodeBase.project @@ -226,6 +226,12 @@ + + + + + + @@ -269,6 +275,7 @@ + diff --git a/build/crossworks/LPC1343_CodeBase.hzp b/build/crossworks/LPC1343_CodeBase.hzp index 0bab7e7..2f55d51 100644 --- a/build/crossworks/LPC1343_CodeBase.hzp +++ b/build/crossworks/LPC1343_CodeBase.hzp @@ -202,6 +202,10 @@ + + + + @@ -265,6 +269,11 @@ + + + + + @@ -327,6 +336,7 @@ + diff --git a/build/crossworks/LPC1343_CodeBase.hzs b/build/crossworks/LPC1343_CodeBase.hzs index e4030ae..9eb6627 100644 --- a/build/crossworks/LPC1343_CodeBase.hzs +++ b/build/crossworks/LPC1343_CodeBase.hzs @@ -19,6 +19,13 @@ + + + + + + + @@ -54,8 +61,7 @@ - - + - + diff --git a/core/i2c/i2c.h b/core/i2c/i2c.h index 9ed49be..4e700a4 100644 --- a/core/i2c/i2c.h +++ b/core/i2c/i2c.h @@ -39,7 +39,7 @@ #define FAST_MODE_PLUS 0 -#define I2C_BUFSIZE 6 +#define I2C_BUFSIZE 16 #define MAX_TIMEOUT 0x00FFFFFF #define I2CMASTER 0x01 diff --git a/drivers/chibi/chb.c b/drivers/chibi/chb.c index e5a56dd..2c02f1a 100644 --- a/drivers/chibi/chb.c +++ b/drivers/chibi/chb.c @@ -104,7 +104,8 @@ static U8 chb_gen_hdr(U8 *hdr, U16 addr, U8 len) /**************************************************************************/ U8 chb_write(U16 addr, U8 *data, U8 len) { - U8 status, frm_len, hdr_len, hdr[CHB_HDR_SZ + 1]; + // U8 status, frm_len, hdr_len, hdr[CHB_HDR_SZ + 1]; + U8 status, frm_len, hdr[CHB_HDR_SZ + 1]; while (len > 0) { @@ -113,7 +114,8 @@ U8 chb_write(U16 addr, U8 *data, U8 len) frm_len = (len > CHB_MAX_PAYLOAD) ? CHB_MAX_PAYLOAD : len; // gen frame header - hdr_len = chb_gen_hdr(hdr, addr, frm_len); + // hdr_len = chb_gen_hdr(hdr, addr, frm_len); + chb_gen_hdr(hdr, addr, frm_len); // send data to chip status = chb_tx(hdr, data, frm_len); diff --git a/drivers/chibi/chb_drvr.c b/drivers/chibi/chb_drvr.c index c56531a..4147725 100644 --- a/drivers/chibi/chb_drvr.c +++ b/drivers/chibi/chb_drvr.c @@ -178,7 +178,7 @@ U16 chb_reg_read16(U8 addr) /**************************************************************************/ void chb_reg_write(U8 addr, U8 val) { - U8 dummy; + // U8 dummy; /* Add the Register Write command to the address. */ addr |= 0xC0; @@ -187,8 +187,10 @@ void chb_reg_write(U8 addr, U8 val) CHB_SPI_ENABLE(); /*Send Register address and write register content.*/ - dummy = chb_xfer_byte(addr); - dummy = chb_xfer_byte(val); + // dummy = chb_xfer_byte(addr); + // dummy = chb_xfer_byte(val); + chb_xfer_byte(addr); + chb_xfer_byte(val); CHB_SPI_DISABLE(); CHB_LEAVE_CRIT(); @@ -247,7 +249,8 @@ void chb_reg_read_mod_write(U8 addr, U8 val, U8 mask) /**************************************************************************/ void chb_frame_write(U8 *hdr, U8 hdr_len, U8 *data, U8 data_len) { - U8 i, dummy; + //U8 i, dummy; + U8 i; // dont allow transmission longer than max frame size if ((hdr_len + data_len) > 127) @@ -260,18 +263,21 @@ void chb_frame_write(U8 *hdr, U8 hdr_len, U8 *data, U8 data_len) CHB_SPI_ENABLE(); // send fifo write command - dummy = chb_xfer_byte(CHB_SPI_CMD_FW); + // dummy = chb_xfer_byte(CHB_SPI_CMD_FW); + chb_xfer_byte(CHB_SPI_CMD_FW); // write hdr contents to fifo for (i=0; i [ ]'" }, { "C", 0, 0, 0, cmd_calibrate , "Calibrate Touch Screen" , CMD_NOPARAMS }, { "F", 0, 1, 0, cmd_clear , "Fill" , "'F []'" }, + { "g", 2, 2, 0, cmd_getpixel , "Get Pixel" , "'g '" }, { "l", 5, 7, 0, cmd_line , "Line" , "'l [ ]'" }, + { "L", 1, 1, 0, cmd_backlight , "Backlight" , "'L <0|1>'" }, { "o", 0, 1, 0, cmd_orientation , "LCD Orientation" , "'o [<0|1>]'" }, { "p", 3, 3, 0, cmd_pixel , "Draw Pixel" , "'p '" }, { "P", 9, 9, 0, cmd_progress , "Progress Bar" , "'P <%> '" }, { "r", 5, 7, 0, cmd_rectangle , "Rectangle" , "'r [ ]'" }, - { "R", 2, 2, 0, cmd_getpixel , "Read Pixel" , "'R '" }, + { "R", 7, 7, 0, cmd_rectangleround , "Rounded Rectangle" , "'R '" }, { "s", 2, 99, 0, cmd_textw , "Text Width" , "'s '" }, { "t", 5, 99, 0, cmd_text , "Text" , "'t '" }, { "T", 0, 0, 0, cmd_gettext , "Text Dialogue" , CMD_NOPARAMS }, diff --git a/project/commands/cmd_sysinfo.c b/project/commands/cmd_sysinfo.c index 36b66e9..ead3aa8 100644 --- a/project/commands/cmd_sysinfo.c +++ b/project/commands/cmd_sysinfo.c @@ -91,7 +91,7 @@ void cmd_sysinfo(uint8_t argc, char **argv) #ifdef CFG_PRINTF_UART uart_pcb_t *pcb = uartGetPCB(); - printf("%-25s : %d %s", "UART Baud Rate", pcb->baudrate, CFG_PRINTF_NEWLINE); + printf("%-25s : %u %s", "UART Baud Rate", (unsigned int)(pcb->baudrate), CFG_PRINTF_NEWLINE); #endif // TFT LCD Settings (if CFG_TFTLCD enabled) diff --git a/project/commands/cmd_uart.c b/project/commands/cmd_uart.c index 8e634f4..74ad470 100644 --- a/project/commands/cmd_uart.c +++ b/project/commands/cmd_uart.c @@ -78,9 +78,18 @@ void cmd_uart(uint8_t argc, char **argv) // Display the current baud rate #ifdef CFG_PRINTF_UART uart_pcb_t *pcb = uartGetPCB(); - printf("%d%s", pcb->baudrate, CFG_PRINTF_NEWLINE); + printf("%u%s", (unsigned int)(pcb->baudrate), CFG_PRINTF_NEWLINE); #else - printf("UART not initialised (using USBCDC)%s", CFG_PRINTF_NEWLINE); + // Try to get UART from EEPROM + uint32_t uartEEPROM = eepromReadU32(CFG_EEPROM_UART_SPEED); + if ((uartEEPROM < 9600) || (uartEEPROM > 115200)) + { + printf("UART not set in EEPROM%s", CFG_PRINTF_NEWLINE); + } + else + { + printf("%u%s", uartEEPROM, CFG_PRINTF_NEWLINE); + } #endif } } diff --git a/project/commands/drawing/cmd_rectangle.c b/project/commands/drawing/cmd_rectangle.c index 581d864..2750d1d 100644 --- a/project/commands/drawing/cmd_rectangle.c +++ b/project/commands/drawing/cmd_rectangle.c @@ -94,4 +94,39 @@ void cmd_rectangle(uint8_t argc, char **argv) } } +/**************************************************************************/ +/*! + Displays a rectangle with rounded corners on the LCD. +*/ +/**************************************************************************/ +void cmd_rectangleround(uint8_t argc, char **argv) +{ + int32_t x1, y1, x2, y2, c, radius, corners; + + // Convert supplied parameters + getNumber (argv[0], &x1); + getNumber (argv[1], &y1); + getNumber (argv[2], &x2); + getNumber (argv[3], &y2); + getNumber (argv[4], &c); + getNumber (argv[5], &radius); + getNumber (argv[6], &corners); + + // ToDo: Validate data! + if (c < 0 || c > 0xFFFF) + { + printf("Invalid Color%s", CFG_PRINTF_NEWLINE); + return; + } + + if ((radius == 0) || (corners == 0) || (corners > 5)) + { + drawRectangleFilled(x1, y1, x2, y2, (uint16_t)c); + } + else + { + drawRectangleRounded(x1, y1, x2, y2, (uint16_t)c, radius, corners); + } +} + #endif diff --git a/project/commands/drawing/cmd_text.c b/project/commands/drawing/cmd_text.c index ac3bc7c..871d5e0 100644 --- a/project/commands/drawing/cmd_text.c +++ b/project/commands/drawing/cmd_text.c @@ -48,6 +48,12 @@ #include "drivers/lcd/tft/drawing.h" #include "drivers/lcd/tft/fonts/dejavusans9.h" + // Only include this w/UART since there isn't enough space otherwise! + #ifdef CFG_PRINTF_UART + #include "drivers/lcd/tft/fonts/dejavusansmono8.h" + #include "drivers/lcd/tft/fonts/dejavusansbold9.h" + #endif + /**************************************************************************/ /*! Displays the supplied text on the LCD. @@ -77,8 +83,24 @@ void cmd_text(uint8_t argc, char **argv) } *data_ptr++ = '\0'; - // Only Vera Mono 9 is used by default - drawString((uint16_t)x, (uint16_t)y, (uint16_t)color, &dejaVuSans9ptFontInfo, (char *)&data); + // Only include this w/UART since there isn't enough space otherwise! + #ifdef CFG_PRINTF_UART + switch (font) + { + case 1: // DejaVu Sans Mono 8 + drawString((uint16_t)x, (uint16_t)y, (uint16_t)color, &dejaVuSansMono8ptFontInfo, (char *)&data); + break; + case 2: // DejaVu Sans Bold 9 + drawString((uint16_t)x, (uint16_t)y, (uint16_t)color, &dejaVuSansBold9ptFontInfo, (char *)&data); + break; + default: // DejaVu Sans 9 + drawString((uint16_t)x, (uint16_t)y, (uint16_t)color, &dejaVuSans9ptFontInfo, (char *)&data); + break; + } + #else + // Always use Vera Mono 9 is used by default + drawString((uint16_t)x, (uint16_t)y, (uint16_t)color, &dejaVuSans9ptFontInfo, (char *)&data); + #endif } #endif diff --git a/project/commands/drawing/cmd_textw.c b/project/commands/drawing/cmd_textw.c index 53d57d3..d116b77 100644 --- a/project/commands/drawing/cmd_textw.c +++ b/project/commands/drawing/cmd_textw.c @@ -48,6 +48,12 @@ #include "drivers/lcd/tft/drawing.h" #include "drivers/lcd/tft/fonts/dejavusans9.h" + // Only include this w/UART since there isn't enough space otherwise! + #ifdef CFG_PRINTF_UART + #include "drivers/lcd/tft/fonts/dejavusansmono8.h" + #include "drivers/lcd/tft/fonts/dejavusansbold9.h" + #endif + /**************************************************************************/ /*! Returns the width of the supplied text in pixels. @@ -73,8 +79,25 @@ void cmd_textw(uint8_t argc, char **argv) } *data_ptr++ = '\0'; - // User Vera Mono 9 by default for now - printf("%d %s", drawGetStringWidth(&dejaVuSans9ptFontInfo, data), CFG_PRINTF_NEWLINE); + // Only include this w/UART since there isn't enough space otherwise! + #ifdef CFG_PRINTF_UART + switch (font) + { + case 1: // DejaVu Sans Mono 8 + printf("%d %s", drawGetStringWidth(&dejaVuSansMono8ptFontInfo, data), CFG_PRINTF_NEWLINE); + break; + case 2: // DejaVu Sans Bold 9 + printf("%d %s", drawGetStringWidth(&dejaVuSansBold9ptFontInfo, data), CFG_PRINTF_NEWLINE); + break; + default: // DejaVu Sans 9 + printf("%d %s", drawGetStringWidth(&dejaVuSans9ptFontInfo, data), CFG_PRINTF_NEWLINE); + break; + } + #else + // Always use DejaVu Sans 9 by default + printf("%d %s", drawGetStringWidth(&dejaVuSans9ptFontInfo, data), CFG_PRINTF_NEWLINE); + #endif + return; } diff --git a/project/commands/drawing/cmd_tswait.c b/project/commands/drawing/cmd_tswait.c index 6a75183..e43e5b4 100644 --- a/project/commands/drawing/cmd_tswait.c +++ b/project/commands/drawing/cmd_tswait.c @@ -80,12 +80,12 @@ void cmd_tswait(uint8_t argc, char **argv) if (error == TS_ERROR_NONE) { // A valid touch event occurred ... parse data - printf("%d, %d%s",(int)data.xlcd, (int)data.ylcd, CFG_PRINTF_NEWLINE); + printf("%d,%d%s",(int)data.xlcd, (int)data.ylcd, CFG_PRINTF_NEWLINE); } else { // Display error code - printf("%d %s", (int)error, CFG_PRINTF_NEWLINE); + printf("%d%s", (int)error, CFG_PRINTF_NEWLINE); } return; diff --git a/projectconfig.h b/projectconfig.h index 88fddba..28269c8 100644 --- a/projectconfig.h +++ b/projectconfig.h @@ -102,6 +102,28 @@ **************************************************************************/ +/************************************************************************** + I2C Addresses + ----------------------------------------------------------------------- + The following addresses are used by the different I2C sensors included + in the code base [1] + + HEX BINARY + ==== ======== + ISL12022M (RTC) 0xDE 1101111x + ISL12022M (SRAM) 0xAE 1010111x + LM75B 0x90 1001000x + MCP24AA 0xA0 1010000x + MCP4725 0xC0 1100000x + TSL2561 0x72 0111001x + TCS3414 0x72 0111001x + + [1] Alternative addresses may exists, but the addresses listed in this + table are the values used in the code base + + **************************************************************************/ + + /*========================================================================= FIRMWARE VERSION SETTINGS -----------------------------------------------------------------------*/ @@ -162,7 +184,7 @@ #endif #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART - #define CFG_UART_BAUDRATE (9600) + #define CFG_UART_BAUDRATE (57600) #define CFG_UART_BUFSIZE (512) #endif @@ -355,13 +377,13 @@ #ifdef CFG_BRD_LPC1343_REFDESIGN // #define CFG_PRINTF_UART #define CFG_PRINTF_USBCDC - #define CFG_PRINTF_NEWLINE "\n" + #define CFG_PRINTF_NEWLINE "\r\n" #endif #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB // #define CFG_PRINTF_UART #define CFG_PRINTF_USBCDC - #define CFG_PRINTF_NEWLINE "\n" + #define CFG_PRINTF_NEWLINE "\r\n" #endif #ifdef CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART @@ -373,7 +395,7 @@ #ifdef CFG_BRD_LPC1343_802154USBSTICK // #define CFG_PRINTF_UART #define CFG_PRINTF_USBCDC - #define CFG_PRINTF_NEWLINE "\n" + #define CFG_PRINTF_NEWLINE "\r\n" #endif /*=========================================================================*/ @@ -429,10 +451,10 @@ #define CFG_INTERFACE_MAXMSGSIZE (256) #define CFG_INTERFACE_PROMPT "LPC1343 >> " #define CFG_INTERFACE_SILENTMODE (0) - #define CFG_INTERFACE_DROPCR (1) + #define CFG_INTERFACE_DROPCR (0) #define CFG_INTERFACE_ENABLEIRQ (0) - #define CFG_INTERFACE_IRQPORT (2) - #define CFG_INTERFACE_IRQPIN (0) + #define CFG_INTERFACE_IRQPORT (0) + #define CFG_INTERFACE_IRQPIN (7) #define CFG_INTERFACE_SHORTERRORS (0) #define CFG_INTERFACE_CONFIRMREADY (0) #endif @@ -442,10 +464,10 @@ #define CFG_INTERFACE_MAXMSGSIZE (256) #define CFG_INTERFACE_PROMPT "LCD >> " #define CFG_INTERFACE_SILENTMODE (0) - #define CFG_INTERFACE_DROPCR (1) + #define CFG_INTERFACE_DROPCR (0) #define CFG_INTERFACE_ENABLEIRQ (0) - #define CFG_INTERFACE_IRQPORT (2) - #define CFG_INTERFACE_IRQPIN (0) + #define CFG_INTERFACE_IRQPORT (0) + #define CFG_INTERFACE_IRQPIN (7) #define CFG_INTERFACE_SHORTERRORS (0) #define CFG_INTERFACE_CONFIRMREADY (0) #define CFG_INTERFACE_SHORTERRORS_UNKNOWNCOMMAND "?" @@ -461,10 +483,10 @@ #define CFG_INTERFACE_SILENTMODE (1) #define CFG_INTERFACE_DROPCR (1) #define CFG_INTERFACE_ENABLEIRQ (1) - #define CFG_INTERFACE_IRQPORT (2) - #define CFG_INTERFACE_IRQPIN (0) + #define CFG_INTERFACE_IRQPORT (0) + #define CFG_INTERFACE_IRQPIN (7) #define CFG_INTERFACE_SHORTERRORS (1) - #define CFG_INTERFACE_CONFIRMREADY (1) + #define CFG_INTERFACE_CONFIRMREADY (0) #define CFG_INTERFACE_SHORTERRORS_UNKNOWNCOMMAND "?" #define CFG_INTERFACE_SHORTERRORS_TOOMANYARGS ">" #define CFG_INTERFACE_SHORTERRORS_TOOFEWARGS "<" @@ -476,10 +498,10 @@ #define CFG_INTERFACE_MAXMSGSIZE (256) #define CFG_INTERFACE_PROMPT "CMD >> " #define CFG_INTERFACE_SILENTMODE (0) - #define CFG_INTERFACE_DROPCR (1) + #define CFG_INTERFACE_DROPCR (0) #define CFG_INTERFACE_ENABLEIRQ (0) - #define CFG_INTERFACE_IRQPORT (2) - #define CFG_INTERFACE_IRQPIN (0) + #define CFG_INTERFACE_IRQPORT (0) + #define CFG_INTERFACE_IRQPIN (7) #define CFG_INTERFACE_SHORTERRORS (0) #define CFG_INTERFACE_CONFIRMREADY (0) #endif @@ -541,7 +563,7 @@ #if defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB || defined CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART #define CFG_I2CEEPROM - #define CFG_I2CEEPROM_SIZE (4096) + #define CFG_I2CEEPROM_SIZE (3072) #endif #ifdef CFG_BRD_LPC1343_802154USBSTICK @@ -586,6 +608,7 @@ #define CFG_EEPROM_RESERVED (0x00FF) // Protect first 256 bytes of memory #define CFG_EEPROM_CHIBI_IEEEADDR (uint16_t)(0x0000) // 8 #define CFG_EEPROM_CHIBI_SHORTADDR (uint16_t)(0x0009) // 2 + #define CFG_EEPROM_UART_SPEED (uint16_t)(0x0020) // 4 #define CFG_EEPROM_TOUCHSCREEN_CALIBRATED (uint16_t)(0x0030) // 1 #define CFG_EEPROM_TOUCHSCREEN_CAL_AN (uint16_t)(0x0031) // 4 #define CFG_EEPROM_TOUCHSCREEN_CAL_BN (uint16_t)(0x0035) // 4 @@ -595,7 +618,6 @@ #define CFG_EEPROM_TOUCHSCREEN_CAL_FN (uint16_t)(0x0045) // 4 #define CFG_EEPROM_TOUCHSCREEN_CAL_DIVIDER (uint16_t)(0x0049) // 4 #define CFG_EEPROM_TOUCHSCREEN_THRESHHOLD (uint16_t)(0x004D) // 1 - #define CFG_EEPROM_UART_SPEED (uint16_t)(0x0020) // 4 /*=========================================================================*/ -- 2.20.1