From 1ff32c64f507708ac73d67fe35ceb6166950cb6f Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 9 Jan 2016 01:05:09 +0100 Subject: [PATCH] [Horus] Bitmaps must be word aligned! --- radio/src/CMakeLists.txt | 5 +++-- radio/src/bitmaps/horus/shutdown.png | Bin 3320 -> 3521 bytes radio/src/gui/horus/bitmaps.cpp | 32 +++++++++++++-------------- radio/src/gui/horus/gui.h | 1 + radio/src/gui/horus/lcd.cpp | 20 ++++++++--------- radio/src/gui/horus/lcd.h | 2 +- radio/src/gui/horus/splash.cpp | 4 ++-- radio/src/gui/horus/widgets.cpp | 16 +++++++++----- radio/src/opentx.cpp | 2 +- 9 files changed, 44 insertions(+), 38 deletions(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index a7cbe9122..e4fd3b316 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -743,10 +743,10 @@ if(ARCH STREQUAL ARM) set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_ASM_COMPILE_OBJECT " -o ") - set(COMMON_FLAGS "-mcpu=${MCU} -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=opentx.lst -O${OPT} -gdwarf-2 -DHSE_VALUE=${HSE_VALUE} -fno-exceptions -fdata-sections -ffunction-sections ${WARNING_FLAGS}") + set(COMMON_FLAGS "-mcpu=${MCU} -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=firmware.lst -O${OPT} -gdwarf-2 -DHSE_VALUE=${HSE_VALUE} -fno-exceptions -fdata-sections -ffunction-sections ${WARNING_FLAGS}") set(CMAKE_C_FLAGS "${COMMON_FLAGS} -Wimplicit") set(CMAKE_CXX_FLAGS "${COMMON_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -nostartfiles -lm -T${RADIO_SRC_DIRECTORY}/${LINKER_SCRIPT} -Wl,-Map=opentx.map,--cref,--no-warn-mismatch,--gc-sections") + set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -nostartfiles -lm -T${RADIO_SRC_DIRECTORY}/${LINKER_SCRIPT} -Wl,-Map=firmware.map,--cref,--no-warn-mismatch,--gc-sections") if(PCB STREQUAL TARANIS) add_subdirectory(targets/${TARGET_DIR}/bootloader) @@ -808,6 +808,7 @@ endif() add_custom_target(firmware.lss COMMAND avr-objdump -h -S firmware.elf > firmware.lss DEPENDS firmware.elf + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) if(CPU_FAMILY STREQUAL STM32) diff --git a/radio/src/bitmaps/horus/shutdown.png b/radio/src/bitmaps/horus/shutdown.png index 8f3307020596d9d0825cca242c7fd61327722662..6099369588de31e7661586017866c0a266cff857 100644 GIT binary patch literal 3521 zcmZ8k2{fBq*N*nyQWPzz8cHWqtLC7hx8|BcTWTH>1QAuzP~sYER&rZV(7`%EZ{< z9^kcs!Qwgw%(SX!KLK~r-`M^UkY^kX4n0|7Fc9R#n!pS>$2qu!As4bSvl~DTZepNo z9sGTf6miG;zF1oy(jHuKq22Je*OGCmmpr@738L>j^iqcHUV8p0QR`K*AJURGSLIGo zZ5o(Vh)#0vFc&pXno&PBP?dMb>@+XbkZ;2024YWOyjvqt5UM z@v$3yu3gMWecPjt`qE~#`@A@lkoNwi_I7W@YH;g6*MBiY;@Dn!zLAT0c$Z@!0|Nuu z*PZqC_5b|y5A^X;cUf;_a`?`C{_o5y_%5pN5awWS`@`XZm{q@N-dCDgYEsfw1qBH) zu@(y~22-)Npt@MpH7d%cJ5)TUva0u#T9xxEitN{p02E@hHxE(}?|b2Gfsf@Zi;lAOq?!b7aJq z;t&cL4u=a3e0V=pHKlYKuYdZ*7e~30a*nd37sn2djhINmgu>m6u;wScr)r z=jBb$%#d?)KeZj%anR20kv$x(-=4<1x_k&ff7Y?wE!L$pVkW~&oG;!Y9~!zLUxBH0 zI#_48dLfb9@A4n06HW7?Ay=fN=GSqhJah`0v4#t~ckfKSS>C-NU-fk4Sj1siQuebt zcQ-dbX5DmVqPIFRCnsk@OhYt9P*AXO463Y*P!pZ7OG-^uC-%s95zNU630%2L4~DC^ zb+Jffp1JgKP{H8OtgNj0hJviDixh`bjGE3)({yAX2|9}sP=`QzjDdwxpvdfk?CeW% zh?-wWB(m?1U0)b1W%<4`ua&j+Z=5FvoSmGW3Xz^a*QKqg84`OuGt7t8nQieGGVGy`b zOyA`kLyZ|`%GlC$ZCjq}(#xdbu_*O~+dfpYri3ZKF)4-R&h?bDg%?wnssb?9*5 zLL2pISQM&o%P3ZF0#o}Z_<>5sINzlPiP@b&yUeMiUqUdxRAS)2Cv0xu? zAJ-rOdOPS-D|e-=qCzFpfTnipHZd3W@dsBfh$ucO*(n4qe7P?tz?A) z0s?@R#?+2P7{=60gYoADrnTBlyg0s zSKk|8TM-cJi#|VF67;>jJwYe?Foz6q1#93+O>Y|a-u7(fUa4mf;l88eFoU6?sabGG z_BV~unt&&}^}a(YP1LfB-{#f~Wu&Dq8RnD8m`oy($jQmss_0N(#B2;BhOSRcOqiw1 z>n6pe^j75qv>;dW=I_7jaqB(`!Twt;gsTf$SC`{)ss#)-tvLJzuJ00x+aV@@jNeQ)WL)PD`^bwDzGm)Z;!v?tX`? zKk+V&kGvVW5u8-b<-4&k)RuaF701Q092oc&(B)R{;o)I??dXJ=tJ>$Odm@?Xn%^*- z%PT7@d1iR-Ki}>yf4HTgVOz@J=jY$Wl&$A`CkjM=l$Mb>;$}0v0!cFU3m4k>-QDn+~Ku~xCH6!MDI(4e;tSmEvoJCw2a(z24+Wln;>0`5{TziYbKnb zzbYex1diqy2uUwH;mH3U19@#RCrDo#GqSU~$Y)?@_2!|m9qmvQ0W&lLd`4PvAwF>q zioW_KexX&aoLppET0OiNaHtLlgP`CKJc}j-o%j9K}s#j{u#K%_<KkaEh zfBHulC*tdp8Mwl!vr?0{m`K#kiPj0747}@|d70V<1 zY&WFcj`nD_mu>mdEp(IlIKZR>W??~RFeGo{2HeVx2daT&+N}dkk9y83K$O+h)f?HL z#avvuM#=#})K4!*o&!3eZMSq(d--yfi7KEsjN7%3X1cehURsvv$edMlSx9!vyEos# z$s6T;uq}*Qo$1+SweUBPJ)^H`L7~GhN7~!l!*(|UN*b2WN_c;Q)jP$+#y%LSxtr6k zeYm&Un6@SN8`{%PSy`F&mIAQy>ua{2o}P_clgT`1<^M7vaU8;QY;A?R&jw>A{e@t5 zR?P&{a|qZIDZ+oZ%^Y8K3`DAU{#CPE4CItw0ltjf^Kf&YI4Eyw(#3ayB_+ogjCe(~){Ps9F~SQ$P(?hkT8Ct%yBwifB{X+TQkR>onhatr!TpF5)nJ zDg+T6e9o0#m6LOP$PR(Hn5>Gf^BKH41>N7@9AhJ4XdjOo@=2>-#B=a7c5-RhV}e`RJaV`}xf2-#_lHboE> zm9H`3i}D>*g(83Koc>@CaetzLG-@M1$%V)dFJBBu1U*~|!+D(~mZ?Xn8Rg-pM`zCM1Q zRSAq;8JxqVxNy+Nnd(QvuFlWTYgUjc6pC?#KyCc*(GXI&-iMqV_rrtz$<CCBBWtQd%l59A5PE@zKIewU;=*e`Sg^Fo?O(kSL7)-rpZE{*i;NRp#Etw_s-# zhxlV>?sDRn?wKAU+YL7S{kufyg7Q2&JtHHL2d$-~#Ol0Ox;5#TpPLJBA~?LW84H`7 zo16PmNyaNUztEhz^rPNMTt=<9FsoLF80#DR>5J1NOTC#NwyYGZ$Pqtd*3tG{!Zf?<* zCs`eGK&J23p?HSK&-wW#JS4VK7cQpZ_lW>u)&&;T+_`@r3_t=?jz*z?Y@iltGC~A) z*BXb@YAl`y6xk?e;Ff!{BXiJ^r-i5@)q{{Rh|8SDT6 literal 3320 zcmWkxc|26z8`m2{wj|lNv4?CkZ%AS?c8Rf*eGDOtb(l~id&bB*gqbAyNwV|uO0R8j z?XqNz>`PfA;&=Pw-23_5=iKK!=Xsv*_k2&HnW;V-Ge0vO9UYsY0TKnie}LmQ(_i3o zT!`|=a4EpRE(o-b{}~tV%H-j|kBq^F_jDQO7+Kh$jAkt+wsdr?*@j4jCGN{sez?ii zK7p?KjHLMsN!(YsxOBx5^bMOkk{CN}-Jj#=nLD51+%2Cc5|qtfb#U*r;z+nF*M|5n zMo%PAIxgNV^5WXKW{&(6XTh-=`t!H@uHRvO(~QEF-_-cr<8$w@m80O3&3*tj03-zn z>Qg9Z+~G`)pEkxT<~~NJx=uu|zS71(pSjvPIONR(4XyS~p*IMkv$L}*WO+$RNkzr) z;}y;gcovmCvE&YvlT*~`(ayJTXtK%j*4Dov8`e}ZgX(HWGLMBHG!a?#_;@!@)&J~x zuS+xKqKd}b+}vDE{NZy!^%sO1znNQqCVP=hFy+`E2M2usu(`Pzth)FFIK0&M!8lt% zS6|;j+^!0pI0z5~_H&foCr)k`>8G}Y@4a#0V?@{KSXo((l-&39Oh`<;l4}%(lfSvWh-o&5aXG_3;8 zLM!nS2n03jt(6sNc=ZR!Z_uKf%*{YgAMlMkxufKMVQ4v48?*gS&SDfD=TZe zl8G6nUEQX+wA8R<7JAYevRocqR%CbV*etw_Z*x2|OeNGfLFf%g?2naAUBbi9$!90n!^4sg{!``*t zwZFi8$`@}hG?{e`8^yCXK!!s=jZ3@N_DCj-#CbkjcsgfeE9I;*RNlZRWusy#S2cs zE(d%245Q+|y%LdNJM=esXk!@3Wo2b{zxuFPtjL|m0nqAv$RjxaQlPqwCLC^AjG7F7 z*Np#ZT8xT~iz7S;Y@GIjFQ`RrPAL1-pA1rUK1TiS$+pwRbdjS^j}V3D;x&;cp*#SWS-@uBxaxRfqab>DZs$FLWLkImL?-E9upw5pjMEd|F7?4mCyKltRi#Uhv&~( z2Pt&h0AQlGy1MGcr7Kj)O50Sc?r2`o?CvkP?#dH(x2}RRCx`Fap}&)lgkhSDSCsd zJv18SWlwiEbWS^A92{JPuu^pHzf>D)xpED?oE#2z<^Dd1-jI+G zzYgFtRM&8`p&wxUqj*gDooxW2Pb1nwqz!W|A8*Co$ zce~T2)rb`i^+c>fK_z{P-o?{(nIw#d#}Le@7*#z9L^`pl>~&0!jKI(|j)Nb3vJMf$XOL;sfvc;l<37#V-3@#doMy29>%fOZsj5Oz&CEpKKWMzG z2*v>e3g^z1Yy?5!>Y0}IVmX!g0!>P6|;82 z2g7h&laQ25yJ}-)mDYCeHR@qd5G?ZS>VBsgS6^RWv5rO0GoatqsWDJe^PZDa0bXTF z$t%D=Ha>pje!eC?Yk>tsiUPKMWMmKAT1HC-QViN9GTcj#m0em|^6>BoUIo(@q|8nO z6k$be+hFT#cl){*@x^?4B1#)BHs-_MXkY2?H=S=Ft6{~|2(MPb$hy}`OvqLEpMDE+ z;@od(E=nf3@Wd!E0a?BO2+;uXARC+Um4U+RmylxSmX;ZK6?~Pm7e}&Y=%#H1*8xbu z2^E!{tz`y_iNYqP#)S;g$Ea`{k($&<|yq+wBC_XzobMJg!X)Ax> z+(j7rDq$DInnNYU22I^<) zpXGM{(sR4>Z+(5(=v#An9kE@1+}Wx6k}t?gi$mTdJ2ebzn~9W#qhtP*3O*n_kRAd- z5pArkISW_%^7H|Sp#*2()Xv7ZqEV+^HOBmlUC%#4uTV`4&EQ~*g!-$Jul|k^4$od$8nE&SIUG!Ezd{9~l z($!_iPu*cZIo^{VLgOMLhJPa{VrHc?fzZ9tQj2?17Om$-rIzeMx3~}->D?Ix1*XC- z#90qiEy=;`7TOO06 zsEdn>-D`YB07%Io+9#>=uh-YT6%`c&8;y#qsMM!~Dv-&OHuNjTs~IV3GTBNM_O(e- z)RB=9J7Gs{7zTI(uBO3%Ct`i{dc@k(r%wYLA5hH(^{ZOL+Jwbc8xR_WjkUFzyXP0K zadDBVSA%bLK7BXj^$g_sJ&yU0;d>Z`yhA9{!qQR*=phd=O%$lvBP%*J8w^Z=XYAOR zHSDMA+U318$n{&6RK8OmdW-E};0}UV|XatYob~!BqQ$ZuhQ%@DhCa z^z?D(d1*sKPC@;fH*v~4Am>1<7lGTp?%L-5{@k(N9Ge&*6xP&>Ng)`C zE;C*hR_gyG#^ko=fd*C7Sll@!faWVw?ciIoLBG@gz}gzZ{95kj%`D@}?(S~j0!di7 zl?6iHatZw%w_?&cQ zq1)4q=^hCE!ovwTFROe-SVBq)!?_%KxqmY^8}d~la|TfLn-;A|D%t?GNo4GGSy?x- zak_!T+S=OI))t8@UR~|H5!aBerty!5(C`K!OF;a`}rxz$xYQg%Ijlf&57LF-mYs>ASzbA)Wp}>mn+=3 z@yOTr89)eDKfB|~%Pk@@S8@<4zjtN2__H^k>VBP6sio0rEs2jGo(EwUr0sBmYVG{j z!N%jyC%a3=A9U!t{s)D@y-b-eUHTfB>7hav!tYo2qE(9Dyota~%sRP!qow`%TiOmk zbCvqFE#A2y0MStYS%5VT8BQBH!P2A^aZ)$ASj{ diff --git a/radio/src/gui/horus/bitmaps.cpp b/radio/src/gui/horus/bitmaps.cpp index 86f511979..7e71b8768 100644 --- a/radio/src/gui/horus/bitmaps.cpp +++ b/radio/src/gui/horus/bitmaps.cpp @@ -200,31 +200,31 @@ const uint8_t * const LBM_MODEL_ICONS[] = { * Model selection screen bitmaps */ -const uint8_t LBM_LIBRARY_ICON[] = { +const uint8_t LBM_LIBRARY_ICON[] __attribute__((aligned(32))) = { #include "mask_library.lbm" }; -const uint8_t LBM_LIBRARY_SLOT[] = { +const uint8_t LBM_LIBRARY_SLOT[] __attribute__((aligned(32))) = { #include "mask_library_slot.lbm" }; -const uint8_t LBM_LIBRARY_CURSOR[] = { +const uint8_t LBM_LIBRARY_CURSOR[] __attribute__((aligned(32))) = { #include "mask_library_category_index.lbm" }; -const uint8_t LBM_SCORE0[] = { +const uint8_t LBM_SCORE0[] __attribute__((aligned(32))) = { #include "mask_library_score_0.lbm" }; -const uint8_t LBM_SCORE1[] = { +const uint8_t LBM_SCORE1[] __attribute__((aligned(32))) = { #include "mask_library_score_1.lbm" }; -const uint8_t LBM_STAR0[] = { +const uint8_t LBM_STAR0[] __attribute__((aligned(32))) = { #include "mask_library_star_0.lbm" }; -const uint8_t LBM_STAR1[] = { +const uint8_t LBM_STAR1[] __attribute__((aligned(32))) = { #include "mask_library_star_1.lbm" }; @@ -232,30 +232,30 @@ const uint8_t LBM_STAR1[] = { * Other */ -const uint8_t LBM_ASTERISK[] = { +const uint8_t LBM_ASTERISK[] __attribute__((aligned(32))) = { #include "asterisk.lbm" }; -const uint8_t LBM_POINT[] = { +const uint8_t LBM_POINT[] __attribute__((aligned(32))) = { #include "mask_point.lbm" }; -const uint8_t LBM_CURVE_POINT[] = { +const uint8_t LBM_CURVE_POINT[] __attribute__((aligned(32))) = { #include "mask_cvpoint.lbm" }; -const uint8_t LBM_CURVE_POINT_CENTER[] = { +const uint8_t LBM_CURVE_POINT_CENTER[] __attribute__((aligned(32))) = { #include "mask_cvpoint_center.lbm" }; -const uint8_t LBM_CURVE_COORD_SHADOW[] = { +const uint8_t LBM_CURVE_COORD_SHADOW[] __attribute__((aligned(32))) = { #include "mask_coord_shadow.lbm" }; -/* -const uint8_t LBM_SHUTDOWN[] = { + +const uint8_t LBM_SHUTDOWN[] __attribute__((aligned(32))) = { #include "shutdown.lbm" }; -const uint8_t LBM_SLEEP[] = { +const uint8_t LBM_SLEEP[] __attribute__((aligned(32))) = { #include "sleep.lbm" -}; */ \ No newline at end of file +}; \ No newline at end of file diff --git a/radio/src/gui/horus/gui.h b/radio/src/gui/horus/gui.h index 355263f69..45dbbbbdb 100644 --- a/radio/src/gui/horus/gui.h +++ b/radio/src/gui/horus/gui.h @@ -119,6 +119,7 @@ extern const uint8_t LBM_STAR0[]; extern const uint8_t LBM_STAR1[]; // Other icons +extern const uint8_t LBM_SPLASH[]; extern const uint8_t LBM_ASTERISK[]; extern const uint8_t LBM_POINT[]; extern const uint8_t LBM_CURVE_POINT[]; diff --git a/radio/src/gui/horus/lcd.cpp b/radio/src/gui/horus/lcd.cpp index d82f15b7c..2f979094a 100644 --- a/radio/src/gui/horus/lcd.cpp +++ b/radio/src/gui/horus/lcd.cpp @@ -870,17 +870,17 @@ inline void lcdDrawBitmapDMA(coord_t x, coord_t y, coord_t width, coord_t height #endif #if !defined(BOOT) -void lcdDrawBitmap(coord_t x, coord_t y, const uint8_t * bmp, coord_t offset, coord_t width, int scale) +void lcdDrawBitmap(coord_t x, coord_t y, const uint8_t * bmp, coord_t offset, coord_t height, int scale) { - int w = getBitmapWidth(bmp); - int height = getBitmapHeight(bmp); + int width = getBitmapWidth(bmp); + int h = getBitmapHeight(bmp); - if (!width || width > w) { - width = w; + if (!height || height > h) { + height = h; } - if (x+width > LCD_W) { - width = LCD_W-x; + if (x+height > LCD_W) { + height = LCD_W-x; } if (width == 0 || height == 0) { @@ -888,12 +888,12 @@ void lcdDrawBitmap(coord_t x, coord_t y, const uint8_t * bmp, coord_t offset, co } if (scale == 0) { - lcdDrawBitmapDMA(x, y, width, height, bmp+4); + lcdDrawBitmapDMA(x, y, width, height, bmp + 4 + offset*width*2); } else if (scale < 0) { for (coord_t i=0, row=0; row