From 312c3701627157bf14a5b8e8cb43f5d5453e6551 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 10 Nov 2015 21:55:12 +0100 Subject: [PATCH] [Horus] DMA2D more used. Some graphics are really faster. --- radio/src/bitmaps/Horus/asterisk.png | Bin 14224 -> 9376 bytes radio/src/bmp.cpp | 8 +-- radio/src/gui/Horus/lcd.cpp | 53 +++++++++------ radio/src/gui/Horus/lcd.h | 2 +- radio/src/gui/Horus/view_main.cpp | 3 +- radio/src/main_arm.cpp | 2 + radio/src/targets/Horus/board_horus.h | 1 + radio/src/targets/Horus/lcd_driver.cpp | 88 +++++++++++++++++++++---- radio/util/img2lbm.py | 3 +- 9 files changed, 122 insertions(+), 38 deletions(-) diff --git a/radio/src/bitmaps/Horus/asterisk.png b/radio/src/bitmaps/Horus/asterisk.png index 00c24413dc71305ca3c8fc7ba722f31df58be875..1e12a2492be698456ded6c653d33afe9e17d3ce0 100644 GIT binary patch literal 9376 zcmW++WmFs877Y%?X@O8Ig&>9CUffA>mr~r_-J!S!EAGYJ9g4dbC|W2`+}&Qj_hV+( z%9^=za?d?`_TBqLC@Dx|zj^-#003Y^Wh7MK*9iF0gN_P6vpS2|!Y>#OGTP1n0Os5O z4g^4YCJ_E3nhR835^V$X%{w}>txv3_000O8l@L|)_{k3;>jL)m;B+mz>VcgeBo zzd6hY&9gn%Dfa|V?=b)ff;d z_Eac-%ln?AqoXn)f8K0H!TN{0$-5A-;Z=9%pwnnYhk1SmPb@}avXeDC!>vmU!y*&- zx!0;uLsSJP#t>+DFqotSIX}8ooA-FZ40u(Aw#`{JQk|Is4o~%~4+Tz`!YhGvwkc))32YJVH7S$vzYQZmQJ+u8l1`fRZ@8~@ZjVO2f|b+Uy=5wgDB`4gT6 z&ln#s{fk*+3f!e{r7YKyW_!E4$cx*|3$6JsrSGe>npjbp^)>bvLt=ienR$v zvXwVzIisF{aHP)W;uSJR<)bPmD&x~-Wec0EQXqRdHvBqh?!k@4Ek(&|1j;|Ib6e*A zvpsqfZkk0?ykW>TH?_Bw`S+EHUnhY4_hU}Sr-)ivW1tX!^d@odf^lMtdppVx9cPv9mv-z{yz?|`y~9@)#S8g%N`!nW ztM@h0wza_t5o*=-nGKeq0a2KJRH&{SyHgN8`QlIMwSI(Oyi-oa81v;lK04~=@?NPx zMu;I$nQm~yf|}PDA%4}Fp*2CJumLFY`+I}J zk}m(!VDQYiS-r!_IN!22u$5PZ50sE-M2D4%DML{C7-P5mnCt0a`c}>uNXvnGHd6TG znjr*_m(uCyOYT=L=H5C8VsAi6@piI#L(}UIa<_JJCPf+B_9kE3fBPpN?K33oD8y|Q zPy%XRH~kFl6#R$%b_b(rQy6$?duJH}uGqBm3V$Ty<}Op#s7{?{joW@$*r^>O#2^3! z?eR@TmY?L0uZ47Ds}>*M3bpeTzhpFX2ji)*vk@Cn)mdrgGoRL^pSW+%1H4{W86D$n zHNJ?ZW)RWrhZC_3%bpCpKkt3_MJLB{U_6Gz!JSXyg(QzVcAM4NSV~Zd2<>UHFwL#> zQk@V9wg9U1)?vF_&#g)`gG0{4#{SSt@Z)}>e~#Sl>i|QM_NMwWWLjPe~JS}5<-p+>;b^Cs7VGg5qA9O&T=+QT%%tSU@ zEH7yMZA)O^&a*wXU;U%D)6<(P*f+U6!<(Q<#_MlV`&izH$RE|#`5&x=2un7WaH&?K>Nk2?A*iK;q>Sv|=~mfgId5?cK?A^C}QGyFTM zfIwBG^vF>)TNnW{)GHa(oug+weqDmOH<_ubYe-9HYti>d6Q|&uIHugpJS!XnI~B}f4gmK%b)$6p?^pf?@1Vn6BF3fPDc0yz^6jW`+gn$4rSG5;w2rf-3vs18 zWq7l#TNe`7l;f3_s0CViXkj8&v2p_IQ9~>Mi8R~xiwZiLrzzI2oux3ou ztl0+-*aZ3}l2;AsqD(nVG0G%;*4ID@f8q#&<0hMnAAR{w0c0%5R6C>#$B=B69e=V? zp(V$`cyaQp_M%-mJ2b)Mq1+NHhjQ@j{^u`-OaFtgSJm#8L3j9&bh-|wE(J5oT0wGk zO`~88hlcLe*qQFQs=G$hJ~q@9*^{%j=G;K z=mF5w%|=iYkNtn2D}o{3tBVg;9n19$u-r0kC^vU6m+(`LX|wmYR-&5k2(nBDP2v74 z<6C>IfXhpfzc_elXlB$~-3k0#d!`t$g>kS~e=CW@DL|JWu+nzK%;%2=>_o=;ia01N zzRarS%2X4ChsbIF6&2O^GbJA)a2#L-zylyl1>*zIm`S4l26`X^F#A2fTO&+S)Se5l ze!{`hN0h1t_{cqW(u~GdXSQj#UmS!2(LKH`luPCaaseK10b#g^D)Mpwqu?0>S%k0- zps9W*I$m7Bwz!B7MF`+zsDJQMWD29!a^(EN|6piyU-Za!t({6-g-I}h>SQReG^(eT z`XhktyCEl6@34mfn7PNG7*RqS5|D==HKzw8!4=7*B4w)87!ozuHBK;XID4G)&iSQY z(ESERRY8#8$w}d|UtfZ|@4wiGC2WY9;3U zt_V0~>1p)~`2J52>(v&h*ev+fl%SK{!%K;)KDHEvIR{n8{qr$SK`DmRY^M3{bPwdm zSAe68kgFhsJ#(Q9F{!@KsG~SvM5QO(deaIp)hwteIM{`Oj)gSoRoZOC*_xsz>)0=o zo;t5M+Nl#bVyH|r`**lpn$^v;Viase5Fs&r0rn*ce^fTu!ZP3<699>yn;XXzvIQ#x z6H5qgg~f$$&*>Q7O7$a`9KTQW|2OK__+m;@)K0OgsNr#c@4eyxq}O-xSi z>Y_DMiL$#{%6ZO7gokcy>L(o)KuG!nib~2;QnJ`G4$ccdpITeqsHI2ilT019mFBnf z^yg-7r_1+WPmhHqRhuG)t|wrW({-eAK39_frxS}a$PJdp zO@-Y#?$$wE!Q+e6Ug#Iy*)zKbqk-wXjU;Wgj(`Nt9>7*d>~Gg(WrHfh-tK43i#(qc z)0s;%+zu8`&DOSieBSxIaVl~&1kJa{ALcELV_h@=_y~1B6gp|N!-nfIvt&~OAS|)+ z`3HHe1NW>(W53(^ZhohAVg3!4m#X)yf&=KJ_!TutxKb9N#!S({iF({kf-ORrMutLoMA z6{>{|5T#g_z=2qaC~Fc=G6h(ZN*+I*3?G=lUfh#00dCFKM_`H>^!TeV>yVpPaw_Kv zm5qIoKY*BZy}hx~4eVE2Ub>Y+h$unJd!^`#Pn3x1l)v5(xGi7iB7#XBhJkr7=VUEQ z5_&Sq+0}MmB*9^BA3qP*z>u5ZIEwj2;vuxTb-ni@1Qd!y+_8bEMBfevubFTTbDwVV zF2&X30Yr&(-4~vNXhNy{(qkVWzrSCLad_-Wf z{aijAnYAC4#B}-VIP&@Yl8iVCk-)gjH4r70*a+#~^F-~haYV%LDJjuNjTv*G77hD; z;IS|w^WFhk!XtFPfcT>->cbJ>+{54A^X&t@+*#mJZX7w~wkuN6kw|`_6*@wC)^gjH zM4|h7&PB~UAfJ$4ikz7Rmzn!be}Q)U>W%!U^QT^GQ3>OjQ8R)Q=HixvD$jDc?C{Cv ztf;U+wS`0uk@@I9YM@#w5xiuIRB3KQZK7TSC7z5VLK(4*(7JqW(_om102XuCRn4q1 zy*5$^Y7z~1gko@1jHsM9&#uj53%wPO0O_v@T2n&Dq6MdV`|*Wbxq|0AaE~IhvOhB* zuSP}yv42p4N4M7hnV~okM)kIp5CQ%dYN6UiZ^osQRNpc+w%#!N2FC>a3mSahO6u%I z1wy8|y&3y-U`08GGuH|st27%dg2^6;AfM6KMvOj@^UV8|%kaT`5F29Dh>9mDVpYYA zz}dE|it2KAP#f^!{Lg!HlZCIfq|t7zlG#hjjl*h5AIA8 z0-?d+nEJAni=`et|JjC$+40M z5nB18hFTx56_daBSGc3Oi3ChEtc?0ZQK25a!vv83GR{ zK;P&~1;<1TINr6~utf~!t0b#JL(3C}Ig|`kg^#Mm& zoHsRyG1mdxqP0&%*P8plhC0NEWt)_&RaH{FWv%EB!~x*0s35)a5cOK+*+*6SqqlD{ zSILA?rk%pf%m>^a?62r1hdg?aOH+}Eq9Z=~$7?}|P`Hw?`3sj2_j4nVSRKYffBf~f z+kcg4;QOT{Lgnb5+}ooJWVpgUyQ=mK>6(}V(yp#qK;Af|_84izB`2x(FVrc#piOLy z++trG*n0`|f|bl+yexfG0+ObV01vE8)ALKZXq3rJ9qZvh6>VQIS>QvAoXkH@(3h3Zt|u?=lW4w`>*PEF>T`dVXPj0tQhZp zhvej`eDC*XiYlbm{sN+@A>30HyNW=Q2Z+CsF~YZPia`cZ^*LA`^$+njJbUR~nq(W- zBi+Qf;k^}Q1-@I9I8;)6Ve~`J64j!pPohXP$=J49u|Q%Q$>I0;*xnM{Q5m0)1Gb{u z;l+6Sv9ZXR9Z)xKoZjhF;!IKBJa4~p-Ga%%V}=J84B#B$s(UW3X8}OetuL{m|7fsg zupofkTOCx!mRKjN?;`vsrFhCdz(J#mRk2n+Wj>ZnX}*U*(UJt~CsY-!$M`6b9(7%_ z8MkfY-{3b~mSMX>6VCTDH#xTG8(7<`XM9?f2L@1^#j*3P(?nIi9W+>$-N31o@MyBU z3bsZz&buvSIlEf?w3NHap2C1IS>t$9K%;vZb;o6+f)!JW+A^F#;E)OAdg;cLqLNJo z#?(TkplF|$7w8-X4^-qzNV<^8JeXI$qeGQ(O+J24xf77Q2BwJF6e6%%(H9KF6$K!X zY$65B$SQ|)<+;zb6%&T}7k7#Q+*8Hj^yI21JuT38&gnfV@mqh656Ct)e28D%m#3A;` zR&3g7Nla26tt$h_?_l|T-w`ZoZzd5*@b2+C&UWc>1d^KLKc%mWZ}9t;l+Nf$(|Ylj z={zmkaP^rrLbFk(E}<)h6}AKb2f;roe!=UbZW`Y;5#BfCKP4^ zVF#rSmIi<7j7xY^pKQjb`d(3#50@ zgV&kErn7OWY^-?zqDr~CelkY|L?9QDqm5gxXIR(!`Z;}h>MPgqvV#nFP9)TT9c>IC z>;@`V=5|tB(FhO1?Rd3lm{tIn%$G5B-7_+8ER)a0cfIX-Xl5KWknj)we>}K9zpmJ+K zE->ZE{`pILj?B5e*kI^NbB@NeUy2I9;I9bRJrsffWS;ZZ&kHd%E@2W3|n$kvKP}jQJz+@ zqwk}f{a;x6UD-HK`#M*$)Hf3SJ|%uRxDOof?t4$6JtDa= z6bQTs2X3FHW|vv6&AlmLYd8AY@U<^I0#rK_62gU!;LL(l@KfxjPM%Qd?RKY>?%igP z)kMsVrsSeAcuqL=svf8B;0+LoG9@(SRfZ0w&D*rqANbf`!k7 zYMz&q*({`o_G|GE;o@IbjP`YD{_Z08h`3g^P|iWak`y=P1xLI`@H$B;Zd*YOR*iyCm*-h5qNo!h@!OQWo(C5 z*@XY`RiK)XlOpt2co?c@P z=buFuo6~TYbs07I8|EV)UnF-2P>wF$=Z{Hm6`HHS=7JE!@OwUtl+8Iha?{BBVZu7L zf4iw3o?HDEtcVh1A#L)myf5FAR#z1vD!0UkSUd7IvsLs#17~*Y_5gN`>OL@ad5A`xG%FTQGlA?G9|j>Mo9=^F|rCS;_U$%82z9$ENmWUdm+OkQx<#VoG; z8lD&oLlQ1ckhNe1tIIFY2Zcxp3ruN(3u+A5yxiVB(><^W3+qpBEMLha+W02;1jEI- zk$ycG+xBnum=ZfX^RADukR;9#GoE1;w8+;;O54}vCZlzEZdo3}g^7;3Ht64YnGTZR zrX`uORchjBZ7w;)&83`J!*=V(NI<{xY0oekwRSPGNy$q)*|jHYV|0ip0Y|rv5p@|e zD;FC#&ZhJ^HpKi7FAjW9U)|QCQ_YHn6t#@_BPDRaC~(;(6s|h;C9Fku*l2@Cz@e+p z+TwR+TE7Gfa9F2$TL!h701*;Y7LJX7i7dahbo4j&ef#l)mUEsbTvkoc zS7)O|NS!)JqPPuOlIhc8FKHOxP6k(tG*^psnVM$c)S-%;nbY1{YT|eLR*!i z`|45z&U|Bk-DO^k2?u##^#Db#%}#3fLy=toJVdzOO~&g1DjsR^iL#0Yn?`<0m0;J7 zFUhOWHKqxBx&09R;;TmN>_V~M4__upU}r0g5!nusEWMciXgHF98Wkea{3!WsVpl~_Ec6)gBP=vPN_5s20(5jbF${davj^X zQaVCrin7s@1CCm8ZD@z1qmwG$%5b?GHQ1!U3JikAb^JcQQnxRlj7hlyDLl||)uOA8 zZT_>CR<=afRZ)F0C6(>&8*PRW4?ZHv2pKeHel35rnEx!IT;5vBC- z`F}Qrp{*GdmZPjbQ8aUTmeGE^k>}@*61&tjwhein)*Lub4ge1P#$gR7}d-$^hZM_Wiex_Dlk)KWg zA+gltKj*KKSa0L_4F9yFz&+YGtRmL}G4d~%p@!^sO}8G^R$-HslLx93^({G0szaHE zz&{Uri~q4ZLpwVKABB6QaCR90I^1IYYeq~=EE!Vf^7~oJ{d!~`c&TfI8N$r0k>i3h+g7Ze$i(h!Oluhh2Zx3W5CRD9Sr)p# z27{I;Ys$0tJSSCsXSE|w3l&{`CJx7c&ZnwEiCSOouf+foq%y!z{N1iZFD6xe1(3 zSZmyApcoaWuxw`)YtBESTVfJXdgHO;y0!9nnZV0TwzPj_m3JbH8KXj(u6 zo^BHfE`<14%}*MLpygoXfa&Fhv}FGrp^rDtY*Tvh3&K0J%R!o(Ef8-naK@t(lRcKY1 zyRK$yzHqEY*%%o`jIy6Dwlq>>{+m5Y5fvqgAmb;JZ&ENmF@XW!g=$}$>zNaM(!+NK zkIwG4uu;2^?JG_6CaCv@pm!w-;R9tiwRCmg(F$ebgz$qGzh~!a=3vh49oCF*5pi_jO*}t5BwI;D89&kdchdOCqAl>%(a~c43tOYN zev0}|;UO{`rTOkT|3A)~2UiIkZ@7jwc1zsRIXF0=24I~81ekw3cnjq8!RHU!hf})@ z&n)f#cOZ2A`UrnI1pbl>+-ypTRM)L-jJ)b@#j~SJi*%I5?LV&YJERI!dp@8C!Dm-n z&H){OJRtGUC;b1u>uB&AJOTsI{4)1CSFlZR0Y8*3@T$iCIN&)s*jIVoO^l)4`tz+bC!S}rB6T%WQ+jxw$n{|+w)M+n^A zEb`c3bY}}S3`vNh9<6uYduscPl;fRxYt{IDe#;lVb=r{<|fkQJWNr1T8DCC=7ye zz>E9aFLRwJ+XeFttgY2~IPHQ`t6`AEdP$eQW>cxycLt9_BGP6PaHZg8{W^?N4nElG z!MlftN3~0{QDm|KG-#P4BM(~PyA0sHfy7ypH_DKiG@IBwtS9yHWApT_CflM~R1yjA zn^VL?!cfCa+uM9w{R|UpLM}K3L-!|@;w6*%x1w}$dS(N(i6*p8>96mmgB!-$=7AGt z;@i7YyiL5DCGHkg0(_pX1byak*U-&kzzvJZLp@LhPr4Hc-oOI4dTB5h>r*Hbq65#^ zD9Bh&LPiF)B$nx|tecdRk6lN4?SjlVdR34eu@jKqVC< Js>BR}{s**3=BWSx literal 14224 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 i--) { - uint8_t * dst = ((uint8_t *)dest) + i*w*3; + uint8_t * dst = ((uint8_t *)dest) + i*w*2; for (unsigned int j=0; j>24) & 0xff, (pixel>>16) & 0xff, (pixel>>8) & 0xff); dst += 2; - *dst++ = 0x0F; } } break; + case 1: break; @@ -355,13 +355,13 @@ const char * bmpLoad(uint8_t * bmp, const char * filename, uint16_t width, uint1 f_close(&bmpFile); return SDCARD_ERROR(result); } - uint8_t * dst = ((uint8_t *)dest) + i*w*3; + uint8_t * dst = ((uint8_t *)dest) + i*w*2; for (uint32_t j=0; j> ((j & 1) ? 0 : 4)) & 0x0F; uint8_t val = palette[index]; *((uint16_t *)dst) = RGB(val, val, val); dst += 2; - *dst++ = 0x0F; + // *dst++ = 0x0F; } } break; diff --git a/radio/src/gui/Horus/lcd.cpp b/radio/src/gui/Horus/lcd.cpp index 09a6a4a09..a9c675251 100644 --- a/radio/src/gui/Horus/lcd.cpp +++ b/radio/src/gui/Horus/lcd.cpp @@ -400,14 +400,13 @@ void lcdDrawSolidFilledRect(coord_t x, scoord_t y, coord_t w, coord_t h, LcdFlag #endif #if !defined(BOOT) -void lcdDrawFilledRect(coord_t x, scoord_t y, coord_t w, coord_t h, uint8_t pat, LcdFlags att) +void lcdDrawFilledRect(coord_t x, scoord_t y, coord_t w, coord_t h, LcdFlags att) { for (scoord_t i=y; i> 1) + ((pat & 1) << 7); + lcdDrawHorizontalLine(x, i, w, SOLID, att); } } #endif @@ -847,15 +846,23 @@ void lcdDrawHorizontalLine(coord_t x, coord_t y, coord_t w, uint8_t pat, LcdFlag display_t color = lcdColorTable[COLOR_IDX(att)]; uint8_t opacity = 0x0F - (att >> 24); - while (w--) { - if (pat & 1) { + if (pat == SOLID) { + while (w--) { lcdDrawTransparentPixel(p, opacity, color); - pat = (pat >> 1) | 0x80; + p++; } - else { - pat = pat >> 1; + } + else { + while (w--) { + if (pat & 1) { + lcdDrawTransparentPixel(p, opacity, color); + pat = (pat >> 1) | 0x80; + } + else { + pat = pat >> 1; + } + p++; } - p++; } } @@ -883,6 +890,13 @@ void lcdDrawVerticalLine(coord_t x, coord_t y, coord_t h, uint8_t pat, LcdFlags } } +#if defined(SIMU) +inline void lcdDrawBitmapDMA(coord_t x, coord_t y, coord_t width, coord_t height, const uint8_t * img) +{ + lcdDrawBitmap(x, y, img-4, 0, 0, -1); +} +#endif + #if !defined(BOOT) void lcdDrawBitmap(coord_t x, coord_t y, const uint8_t * bmp, coord_t offset, coord_t width, int scale) { @@ -898,16 +912,15 @@ void lcdDrawBitmap(coord_t x, coord_t y, const uint8_t * bmp, coord_t offset, co } if (scale == 0) { - scale = -1; + lcdDrawBitmapDMA(x, y, width, height, bmp+4); } - - if (scale < 0) { + else if (scale < 0) { for (coord_t i=0, row=0; row> 11; - uint16_t blue = 0x001F & color; - uint16_t green = (0x07E0 & color) >> 5; + uint8_t red = (0xF800 & color) >> 11; + uint8_t blue = 0x001F & color; + uint8_t green = (0x07E0 & color) >> 5; - /* configure DMA2D */ - DMA2D_InitTypeDef DMA2D_InitStruct; DMA2D_DeInit(); + + DMA2D_InitTypeDef DMA2D_InitStruct; DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M; DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565; DMA2D_InitStruct.DMA2D_OutputGreen = green; @@ -450,18 +450,84 @@ void lcdDrawSolidFilledRectDMA(uint16_t x, uint16_t y, uint16_t w, uint16_t h, u while (DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET); } +void lcdDrawBitmapDMA(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint8_t * bitmap) +{ + uint32_t addr = CurrentFrameBuffer + 2*(LCD_W*y + x); + + DMA2D_DeInit(); + + DMA2D_InitTypeDef DMA2D_InitStruct; + DMA2D_InitStruct.DMA2D_Mode = DMA2D_M2M; + DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565; + DMA2D_InitStruct.DMA2D_OutputMemoryAdd = addr; + DMA2D_InitStruct.DMA2D_OutputGreen = 0; + DMA2D_InitStruct.DMA2D_OutputBlue = 0; + DMA2D_InitStruct.DMA2D_OutputRed = 0; + DMA2D_InitStruct.DMA2D_OutputAlpha = 0; + DMA2D_InitStruct.DMA2D_OutputOffset = (LCD_W - w); + DMA2D_InitStruct.DMA2D_NumberOfLine = h; + DMA2D_InitStruct.DMA2D_PixelPerLine = w; + DMA2D_Init(&DMA2D_InitStruct); + + DMA2D_FG_InitTypeDef DMA2D_FG_InitStruct; + DMA2D_FG_StructInit(&DMA2D_FG_InitStruct); + DMA2D_FG_InitStruct.DMA2D_FGMA = CONVERT_PTR_UINT(bitmap); + DMA2D_FG_InitStruct.DMA2D_FGO = 0; + DMA2D_FG_InitStruct.DMA2D_FGCM = CM_RGB565; + DMA2D_FG_InitStruct.DMA2D_FGPFC_ALPHA_MODE = NO_MODIF_ALPHA_VALUE; + DMA2D_FG_InitStruct.DMA2D_FGPFC_ALPHA_VALUE = 0; + DMA2D_FGConfig(&DMA2D_FG_InitStruct); + + /* Start Transfer */ + DMA2D_StartTransfer(); + + /* Wait for CTC Flag activation */ + while (DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET); +} + +void DMAcopy(void * src, void * dest, int len) +{ + DMA2D_DeInit(); + + DMA2D_InitTypeDef DMA2D_InitStruct; + DMA2D_InitStruct.DMA2D_Mode = DMA2D_M2M; + DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565; + DMA2D_InitStruct.DMA2D_OutputMemoryAdd = CONVERT_PTR_UINT(dest); + DMA2D_InitStruct.DMA2D_OutputGreen = 0; + DMA2D_InitStruct.DMA2D_OutputBlue = 0; + DMA2D_InitStruct.DMA2D_OutputRed = 0; + DMA2D_InitStruct.DMA2D_OutputAlpha = 0; + DMA2D_InitStruct.DMA2D_OutputOffset = 0; + DMA2D_InitStruct.DMA2D_NumberOfLine = LCD_H; + DMA2D_InitStruct.DMA2D_PixelPerLine = LCD_W; + DMA2D_Init(&DMA2D_InitStruct); + + DMA2D_FG_InitTypeDef DMA2D_FG_InitStruct; + DMA2D_FG_StructInit(&DMA2D_FG_InitStruct); + DMA2D_FG_InitStruct.DMA2D_FGMA = CONVERT_PTR_UINT(src); + DMA2D_FG_InitStruct.DMA2D_FGO = 0; + DMA2D_FG_InitStruct.DMA2D_FGCM = CM_RGB565; + DMA2D_FG_InitStruct.DMA2D_FGPFC_ALPHA_MODE = NO_MODIF_ALPHA_VALUE; + DMA2D_FG_InitStruct.DMA2D_FGPFC_ALPHA_VALUE = 0; + DMA2D_FGConfig(&DMA2D_FG_InitStruct); + + /* Start Transfer */ + DMA2D_StartTransfer(); + + /* Wait for CTC Flag activation */ + while (DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET); +} + void lcdStoreBackupBuffer() { - for (uint16_t * src = (uint16_t *)CurrentFrameBuffer, * dest = (uint16_t *)LCD_BACKUP_FRAME_BUFFER; src < (uint16_t *)(CurrentFrameBuffer+DISPLAY_BUFFER_SIZE); src++, dest++) { - *dest = *src; - } + uint16_t * src = (uint16_t *)CurrentFrameBuffer, * dest = (uint16_t *)LCD_BACKUP_FRAME_BUFFER; + DMAcopy(src, dest, DISPLAY_BUFFER_SIZE); } void lcdRestoreBackupBuffer() { - for (uint16_t * dest = (uint16_t *)CurrentFrameBuffer, * src = (uint16_t *)LCD_BACKUP_FRAME_BUFFER; dest < (uint16_t *)(CurrentFrameBuffer+DISPLAY_BUFFER_SIZE); src++, dest++) { - *dest = *src; - } + uint16_t * dest = (uint16_t *)CurrentFrameBuffer, * src = (uint16_t *)LCD_BACKUP_FRAME_BUFFER; + DMAcopy(src, dest, DISPLAY_BUFFER_SIZE); } void lcdRefresh() diff --git a/radio/util/img2lbm.py b/radio/util/img2lbm.py index 7d8a152c2..e02ac7a25 100755 --- a/radio/util/img2lbm.py +++ b/radio/util/img2lbm.py @@ -51,7 +51,8 @@ elif what == "5/6/5/8": for x in range(width): pixel = image.pixel(x, y) val = ((Qt.qRed(pixel) >> 3) << 11) + ((Qt.qGreen(pixel) >> 2) << 5) + ((Qt.qBlue(pixel) >> 3) << 0) - f.write("%d,%d,%d," % (val%256, val/256, Qt.qAlpha(pixel) >> 4)) + # f.write("%d,%d,%d," % (val%256, val/256, Qt.qAlpha(pixel) >> 4)) + f.write("%d,%d," % (val%256, val/256)) f.write("\n") elif what == "4bits": colors = []