From 97a3b5115cb89465a7f9bf16cb657aca46ff9841 Mon Sep 17 00:00:00 2001 From: aleph Date: Mon, 28 Feb 2011 15:12:04 +0000 Subject: [PATCH] Add new board: SAM3X-EK git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4734 38d2e660-2303-0410-9eaa-f027e97ec537 --- boards/sam3x-ek/.image.png | Bin 0 -> 47710 bytes boards/sam3x-ek/.spec | 30 + boards/sam3x-ek/hw/hw_hx8347.h | 163 ++ boards/sam3x-ek/hw/hw_led.h | 101 + boards/sam3x-ek/templates/.spec | 3 + boards/sam3x-ek/templates/empty/.spec | 8 + boards/sam3x-ek/templates/empty/cfg/cfg_adc.h | 112 + .../sam3x-ek/templates/empty/cfg/cfg_afsk.h | 113 + .../sam3x-ek/templates/empty/cfg/cfg_ax25.h | 75 + .../sam3x-ek/templates/empty/cfg/cfg_battfs.h | 67 + .../templates/empty/cfg/cfg_context_switch.h | 71 + .../templates/empty/cfg/cfg_dataflash.h | 55 + .../templates/empty/cfg/cfg_dc_motor.h | 111 + .../sam3x-ek/templates/empty/cfg/cfg_debug.h | 70 + .../sam3x-ek/templates/empty/cfg/cfg_eeprom.h | 64 + .../templates/empty/cfg/cfg_emb_flash.h | 73 + boards/sam3x-ek/templates/empty/cfg/cfg_eth.h | 57 + boards/sam3x-ek/templates/empty/cfg/cfg_fat.h | 156 ++ .../templates/empty/cfg/cfg_flash25.h | 51 + .../templates/empty/cfg/cfg_formatwr.h | 65 + boards/sam3x-ek/templates/empty/cfg/cfg_gfx.h | 67 + .../templates/empty/cfg/cfg_hashtable.h | 51 + .../sam3x-ek/templates/empty/cfg/cfg_heap.h | 50 + boards/sam3x-ek/templates/empty/cfg/cfg_i2c.h | 83 + boards/sam3x-ek/templates/empty/cfg/cfg_i2s.h | 74 + .../templates/empty/cfg/cfg_ini_reader.h | 48 + boards/sam3x-ek/templates/empty/cfg/cfg_kbd.h | 58 + .../sam3x-ek/templates/empty/cfg/cfg_keytag.h | 61 + .../sam3x-ek/templates/empty/cfg/cfg_kfile.h | 61 + .../templates/empty/cfg/cfg_lcd_32122a.h | 63 + .../templates/empty/cfg/cfg_lcd_hd44.h | 69 + .../sam3x-ek/templates/empty/cfg/cfg_lm75.h | 57 + .../sam3x-ek/templates/empty/cfg/cfg_lwip.h | 1856 +++++++++++++++++ boards/sam3x-ek/templates/empty/cfg/cfg_md2.h | 53 + .../templates/empty/cfg/cfg_monitor.h | 47 + .../sam3x-ek/templates/empty/cfg/cfg_nmea.h | 85 + .../sam3x-ek/templates/empty/cfg/cfg_parser.h | 66 + .../sam3x-ek/templates/empty/cfg/cfg_phase.h | 55 + .../templates/empty/cfg/cfg_pocketbus.h | 71 + .../sam3x-ek/templates/empty/cfg/cfg_proc.h | 107 + boards/sam3x-ek/templates/empty/cfg/cfg_pwm.h | 56 + .../sam3x-ek/templates/empty/cfg/cfg_ramp.h | 115 + .../sam3x-ek/templates/empty/cfg/cfg_random.h | 65 + .../templates/empty/cfg/cfg_randpool.h | 55 + boards/sam3x-ek/templates/empty/cfg/cfg_sd.h | 75 + boards/sam3x-ek/templates/empty/cfg/cfg_sem.h | 47 + boards/sam3x-ek/templates/empty/cfg/cfg_ser.h | 222 ++ .../sam3x-ek/templates/empty/cfg/cfg_signal.h | 47 + .../templates/empty/cfg/cfg_spi_bitbang.h | 51 + .../templates/empty/cfg/cfg_stepper.h | 69 + .../templates/empty/cfg/cfg_tas5706a.h | 50 + .../sam3x-ek/templates/empty/cfg/cfg_tftp.h | 20 + .../sam3x-ek/templates/empty/cfg/cfg_thermo.h | 71 + .../sam3x-ek/templates/empty/cfg/cfg_timer.h | 67 + boards/sam3x-ek/templates/empty/cfg/cfg_usb.h | 85 + .../sam3x-ek/templates/empty/cfg/cfg_usbkbd.h | 78 + .../templates/empty/cfg/cfg_usbmouse.h | 78 + .../sam3x-ek/templates/empty/cfg/cfg_usbser.h | 78 + boards/sam3x-ek/templates/empty/cfg/cfg_wdt.h | 47 + .../sam3x-ek/templates/empty/cfg/cfg_xmodem.h | 79 + boards/sam3x-ek/templates/empty/empty.mk | 87 + boards/sam3x-ek/templates/empty/empty_user.mk | 43 + boards/sam3x-ek/templates/empty/main.c | 32 + .../sam3x-ek/templates/empty/project.bertos | 63 + 64 files changed, 6207 insertions(+) create mode 100644 boards/sam3x-ek/.image.png create mode 100644 boards/sam3x-ek/.spec create mode 100644 boards/sam3x-ek/hw/hw_hx8347.h create mode 100644 boards/sam3x-ek/hw/hw_led.h create mode 100644 boards/sam3x-ek/templates/.spec create mode 100644 boards/sam3x-ek/templates/empty/.spec create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_adc.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_afsk.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_ax25.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_battfs.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_context_switch.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_dataflash.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_dc_motor.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_debug.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_eeprom.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_emb_flash.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_eth.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_fat.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_flash25.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_formatwr.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_gfx.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_hashtable.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_heap.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_i2c.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_i2s.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_ini_reader.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_kbd.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_keytag.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_kfile.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_lcd_32122a.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_lcd_hd44.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_lm75.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_lwip.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_md2.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_monitor.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_nmea.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_parser.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_phase.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_pocketbus.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_proc.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_pwm.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_ramp.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_random.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_randpool.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_sd.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_sem.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_ser.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_signal.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_spi_bitbang.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_stepper.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_tas5706a.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_tftp.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_thermo.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_timer.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_usb.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_usbkbd.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_usbmouse.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_usbser.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_wdt.h create mode 100644 boards/sam3x-ek/templates/empty/cfg/cfg_xmodem.h create mode 100644 boards/sam3x-ek/templates/empty/empty.mk create mode 100644 boards/sam3x-ek/templates/empty/empty_user.mk create mode 100644 boards/sam3x-ek/templates/empty/main.c create mode 100644 boards/sam3x-ek/templates/empty/project.bertos diff --git a/boards/sam3x-ek/.image.png b/boards/sam3x-ek/.image.png new file mode 100644 index 0000000000000000000000000000000000000000..dee37aa1e38bc04c678fb6a126658b605432639e GIT binary patch literal 47710 zcmeFYXH=72xHcGKkkA7L2?!E8K}smnYeb|=2kE_cklw^l4L$TGRf>R!^q1b0E=X?* zQlv`nFnQ0M`OeImnIGrJ{Ft>))=Kgu``*`na_w^0M60X4ASI$D0ssJ{iVAX?xc7eC z^CK9DdzI1V1p@$h%l_K>UYh1Ua5oQE8+#{fxR;-sHQd_Q-Ua~hor~3W^yqA6~Op1jBiy(U&)`J6}9PK+Y39urQ5CYF=%xM0d=yc4GRZ z5qBAsrMKNV-znVtYa)@aoyxEjm2r50=|8{vlZ0I27>HU)~Df~S#KcA`7Pr#ir{y!TA zn;-4}RJ$2c-|#F>g-uH69+ufYy#7p;SaPKPLP@lnv+>%9&>=Xg z_7gYTxX3Fv?!VS?DZ-g^OdS(}BJLIW!P1NQpGz0w?EB%!dR|IKM#Litv2Lz zjhL|-nSYZp=QY+ftED^TX3H(%PGFe#wJS%EdHz7rCXJ|bg1eNl{nt7FF{Xdzmxg+< zXsBzVVYfvNnxr=5_C*)Fq_5^bz7i~5%(Ktr!Pdv(moJH(9^S~1+p1gWdd2SE$Y)Ou zY^`l;w!3M`#@PQ&=-ie`H*R4NvGZ{3e<|?$@34A0d1~#w+B>@t`pp^QVEk#-XU8E6 zQM(g%de^E929B=xeU}F(TegKd7VPyW#zGlH+V~H{4YGp(03tej+*IqUs)$*-I`f!Y zxmsBB_&U4cmI44EA?@pCZs}<41-G!awRe$Z+HYxRg4kQg^mnurwPKQ%B9ibG!vQ#3dzr(1ot<1f#e5~1{sUJGcm40zyiD-_5b<)9WYSkv zhd*=mu!alr2=XAgpZnT-^D{{i!6iJbY{WF>Q^A+Dnp& z3D*w)PjD}LoBu+0@%&E`aCGqg+rrDogXH}`i~qX|{@2a?U&Q}y`M-(dxcGmT_BD6= zFX4Yj5>s?Gx3$)@xAL-+Wa9geA^$}blQZ|S*0y)He(7P4n+0Vaf69H^RUKs__x#liy-g6{PO-M!MOS2{a+LIFKhqbKmKQs{}#vp zL)ZV%_1|LPza{)XtLuO0`foAt-xB_x)%E``x`_VEXgMfr1z0%ro0H4G#JU>O7F91Wl426$W+2jQWB z&ZBYi%uiOzs`j?_sLz%>r8cg9d%nj)B|g76RepNB3Bg@x-`r&+XewN67TwOpUXKJ) z^7Q1i_|R6ae=mH&-q)v7AaPC(`bpssUwRq-andDddu`vz)m5)za&_=UUcl+>Y=$U$ zjQP`JjT2%R79i8%Jh~|Eq+ewj&|O)X!_a;)@~4(v>a2-ZMODT8D=PpZgZt4xDa>(j z`^>R8YdWd9`(WWd-(0V>8k|5m&#v0 zA%Eu_tJ|0M>jS3`>Ee5x9Q=)@NipAM`$yaUey7fr@R8NRzW8uWp(Fibi9n`y`YxpX z^2E?*PyZ%YU?=j;zBtdudlLqC`t6+zt-@7Hec9f?UtJf(?D2V}I^{6S^EbkQR`C)) zr8Ud)w}bcVgoV7lCHfVC@qHA^r3s&e#LAz{&FuV6W{(>h8kv>-Tbb7GbFurxb|m-a zm|g1N_XBEHU-Tq%`7Oc{Wz-bBdy_I>zZ=o^VpYA!o|e7Ih(~pmL_=+8)T811KaPHg zQ?VP91SHv3-BvGq?zyYX35VgeWbsxoXMZ?!djI2H?{wShtnTAy5I>2yZa7?w@3VY^ zwedgaKPK}05qo=;%m4UYEN;s}Z9iYY!BW+C#~JmcNOiTc3$fxAEa*xM(Ye(c3lP!!i-81z6%g(G~cTb*t9g> z_abQ6|F||#2L%lHDJ3`X-24__zEEpfWP`08`5Egm5Y;|DIKC>?0RqgLIvY%aoGs5n ziGzJVjgB%%hg^0|&DBFYPMGf}4Cbjt2E8I$Y(WQIDf!s~?4%x6JzQ z&(#rcj0Rn=GDrukW6HP4qo&YE_e4^9}4JJ=o#+XKz*CbTy}Tx zWk~=(_?uW%#yOb47HI8Zb<&AbNof)vmO<4uzMv-rRSS`52ps&bx4;~x z>DK92tV#M-#)GEc{lmQ9TFO2pkUDLHNC^)J!t?)0z)*7{{yYT~`tR=@~|+!AhU z_4f(z4nCdvw))olT`dIB)NQieBHc{=?Q%h5fmUp93}v1mK(aUl=2#W+2t)oF|M42G zp41m=rutnG)s2kMufS;EzcC3aa%p*sJS-T~6ZGAkBklLd6A7s?LR6F!;RPc_Kq0w- zK)^x3ql}yNejRDaaE^lOZQi?|lfp|pHt%@$VJl9 zkU90CJN$+6p8Qr}gjr+xm5}$7Jmo1Eu>#*3m7qGK3YbFV*EN1w=)=Kqr>UiivLV(KEL7z5cB+`nu(2>Sxl)?LcL3q4Gvv(#s4>X1dd*H8>w9EO*d+sX|4^y}2t6#25z zelz5ej8?}*Z;e_%6{P}5Mx#i0n~Z=C1&xFOnhllG zW}FX3eThAz!O@Lp&IhM7&o;6bb;S zP{P~4;xF3s3{J9MQY8R(gyutT8bTVHYhv-rQer@FZn|6F1_NWuN|gD-S)-Lx1?Z}= z{f=x&bQSmU8@0dgIxl$A#Vd!shgIl|jwiDYqvGAjsOr-PEI)Fk2h8C?+jh1vP@j)5$Ze@ zkn3E6^Y%aPxW!9!JK27BI^41iL3j#iQS;J;?3E>ps>ZLLFJ>9yO>@=_EQ+6nqQc;a zhewLpfw#4J#_2iZ??3)NthA}sq-wncD291*^L_@vZwqbmii^4oNy-!^EqjYG?5>h-JHk(%K4)yDhCQo`a&I^62 z<!G-ce_~UtEI6T0SHouC)}4xVbg++4%c)Xz0MwlgoP0lla7;PMfo(N>WrKr&H6y%{O@WL14zF z-`SQQVKhCk2~{ns&qh@)uKQdg@k$veI4CWRw>@ZMWb2QXty-RFO3}`GrMUR~6+$^L z|0O}EIzaPl8bIdkk!rk0hiRcjkj$iP!`a$?`;_|%7j;PySeA`dRkp>}CqS1kulTqh z1@0a?WHD&zYTA$@XI*^1R@~=s>l}XrmUN z`O}ZdAJinyj+3*t&x(FNSY0h-KB;WIQL7GV^eN?l0SFlhG)u+!@e)w?WifoBueW^5 z(q+|^2zgEZQLm2A7IE(yqJ7e^7j!gVO%mB1a>sDH`{URSHf!EN+yo3=IdeEU6prD% zm{_j@b&w_BT~E3$7%VfYPfWn@?(>Z^{)+N^bAz0ndv# zvO!jErZyF~C2f_nISWm^k*ghPiyd)}zLb!tP;*=G#tYYLw=X8*?w5QrZk4)5V*Jtq zPrq+@O*hn&Jt7tMhC$T7uJtyB997@3I8t&nfhbWIody+XK-g&D>4W$@Y2l}$(fRtO zrXeS5X{NrvEWsXtnYXC!!p5!XU$-ownxCEsyR=>R6@#qRxJIOe^yZtIR%X-^&~$JX znazOiw&!pj>cRSr4|HSNo8@6e9MmyF8;Dpw4Z&DA$K|3+`}8x2-oRRMQ?yG%Q%g(o zI7`~_j8q*uWzT^y6d zj1?B={x;!(xNE=N4k<N4BFD!wW_MPch@Y#f4hQs~a2a zc_F_9WmJH8a5Mmqac@)>%vdA`M1kSf*K>8-uI;ZU$$_fVD}ro9@F>)Ky!R4g+-vy? z#5c@&QNa~0k?r;;oU=6xciX(}!LBWgeEtVz??Mg_*kfoptZH98T&G^&5D*n8`E$Eu zq9y+qpP9 zXO`?;cD{FgJ=dyP_NmdWNEeY6p@E<#XjOv{$kJ8#uh&fn{|?A6p_#63-@iii{7I%} z2>Fvyn-UZE20-~N6b^*|!H@(>AP6o8P=KF#leb+9FV8H^snX;bN;p_~#FP^uimU)0 zfP~P$`N0K&f9Y?Jsm~|!aQ;f(yNNd-Bxa&I@F*pXx4JP3jwu%nDk)t*r1=OZ(cm*p zPtPpHDpjtxF%Wd8BQm(~=$cf(|Kcd60PZXYLBH~ zRZb&yyE?>tEchKAz)BdYpE5uMC=!4IF(!Z+r#;(GPh8tWJQvB6EGp|gd>kzuse!K$ z)`ezZ>o5w+P`s}{gCfaUK!=?UPkrsiXu5DNV3$O(po<_GZRP!*^AjJJz}?B|w}RG` zveB8{x5a0=!a@zT%>{PN1(Yf3sRk6P!Jj`@+6<-`={{5U5R&9OZNH1Wb9S&;3I0Z5 z83yTsQ5}Xed%lQc5HE-Hex{!%t|Z-r&hLHpzQpq5i+|LaLfC zM$M8mMdIl1-)6bC-JZAx?yl*XG&QsZuU%4A%%9+^LTnV)Q1a0;JD2+lCd;m0tZDTI zn-bnsw;oQxr${F|hV*Jmp#vLg(x;Jm*T3KDC8@ZLG@-P?jA5neyj)y7T)f=Y0vRkN z_Xd|-1wX!ds#(d+&0``Ff(QS*ZkU!S>4+qmo;te;b?2cfkT^O{CVs)DC+xECw7agY z4xslLGkxW}U^stb#GA~A!6-&Cg`>d=2%#zO_M^q=t8SzUYot=)WOY0SM{rX{*+(@n zfT%Bqa|QWXl3`m66sovHL=YKFj!@`_0Xg2IrH|s}O|`GgNs4=9w=LNKq7k{=Ka5K)?t?{BLM{^UL8zdzNN6Z8nsvpT~tm$hO()B;KRSwxr~v}dkkpuq)xp6JYPmzUwKpcbWQaFb9v;9a3IeL^ z;O5lUhI!2&+4k#6EZKC`yxb$Sv|U7+gr(NnX8Yj2UDyd%fMY<#tR4B~TNO4fu7`|3 z!8OynzCoY8y%`e~l5TP><3URN=k{iXQzMtBdsE)9#+U-e=OO!hv{U>v!(cnN!q%qm zOL_tZMEGdU=bLysckg>nq`ekz#oVv!>?d0%TTE{c(~RdYYo%|rn6p|AZk1HCb7E&1j$TfYh6M5Gli{uV*}q-S^v;GL!qxkC=BTf3N6fSnqc4{cKeH?{fw3wlD8(j$41ajV_W~ zj*fW|;`~D(0xwMl1!p)8gacL>f9~170|Ksp6~;au;0bYEDc3UzVkPV54gN(u8+clc z(-HGms_wZca9#Cr2R?x>yGWvLq+Nqy z>^dWX(e#N$eu7-0Gr4Ma5BMHp|3y1_j4XfJaJESB_3wk#>>5L1R~MIk!ACi}!>zi7 zw&Xb+f2pZ$ZA#e7Cq3jf2JcJQ?bM0Ue+zY?1(=1G);UC5eSxcS4;mX9FE7ouA1uXK z24L7SR9wsq!!3B?n79=Cw2ykT6Ocp`=CD2tIl*a*PrWy-iJqpvLCSp@5D49CZxH^9 zD^Yn|&8b&VHwp!3VlX@I?ENOXmd)gK_uyNkdcX|#^@GaGW%u&NpUc0-h7mmZ-K?!o4wql_uB>s3)qSK7@53m_P zL1jg7&1mLX#r(EW+u_Lj>GoEStDis30t0~xp%n7u<3a!yc`zyp@O8t3_~>YGaIn05 zclWVaJue6aU;_2`JIoqQeJ!A)&;D3lTl$XwNU~qri4>yg5iY^Ba0C=q;2Vd=3L4&U z6or43k}~spdd;(&Y2u8QD{WKEGBoe6YqPzAam+ItJxKWAt zr{;T)97>-4O%|z~bSx>ui{5>c^Yp~BKOW6ENIm#gwjq1?<&P(YCx^eaCG&Xu-JPuX zF9sBPlD70`slNmlI5?I;p~Ts8L)2cONo{}W)~$@!z`1ans;qMz)n`%n5H8D2S9!M+ zcNfVFcPxL6MrqdhMGF9M*hBYBx*qp<;x`aEh;+xh5MS3*pEOQFz{d5`oP#TpuGs`7 znnuZ33h!avz<7(d3R;7cSM@wAY_WQ6!Dzf>O%qq2fT|4y8Wu52-z@k2 zJv2Np*uldi(89^b=kC+w((IzW5SeoC%Jnq`CK>`np&uWHpH?9v+ zz8`KXaL0tz4R?Rbh}NBFn$s_{BFcni3?1*Fszf||J}iF@#F+Etb*cji{UsemzBKq4 z6wm38ZrRp0@00E3C-cRYeMe1UPaI6%CNlUzp6HGy(IjT1cAY@cO(3j5d<5Cc060~% zMQOQu(eT2T<*dOJZG|q5+oSe#UYtkd=klqpX40WXrs{{rm2_>x8h1k>Q^-4unKsK>r}{cYW!i+j>TTHY;s_YAEd58 z(M!PyLV-iEfSsM)yT#>@@v?cC!~F9kNVr5-f`G5&BlPmYUto>$8#Iw~Lx{l{&(L za})8B^pfW#$}$oZV?DJw9q-_}jS0{(SaF=%S^bpGU>-wOgv_k|{CP$D<)PV6++ISE zzV)>Y@UgV4cK4N$;d&KAHL0$`(ug(B6vI9Tn`6FJOR-+3Xt1&Z%wc=GyGtgo7&F`E zUH0oP|&)VKoa&uk7s)O zsm=riOV!5Bbo=$TMX^(hT6@sX7F{~g{&;RD=iLa6v0X0$sm1;ICqDJM4Yc77uf3cu zPa0f4y6gpA7jL}SvQ|09hMCL{Y?P}gg~}GX>vN}l=f7KlrsYLJb@DR=z3epJN4oKT?yEJJre*&i8+2!JS z{OD1}C$4$-RU{@E?JxVKcDb$QbJOys5+V2@5NxbNs6v4W`;;Y**Tu;;SIy6GJ*m!W zSZPzee06(fdb7TKcXMWPvvk$q(&o9Q)Ur6Z#-E}YtvUC{YXU1)Uuh8z2Lehb%U>Ev zh>MF0X;zb51>tum8qhE&4#Efs0x&fqC9P`J20ST);R&CSibUabAc?#|h0Y|7R2d5u z7&QvOCi3=hYG7b;P|s!Apegu9th02{g#sAz_w7D|AZ<`Zduv@T+p}+=;ve;NphR;! zh+F5xSNE++k6OR;+e&faeJA?UokI4P5@$cc-DawOV^Q@T#YEahRS(I|$dj;b=i~jb zv|;%yff3CSro^WLS`Q-fS+`rhlUJP*wDn~a5GEyNd`eTua%5C7aG6RoA9{4=4W-hW zcQl>HN;cOux3t#^iwgu?pIff3TDENn($e!-)3KXp7a4&NyQDb*kLFv%hmnUvTxt_w z+2_+F!(XdhU2Hw^bu=FL=>KIXj%g1PAm#_(R0r+4W>xAo88y58TDZMkTJIBktFExH z-yGp0119ap6sYT{8h@|6g=h5|9cngpX!4TLbNo@LD}ua9q&vQHr@I$=|K`naIzkQ3 zhiCrJx_^L(Kd^71fYWu1Xm=R&@PgwPQJ??F*A3<7+&@0eIo`s@H~CM8s6E(U=FTk6 zAFW~uGa{KGrS!<9nPm|KE z&o(90YPNEc;VcN#4KDz+{Z~xI6d3LOE1Q8Q3wJ z6M{->`xAR{=Hb)wW;c=-}Kz5CgJYr?wZuFGJ+ z8wsDiW389QSinsEsvo0FsV2fB@u6~fPOD^R{>J?q7aym~ zhqCY$sxXn@p=Cll$VGpGJ&a}5`KgqrY4#WdX)JyA7QV--Kv^F-8ot?hs4R+KC|mu2 zwQZY}dc!8q_xd1baZ$5Uvyyr+WoxDfy9z2#Ix;pz-iIY1h@JZDBFv#$1Ceco6a_^y zvkf`x>go|x?kh8z6|Wm>nw}TieG%V{vlbWHfXYNum6j99{|s*6jJihmVUIXerl;!n zK2`w%EXpFJ-DY5xX|D%eAxlhC(!4s907sEVuRof_2Ei*U7u7er%S*3XBXvj_vsub; ziM9?JS06E>s6S#7uk_k=}F0p~tGT^4Z8GE?`1)}q_ zGjbteuXF`HtvY=cH>5l+_ZCUfZyZ}t0QdF}Q6N=Kup+cS!rUOJ!i4ujobd>aWXt|V z^nSDE*z6yB5-YyEGVD>DWsX#^g}IA=KnSlEr+C$ea(|vQ*QW+;s~euLR9VfjR)-l; zY?^S=3W`EGEvv2zehecl4|ey1UHbL*%^6(7b=kO9a``M-Pz`A-2kc;l0)Ryp z&t;>`Quwj_sci0;nhVNeauHZ0<4@bSM(x*OQ_{pbhxt-ryED?k z+w8(FOa51fYq2@>1EMGeWGBrF$TI*LZKON&g$8YZw0XI$+T$m``CI128(b=paL$u! zh1TDq&s3tQ(MG`KgTU#$ymHB4KiCxd|ELA<4z9K*NA)H7elf7I2fzQVed)5(Kjazq zUFr5mG;>RfIB>@{i@7ET?MSHsq-QO0Zf}nfb?F9ERg2^1 z;gaJ^M(&+nLCUh9q4A0(;tEC7l3D00vA%R`0yGuVPpnkIJ?A}*N(z(&%Ipt`E_URC zj%)L7v0>%|n=g5cM{ICeIZZ{$fGveh^69AtEw&f^Ta*RZ10)$EFtaLUpcvKk9+Dyh zDw0vB<gZAC~a%R&1B zVy6ZcxdFcq5Aegy0L36Wnfsw=nT5RF+ZS&s4`l@?ZZgX#8OZLg;WJB%&JE(JyDV6D za5w~0tPTMDG(&pPF<7Q}zWTbB`;S|R{?{V+=DODX`?75beEc!n`m;_|6MKqy5vgnX zQ;B6B#kxx_7cusq^len@48BpnTOWHIA;dD%&8eT{mR5Ikjz>lY4U@?OU^GKRnDudMOFcfF=;* z6=5my2)mJ3zJ)=>i%uJKiLEv!Ck_-v_V((Z&_ z+6n~*Faki9fHxp@@Ef>{I%NSIgNH)k^uDQrMC9K3*mCux#pyRJ^I7o&+W~XP<8axJY{muTC=-;Yq(Bkt5g+8lWiJ3>iWnWfxS#!p@d48!(INBX3 z!zJ2J6kYiDyk>29ci4ijAD0nC zaY30%C_IiMMP@S`#ci3H;z4L3pWJhH&7#_k9I<}g_j9+7TUf!86JRAHS3_bM<`ru- zL=q~a6pbtCM{$Hhjk-8uG-;_P7t-3!FDmq^cXu0<*Dh-c2SW!1V<)gntqp5UdppMp zn`E}}Txr|Mi%UpX+BcTghxh`feJq}L-roU8z}M0EX4F9p3~x z9a96|&0P2Ne&BUtIQ9=xelsxiL%)5I&x<=YnM0{N0T)QJ`f_?6?&(u8eZv)dLf)qXUWV}k8DdiMgCKgr9<$#lzMEX192 zCa!ikOGq67NeC4f5K%=~8}(=m;i174XbLny79pF>zkEi${$ZUxhMK{Yt}I1jG~_hn zC_c}aMb0C&%Ec-0#BtgGXjs`tS2wU94_uz9$z{cOdvQst_UfXlbv)hQ9|G+Qa;z%Y>IP!b>YNDbZ_~H zP&XYy`SsWP(Tu2MWU-fr$LH^MK?m~h(S=h!R!jS}XMl7vV$nXjxxi5R>3Hoo0i~_P{gH5W1Ve=ffT6tn!JY`_vhW5 zf3qYu|2c-{=aIS`uMN+RhSwS21xR0io7Z!lb+KsqcAMW?8!%)4R2%p-{7GgJpB`9_ zLrsfa4Tum41OAG90sd7TRZiYlbyvn0Op7ia zv~%WA$IQ?Fe6f0!yBe;Mi3`Y2DfQm8s>=I8dk|~68c}uT4b?CuIBq)&6SpT1!#u`<9^RML{|3glFxf|KjVL?};^U+quMcMnJxYfvdgXMoFh(3edUg&!KGRTU9R zy02{Z5`T!i8Ck-4BJ;&ce!=F!Hr{O3|138k*(MEQ6<Kr7jPDaz-7|q8-t3Ui6Z;H84LTofhE-}s1GjUs7V~WbOdzZpLtQL$(oP?jj9qv3 zYgrWJGDkNE`xKPGqH^w(?Cwb%MDpMppU%r-b$t9#pu#nvj6hrQ9A5b|X@6(mq$SXP zY`;z{NaZ-NYO^J-oO4wA%&QoyMgF`2{pb#ueM3ohA9o-9(Fh?TIk zDZ;9IbiDd`<(>^IxiF6e-@W>>b!+nuqz(iF`~g!0A#Y^Fa_gGvgMAyR*#$94NX)p% z_op`t7yZ%)-{RMfM0ul@{jM^xasnzOcn~L%FC2xKd-EP|zXq*bTSlZB&Wl0NEQDFG zNB5G-IS(b3|BjIt{u)E15v^@CKGM_?HeS}F(&YF(&>Q$+(ft}8UG}Ia^k*-#r!2($ zxiVt&`0~i}=oR+|%2<9*G*UIl!^0vl&}x$e&o+5gM~8X8Ent%7l-ibkWh`j_(s4f#`N<>T zY1~Tw)9lR5LrGUx*DQWP&CXHN?Drq%oSGx)g)yQ8U|Fsvm1M!VE(@uU!=7({%A%2f z32vkqW9(^Dl!81gY>+z}#H>m*2`D`UDckGWyxYMJ9~&E6m#PKBS4|rtvYA99ohvI{ z8|{Ce4{Tn}(JI?-f5OM(SCLdKz>bS37NW@{{9S`wgMwV`@WJMN9Be&;wcs)zm+H8e zDhmwDVRx~jho+eXPykUVUMLuF{J!2z`f817adBy3Y0jl?UK406%wdgXs}&Hi9m!75 ze0l4= zWaTtO9=5h-IW;B}izz6bRPwVZFyVq>YO{o0E#M=$5;o;lo1mLFDf~iT{t0YrtgqL2 zMDq)fEB3lMeXzlhUPp%@wRoFWMga_9iCcv+Q-oJ#4DanX)L4LI1;5Zeo9;$py4Cea z3*Ps~Vf(gEq6Ths+b4)YER;+bg{dKjOdgT=g0E+b7JMNq=imSQv45^XI~=ir4_VPH zQ?H)R&c9cLB*nMPhafephk3c$Z~I;%`I68cWZJ4%*BjD4$1~r(TaNZp28&S#W*Z&I zS~R=>j&{eE@KI5`)VyB+*xM(a(rY+7B?oJ;^|9e1O)+5y2YhI$zt70G3>XY-u36Pt z@t^=V1pYt!C&Be8#BZ=+wVQx^3N0jhq0__pdJhu&8H^iNYo;QO{FF1gqq28zuHwU>MrSxCnBeiW;pLR+~`+tnp91Fv-oirTm?TloA2v*@`sm# zV!H?5-RB8U$qZ!EJ;>5hQ%l(TmRc`eighLV+tsVJ=^X!FK61VO#SkP$V!0fRl!HAZ z^y5jBw0nwMzU1Vzrq^9*VwI=oGx{NB-_e|zY(+m&faq22B1D6caDJGl{@0CU5z(3X zLF>=WY93#uef%j`hTJx*caJTIKp=e$l4qkfs!?z`h&fZ}-)E!VIR>r4JLiYd$%90l zH!d5+)Oma=b$&CUVZd(?DDI%&S-QP_B;D4752Y-@JOJ0usx%o5*a)O8T@n`lW5O_N zu*~npjFG?;6;K)rQ!qi21Qol!u4dyiZhvXb65d;CejTuR+|Mq*B64UfoyIEzS|cd- zyBNC{b+=KPB)tkHf@_V0Vg3156&S&IfFiTtpU%!MMr|Ii;H9vP+p#U57FnF_W6WW* zB4S{;xN{Z}QAWc?cT7fVEbb&|A>S=h7b%4PIcuBiz0f%8_W4!vfR{s{1lab*(v?ou%OJ&G7hOCp+;8tqJjY!_4x24GbSz!Q#1UnYQ3PV38wj z!sq3ER`;IO-{(eELaFRCGxnsJk_2WtOc<)9!L=w900d(MC!zrq807Ii>Ayi*?ER?^ zAjtc~#6*t6=e*Ku5PDE=WLp$>hj$`PsnHsMGWNdp!3 z{gRbRn}Ax|iv?KOv*bN_uD!5mcaETdC<6o+$6k{%gDBAIKzKM-lgR5%<0EB>JM5eX z>*Q?{=n+_uKDxobem>J!Wp4sIsg$kKS4G&W007G2*M}=B%Dh3xhigwJ1Zt)Iww5D8S(LD019~4a^Vb~>}JmFdt_lbmBVM%#x!IECfNYF)B4lB%7qd|hgYcu zc9;Vs7%YEbBtHN(&mG*nH;>XMZRIE~t8&~J$$2hE+*LHa{bSpj#J7EtgIYNb7k4nI z-@oWy3uk6m%UO`LJ0l=_aQyY!in7VOouHAVP%utw^z3uV?Fun3onVW}COOVTw}6&O zGBOX4oi#)xj*6;kYE4aIhQa#Ex5KUl-}yM*h8DGsHw8pdQRTmhY2>6DV;G!9l+h3nK(W-KfD#`l zV^7H8>DT%K+TTTDe(#KG`vnZm&LM_Z4DcSgv5rU}~Ak13CjeL1uD_qs`-ib1nnMovGovEFi1EW(Hx{D4xq zS6Oj11~k?vN6EyT%qO_p778GQ$N^9Y7I_Fblmf-jNFPn13k~O6zmf`75GFw(8Cj0s z+O$Y|IV}njU##@a=}ryB#=dO3Y-PX|j1*zXoU=R-83{6wFp5wG3lc^MB@n^-f)Y-M z45d`)_oOn`d98ySu_))JogJl#QH5up&!RB$MP|Oo5;( z$Nit1hx}{?qu%0E3Cfhp=_p_REPHmoaIi9nBK2?ZFH$9NBNRo10ATgOUyJ2n_Y_z< zG+=^Rk=VXP7u$g9SC#Q(+*ezZ+lwyo?pEndqjv|k4C3`j%_k!xsvAcc@*i3!94(ob z8*XwLK-h}%MES>1!MsUTG<)BmEK#fxw~BeXLbMKHjRS3lN`x7xxCg)l?tCVE(gD6l z7@7d-ykbWI0gS2O4;TUstY+ru+KU(R%99?D`*#esu2Yt;ymJVu>Q1F5a$FZ49i`Jy zh{mVryt1Nt2kk9T_*PF#`CEQIY|`PXv%SFl?(KbA`FjrM#pZ$l|YB%`;0| z->%j$ICMW)CcoxTeVtnJD%Gx-Q1LyS1rLndFlGs{aH4COvM&Zaw^OdS&8iSgB(dj7 z$Z>q|huP9jtd^{e84_?k_*|#W-`OOk&GbvJ`TIZZowKV~XHpkGC5PX?>H1a_bY>>n`Cp~w)3)YRoKOJZoyy?7mjWz6x6Axcml*o)7oSZ70kr1Y9M)_iw#Tu zjy~K1~ zM3|H@|4m7xzN@RxZCM<-+Hap0l@yhd0^a~gRW5JLW)O2zb|U-{(^I#Nk~8ovo0Vy@w`%ePD6aIogPpG7ndkYRve(v9IFttKr%$Kli_PR-V%Y(As2Ub$otYBp^QTMc-6kug^7GrS(Q7&$xVebhcZatEw`V zO)6PkMn#*`7k`wMiAhGzM()0Iy5H7T=TK8M*|=AM?Z_|N#J6J#sR<7u=bdu)S_nO! zTDjEFl*(FMR0A`BB=i_!JCh0-DbH!YA)zu?s zk@OAvfmgc?@1Dnl@E`@}z*f|yb@PcHN}|Ue-wI7vmEOh+eEhO6;3^>C>cwIwNA%l` z(Oe$`Nh*BJ@Y@~+61IrhCsbc_w;e0udNe`+^7bh#?hb-I!T&UW*)n)Y$brj2^tnTY zwyEd|K=O#Ex#zgrNZF42xPL8;AjaaQabfM#mZTLuvp* zQ75zL#-%};&PFL^aE*PG?D9r1U2geyO1S-|(sf@Vq@WHsKZ5nUSwDHXztH4sKA$vW z^pR&|1arS|O0inXQ2E-|vq>z2qr%81rWme50#-#C=+^1G6{QDH$qmVb%AqkpjRcuc zJ@EmpLn=rVI6aY+f(dun;Gqnyzx^b3ef*Dzk zeHxJGd;$@{1*B=pd(&;VlZ6wv-|b&ydA;`IA!auyR?OtAOy)Sb;UHyOzC4}p-P-x3 zQN8#`yF6vG_`+@B<%*eL2FZ&;coh4poqN^gsbO{Nf^-x#?k#+>?0XaMV?q`X@+-*- z5@S-$!}E0D4LdN$qlD!FC9Yigrmta%oBH|HvDMfk`5IGB5!2=y8wiQ+!>klkoiyw; za`EQv181x9&nm?RWxssA#{Vqb?7aErYw5gt)N;0WeZ9(|OZ@JMr+^Ngzu-Zh~8dy1&17_UuZ%UJ=3~%s*5_{AF_0 zFWgYi%bnn9DI@@+So@*>@WF$Jj~-{tOrqcG#!=)?!ogq=#ZjU%Mix>!j=Q?H0$|32 zL4VLA#574&qJnX7`NGAu^~J|ep4)DP1l6mq&Qd8jjsrxRjKg3YWJz}M()Mr^#+f1E zWocF_d#vIp93hxE&XPEt3`ey}wO(z+iHv=7u-S+hb-apl?!LjtX#WvzIAkbbZ}rhvN2cEkj#|o|HE&5V`F_@IF{`= zQJ5&r2!sHaE?rt&T_Gu5rx5sI`}Ab4Q8NY)j=HT**AIO_c>ZiJiQ}3lZ(qHb>8QTA z5T`nb5+G?bSkfw$JSij_U`9qDB0(hZ)d9=t*vCYqjRpk649p0?%*cq01Vl&%3;-h` zA`;}=--L)smMN2!OU142&2#5Ai$$;B>yO4mA;`AvYPqJgkpeAg0V4u9maNyxzyEu` zyR@`WDVKlpllMQr|77GRNoJaj%B`DMXKFPffg<-kAwc{)&w!X3lW9XF0lfkyl$L$r(j_+b@oDFzeXNX1G8Ie$OWH`n03Zpez#yO7+Em03_jZnkeT8CqWp#UV zYtZcklhMtaH&m89d~iQalk3+nNn1R6vh&*2H*Q?JI2g84on5|i?ZWwshX==D9BZT7 zoo=_=bv+MQoSd|ap0_Yx-`+m+a&LDWs@@>z_C}LQXcJuAUmw~8001BWNklJr32SBKSiA0vAQ4|=R6+CBq>&&@x+m%XbFzippBLJ?~>y4S3%2bwVL9#JZu_ZQY z<+Zi7FpTcqeUK^)Q$v=xee3$|*RH#cgCyZqqC!Mu&VE_2N&{zrqcBcWWl34^+-~RO zd*A!hcI#v?8WFn1V)e!IXAkavVv#lRqhh(}c#csz2z-Cy3lfz|>C(lmPUp1W?F$5* zWoZ)Mymn<_arXI(gN)EAxU0(x!*1KCXfz%WS(8aT?E8)oU;EnaPJh@NM&(M)D>;Qi zWjtc*3Ny7vs*KJh6@r$VbLY=* zescF?lVu3PfHaIn%ei&)W~Q_La40=FzcgDd7Oq{``imd@&*sxPKlWSJjY#JTD)=nLa+UD=kfi?C<-%*6dR)iXY;kvuYUb)#X+rB z?+$`dYJ{{1gy*=`N{I*rkukswAc)x@GUXa#6dG6?olo5WASD?#0Gu0>rAZs0W4tHPF%B5j{hzQNuMx|2R-FcbDu^{O&L_j;tR1_y9Y&J|% zc%DlLMALRP9{?4jF<>y~Fn|F_2*`mU1fKR#(@vKGP!KQ!8*SJC5(yG4kc=@TgtVk# z!@&7I8Uoo;f@Xg*At^3jJa_fN`4=x<-2Lp6I0+rcs#c1Qgg8y^J$Q0*(yErL9A}wP zOnl+|ndQYM<#H#2S5C~pzbsw_0EYSQqo*I;`K(f(6^_S9hQYENe>6He*c**T{vxCWgaH_ZVY}T) z6FuLYug}bU{Mo%s;Tx~tTAg1U^~d!_%_$ZhKiz%4b6{97gE2-*!I}Y>fq~iR%t1QX z-}C(df!L6gqEWRs)@S2*QmI$_lZi4!D20%oSMXd%2n1lm29W_kkYq*_0sx4_bT|Sw zY^LNOFfto9Q&1X_5XBdzNC+^1C=h@UrIgI9SphM#v22@2uwg_Yq?ER0j24883-cRi zww70xE7eM-(v`)tT(EaqT_CEEF;AI;V=ls0MKsry8YoO3XG6TOUr0m3O{&V|TZG-03SYGcz;ubB#{>*rZv%+fP*H`=LJ=UOKn6FhAewPr^v~ew-v( zrgW_~Q}Db>xq5JTY#1$RA&N%5dj8zz!$%J|%gRN2V`a8lvI*HJr2*j8q&%98PFlz9 zPW#r4*BmK7{NSUbR<~HJ07I(alg}O`2{WQH88g~MS1xS{!G?iZjYoriyS=ouSgTcf z!$GxPWs@z<*AOzV;3)$^k`M}ugb=b+EI5|HykDZ+*;^=P&5VS(T_ENd6%rvcYhad0 z%m65WM2`6g1OlEm_67l201^YUVOHW5-$qgZlIuEvAV^9fi-m#|HZvzlDkLs0&2DXN zTsXJ6yu8qC*6TAfqU2R7^;)$dZR_&6&D*bED^-fpwk_L15)8zGhy)V-e?}Gmf{d6> zdxJmv#JL>j&cRv29AwPFQDg941NBY|MC$EPH}L z&CSgY{SZ(B2_!0bp6l3xkO%?T03+l$eh!^83GzJGurbCUARGPy-9bb^${Cy7nNmRh zck+BiQV?R^=^G@JlHd#Jx0%k8B+2zWBubLlacsx+jM2=Dh?eb?ip5gd>kfxII|oUe z&dtrdaqIf(%Dm$`mL-K0NRos^B>b-}v;O9vFbaSA)Ax=JkJdNNUVr_~AN=UO&mTR7 zELJHNq}M;`{8g(Rsra}Pyz|wsoIkt0xwSoLwFdp6?br-RB(*kdRBf@gvATM&|2&Sz zk}Thk{mFoY)Cp9p^~P*{@2C@ICHF>a`mWAMbSfy(D3!zyN|FU>f_$U>Hg1T9%7Q%S+3X z$z;&)OTv1+S}GNhP_aofMN&w~$^Z#s#7rv$s#RxNt#%kr2E9Ik{VQL4=iKI5KS)~b z{$Lb>$?a^RR4fFOQ92I%{=wqXX3=p%AN(+6oy|0=m9pnKRvM3%7M7AYMnD3gv~e8a zI8scZrdRVCv(Xx+s1+NdmCEw3836!MkR;?h$S@BhCc~N;89VxqBKdOD9w_jP;eHPX1C(agTr30)!EpXUs{@V97hUC zBy)fXiHHOuA>!W_RY?;6tAF*szyJRGS(0gnfACxXW5Q?=F={~0G%~0xQ_T8scmLlV z{M(D$%cv9^Q}D`_>Wm+Z!ywj%4ZwIDe)ieDh54G}$Sg^Wp(Ig;saPod>Q~=fSZa=g z$$N%wxzsw_14Q5N1H1PXBH}Y(!X+ciBLa#(b+vX4%1Lt(s9W_ zHq#Lql@RG#wOp>&CP5;En=wf#J^aT-v zK!^;GW~qUxID|+VW7x1nfz#YZCU3zgUmp-t5di=p8D_{OS_lT1ND6@j$jqP(YlDWh zR?O@=jvxZfmK1KO>{;1(JW*+yg;6r_t&?`E8>fM=dA4nx zoVGVMwn1Q!g}?hNx3`+(G)W>qF3RxsjSFEE9d*+}(N)=G)Iaq{{mWM_x1R1YVx?AN zZEOo_^qPq$anBt;UIV=JW)NeW?G4icbE zMNg6N!dN|d^fU~|=g+O5+g!12ax5uHO!FF0&c7oN!{6Fh8KXb>^pnG*{WMjE@%Zqt zeSGlMw_bnk*7oLlqd#c31_Q+`K|8isU0D()8h20HtqzlyDibG>5On>C@84`jZ z*xcL@((LWNKm-6oh`^j?iBc*}wNl0yuq?~-yfjUTs95mAAjmRxI*D z$5x(9@_i>`K%zt<1|x;Yj|7N3GEe{!3aO1&O1o~svLqlF!%|YA;2oW`?tJ_y5P$WZ z*Ds&j@I1%1Z6PcYl7uCtltLoODaHLaMOAK1ZrGU2sC)PBjfbPq4<`O(H0m{*WzBxz z4`&+n2M-@)X~e87LH@XRdUV+94&yijW4xjVNNejGS1w=ZcUvoKE9H74Q_${=Pfz>( zLEw3%Z~WT3^9wV@N}<~yc6+1YXyUqsC`@-=><<0F598z0b`YmglxTyQ!f_B}Y|d_O zbXq4-7^NxuehjQP&Mb{4Q5fk`v4V(Ek`xQB;MAB*18Qbq1Hgz_tyL~vI(O%z59>44 z<+T;b4rhjqW(KX%7`80ia|%QhMzLZpcpjo2kH$By-YOQ{%NH+x``3Rh$<)I~hy9^{ z)E(}eMCHXZCxfwIUZ~2wmygj1L9*3uH>&k7-M-ly4p7QU*)6)@3blE5eLRT_T8yNT z3x$H`c|Zh23;;AGYUvef&Pe7LoK?S&TLEiCkR*%&4G1JL|H?o!8-68~0YGE}hI5J< znSe+b6d;5kHY`vWq|^X28lw@xwrwFLksv9jVJD<1^sKiR20QepFO#L{pRi4Z+`F3z9*%!1l6j=QpvU?KHooh z?`NO2j#|ZXok(cVaTNC3tvCpB=q<|<*YjSxabegyIXQY!EEZ>H8gr|Q$F1J;m%E0^ zcC5$GcC<<6nzbM{ibbJRwH)v9y-$x%J6@qAr3k|Si~+Rrhfga`QnP>3LRkO|{lGUS zW5{Ob7i`OoldRkAPW(`5Q>)a3Eoz10U>qi~o@$bijZTv^x_R^ZXf$dav>NqBwdAIm z?)Ll2q(FouQHU%_(<~#4oPvFPbi6RX+?<=ca(TN^D|8N@h8Z8WlS!O}T-q6hPL_e7 zqR3A6o-a4%YqjQ!moE#hJvUo9IX;+~sg8rd^GK3fURn&pNU;SZm{3UJxDFzNF@R(^ z7mnv$R9@}KEocAm@L>N)N^$w(`C7F^B#0~_q{t6cAm%DG zo-SGa4W2MlC4yz!D=TZ2a_QT@@%P%NohOfnQ2j)9240KLg=_N`xf| zusKs5v`z&ItKb@d(D!W%9^CyX3`R!laU5jBo^(o@98e0SrLyGCC!f81@uF5PpWQq& z)0`=kyxrY{y@Qqp@x~ipdh1KCfA4$W(X0;-kB6fWKr-kcOskb<#Vdn>Ql;WpaP{(~ zXU|{kAMS5#oLOF7fBg7y;QPb=$Sc@|B1cg`XbTj%a3@pQY_qYpy1e&t54WtlcR%U( zC)L{G=Jv&Q?{G96$62Ngu+j+NdG2U3BHLP8TWNPr7w6xyZSnZ&&cu(JvvX%>8hh=5 zRi63m?&mI{L%KT}pE2n85z za#^xKA_g{!kpYR&0D#skD9@XSlm|NtA%OYO!-tc}WMQ#+{@g~P=#r2^Soy@qKzT|t z+5j4X^xtbi@s-{a3|f}s3L%rXm z_a_6RQmxsxWVukxQk7;ZR$6OqODYwlBT!{2q41-u+aCqNU^`=JU(f~ah88>!FaO1vUv5{& zTy3NRnw?*2wL3|gTDFy>Nt~!mvmb{3#P@7ZT6WF~q(*hR?NX_vHQc>-|LXN?joJBb ze|*|$RqBY?X}|mRcUI<`oBzCa8R8S+91`3nGzM%IE25{Xx8bu&d0S>_gJMq^(3ra~ozS7;Uq%Arq@!w!m_ z@x8mxdi^j?vllN9UhW@jlOd20mh0NCEjG`ref-Jk-tJBkMUc-p0RANU@S~q^ZEt3V z+TF>?=_rcBwe{7FtqaAHV@Z7a_{n4(_J)2G#^urs8_pu>oav{er_`AI}mSFs(xak z%m|aB(n8pV5dcYuyb~8F(BuF#;}mPhJf}b|MMcU*VuZ-d+Nhi(dZjjI!wiO{6wHQ@ za=QyO0Bi^-*FNMK(Xf_4n6JySAt5w#suW2<2vQ2e=D~wU{lTbSDO|sNu2OVtDM$!J z$SG@}slp41rpH|VJJnt;mSR86{{46Vd}r_Q@#ANWM$L6C$0FOZTJ6ps{K3E8-#c#9 zW>;5NPuoYDlO#zirP4cJd2?m45&7fh{JbB9w&ysG&02YmJ-aYht<_GCTAt&4>)o#} zEY2XMBs2leHs_)^^@AYQIg`$W!gFl|edF3CHtEsP;g5gvUbix! zb93v(&Tg7=x7QzxhG~|pZ>%jXEhecRhpAG0<iuPy*AL z&Bkjtx8HdEO|MjX^7Lt`Se&UH}p=EokORJ;7NDw#b z71tIzO~5cg4h_6Igu;N#h?ti|W{_Wei9!Gg0|-R=i(~~R=b@2^b2wHI1LQH6OaIIi z`OL{2RID{HQ=apfUv*<7gaMG!vTdP_D!A@sH2KRP{wR*Kn>Q|g`S$fv!Ll7k2#G{O z+DIY~EF=^{5Q=;y@QbLLUX(L{VXD6K{U3bi&;PR18B~jf*%~y;lv?Ny;y?N~fB56~ zKe%xI!q(PSeYSb|+KoG(-gn)?H@@-qKl$C?`SP2uUA=bk>ecgu!O6n%LY(NpPe-G1 zzc)~cNwf5|8&|&a){P_@6-(v)gN}uAJZ@dRei2EWo^}kglq3n}=Neb9T&z{fckh1s zmp^&$;GmT%2_V@hTjET$m}RkL;e~UX-G0}r6vHG=k}OGdukSy3zHd-$Z=Gwk2fKSG z-9a!4;~>jONFqWM2*ga&W<=1{t6Oi}IA66w6&a@GD za-+mVVQP@VAnvvM{r+%gcmMgz!;P(rUa1*IT7s;VN&-Nuj3F;y0#OhW0vUtM`EU7s zXU^ek+p$Rs!^l7+kr;@Hk(j2j13(A@nE(ihEGd-Mc@`uF1E5$*TfPcmWJCZoni0vi zZA%C+20$Y~$u0c+qdWH>?#$H7-}==zSJxI@*O5XB%N9Zs2|J_> zT&wy)dgsplC`thVnTe=ctA6v{Z(h1|=?6djtDn4o2f>k+OGK_sjha_2iDJQ8nxE~o zS_F9c^5xT3D~S_r01=}!JvnKgo^;ynz5z;76=#`c*+|5B9HC&IChBUXv~^}(05s}# zU{3szjz&+Pya+;CURau)ZGQOCCr_Te&>-SWb-KM5FZYg5PX~ihuQvuDVAXD&W|<+f zk~l`AEK1kc=BtfLp;R4@Cs~?FVdVzrNu0(>8U*3)?p_?nwQ8+VuTREfL1KEiK`Wyb z02o9Kh=ha$08$7+lwW4fQ&GMfXbc;Z>pej;PZbM@mSwR4LP11EvsO8jg@j~`$tS&6 zSE2|22+_42%aTHnW80qR0s}Hsi`8DQ``%C9_b2|<*DikP^=su)!M1JNwx`{?c(q!S z-?%2q#qxPn{fjT|1u(#a=P&;6@BGEyaSt^MqtirXv9VR~*}adR9gY3eB3lkdaj_^e zj-KuI78jTP>F@p4g{@UV2GJ0awB<~r)@alg=4M=rEGgVVc`%MLA^O8{s!)E^8Bh2p~E zyz9zu{^~pZK^Vp|Q)aH&C>E?R_Ss}oN=w=R6vlCqB<)t~$&*L^XmosZ{Nm-V<+!e8 z&s3{Y$}~+CYeRX%4g>-jj4`h+eCGhtRCoiqo)`rZYR&;Kw4{~uGC69%2qdOhJ?DMa zR1Qq}fM8ozvFKH+6+vi8i-;@|8qU^CM4@wrlMxLt0DHF6n5k@@U7eeo&9v_JdtR~H9!?HB!-r3H zTBm)_Etbo*yPrS3|M0moz$`dlfYl~b$`8W*!=saSJ7-PVXwS2^&aQP%j-(_()a`Wq z@x-yMEK7@}Qm5U%aN)ddNu`uA8jKNO2-&tQqI|WD7zjy1{tz2uJJzrL+BZhS?(AIC zEfkyc%O8FEWI_ZIfFd)jnE_cKSR^Kcal6$SjzYIs z9tClwUQ4p5Hd8)(cCA*eR%>M>1Y@)^D1_zMxpxjB4tu>`uS*Ec*=D!X9Sui?Vxd;6 z3L%tAku?}YQ-d93fE=Sj04Z}J`>Uh!(|sv2%!CLA*Z?9~mh}o&06{1ajn;rDhy)-Q zL}15tseDv{fGQM#6@|WMbRjm|U$8l^&NC_ke1(F~X zFzu)$;uLoUpggJ=07g;r$A9{tes<>pq?y#3m<e%E zmwP8s0{rR}ekqaz=889!kM9`?${{F9jd!f+`{8O0<001BWNkly4SFHu~1> z*S$i~cHEg}V`*ujR44&rrj2GqB-?gf+bNgJ#e&Bsi^D()eD?JD^2)kFO0%?9t$3C& zI#pQ?;ldPg0tV(RQ^pu=fVB}*3G#G-%j8>v1_(hZjYJ?wgF#?mEdZq;WCBJ@T8`tm zp5qlfVO#kg9{@|sl2UpFuQi%{JWSQx%G%f7IkT}mW25UjLI@I4?)Q6fn)SOQgTir&g@U+rcJ+7u!5d5S zE}%`hZ3AL%uN(Sf+mBw0aS)hmK1t#fuOdW3p#RnrhJmDQjfcH%r;}uvMv-ZS z5`ZAnh{%&rcZOlY3YazM=1k>(`G;S-dVU@WfwO!W5&*Q)NfNT*ELBFUSBth9$<(Ul z)uqL?m03%umE}3xlBcZ>kz^KxQVI)zr69w~7y~STjU*IO3d=Ue%*{0~p4(blTzvTG zi4Z0XqBP+sNi5si-r5-T2jOIp_yKUTzPfyHxL>MOXBv&X@<&OU8a=fcF^WxY)RZ^x zl*H-jX>WJ;Xfg>^zN8`~B00A6#v4~(yLn9o<2P??Z*MQB84pH2BM8AZiEn@N>({Pq zN}+alpQR=S(928nLh{nm?A&Z)G8y;#{d#@o!NaE?zJJHDJVVw=r)vxXNW+w9?1vnK zEEL>Q!I^KC>lGOE_98z#zkS1UE8Tv8Xq77^1Z9i{FqX6oGeFMSF%lA@L~?DL#MFo= z*U=C$fDyJZppn?lIb>!;VAjm6k%eV3pi+h;Aqyr3U<(|tQWVYR|LHb|E6X?PrMI%l z^>Mo-jBVQj^I9qpC5hZ4fDnmL{Njx`@h|`7|C-lkOIqi)wif2+fO$L`#97LKOoEV8 zCd1kxVg|5idA|Nzzy9UhH#VgJ0F|3a-*(lCw*G#W*qr2rxzglQ>6%p0#< zB*IJtB#9*9>hk=XZ(i?rI?oP>f|+{l__Td^eC&C4wd4vZj8R5s%o-3-N=wMR2iHaelF^Jfm1zh< zX~|5d%!ZB5x8#e3qLfl8ox7MRm7yTdvx#gLLLh<89M7I>E`Drze^zatvFSz@zT1A$ zz{IvJnWG6pPB#?uup)s|nCgpzgTH_*5P&Vj(&EDTb6c}>&0KYE3=&CVVUevs0@?-7 z`JLZ*=T~o^vn`d27jtTSN<$$cVh{v^5I_Th)=CH=1R*gI0T@A8DHUAX84QA>L<8|y1U;J<$BjU@5INkYh3 znz3Oiz;nHNt<*Vf8J+1QX;ezcdN3HQt}Oe*9)d=rnRCxU;;H|aVIV~0yjud4h=SNF z*f(xmo|!3s`tfI3;+sszNhqY%9gNb{NFlCWxpMjZW)g=#_%A>F;Nv@Pp=4W9a=I{E zw*-wx!!R1P+b2PgHfI;TVre|_4~|ci$sG*{IM*qVL6I2?as^fWaL^xN-3o!rqxyEbEF`NB=FTG zdVFOx{ELhYBcMY#U$4FU)vsKpv}pin4EDPPIOrjW7G{OrlI_x|d~VMf4~)>@_LkHW#)EKp37H%CP~!)wMN02$xnif=q`>6spZqwf_6>{^lS5yFVl$!XW7N1_)Rv zIxEYoso~L}-;X0^zIguP{?YOF>YM?3wsQa=H4~sP02&xj0Fc&35<)QA3eIED|B9U;qvalE{#mq)?nx>UX>E_Lwt=92}KmRNY)%N-_o9t^}x}~xpho~RC!ioulhY$A7oH29F+H7M!NTX30Xq8DJ5z!be5CL=N3&YH5nrW?aFAUTG2ukaO z6$46PNefvkW+MoV(i$@i&>%EQRoAY4zjJbbl$?9we`R*&9E8HjTLM8O5e4K_eZE*d zO-?lJ_Wl+JM+6Xv)nf7Dx$Uj9Yb2>R9wljfs$wy558W(+1fsPc(B(wIhboy zRjNwWs_j}Q?ZI%8Y8E8mU~liTy0_4MUwyEE?f`cV>2M&XSc zuP-hvPyEm@mr5m(3+u8B*$_f*w`IUE03zirIHAyn0g#alqt4YTU~=(kp-_<0%JZDX zU^~u_KK$%Y{`J2d{O2FO?Z8`0rGf{p6;M-dbOt4@J; zRGm4yb?@_sYino1aI$gc?Bde=?#sPmp*R`&Qi?cEqBL1tUiK$rHpchImZWp%x4PZ- z^2$<@#Of6rivU@gurbI}%%wl*?eFjP+pR3_&d*eZur+`-=ICS?XTTr55-H0vHky%>K#~n03IO8ikjR1nnFXRHZ6e8n;QwLoO`q&ct~0-LPG-LE-EZBkmRtLZLZPrW zfJSd@u|-m9Qq(fi3~kG%9APO!VaM2xa5x;{zs27iF^=&_wks>*4vRC$o9Vpbk zSKWQT?~-}^A#b74O^!rL94(B#fe!#aAb`TD%#-Il&+jo1i@1Im{Ja0}FE-Yngw{s;(`vjQf(TPJ(7ytlRDG&i+BA z-q_kbKvEYkK4&ylN>wFgG7$$fzV2&d1dxQmV%Y$Mn$Z>$4pPvN7(g2~L_(26AQ+`W zlZ?kUb`SpJx4%OqzVh;wn>UstQR%v_QjU;zMI(`DFh8@Gk5z72R|W7>B>GR~T_%K> za;7IHCW@m$5PW$1;pXO^AV>}+rQ-q$#?aau4QMb-OpKq9(s01`W8V+{=#T#7Ti^bE zt{o1eX?d?R|Sicv9CJcP&_BI3ZP31(Xt2g30z}QgKnTPGtvNA*VL+ik5Fi@-q_aR$ zq2^M#T5q&U)!N?vQ7WA(6bf!6((Uy$LnIoNLh2w82tuGXngIn3b_v$CXd5DX^filImOEd*jLG_Qd$;>tB9xY&7RMK{@?tY zKYI9hJ7k)inJrfu2GG|74)gr{#Pu6XGc%LTM#Jm&iA1m8J2^V^`h7v7)o$+}9EL#< z>d=G%GAl`1>t4Ut?e|Vf<*DhJgM%X}BYn>#lbKgveewRi2NUB{Cnv`wjMmudcAZE> zD%oqdd!2T(R=%)2Z-PF8jzpq<&?f-_Gm#L8O5oV&u#!%r(a^>eC&&AKKMX?-LuLay zL^cQvhz8is%-I0L;497y{eJ)Sw0v4FX~PBtpS?P5r=ZPX8O&_A&y0eY$S^Pw3Iarw z0tgww+M)(^CsfE#uGLGG+RpBtHbyy-rKR&E)WPwIE96irr6g(-hG8HE^GTF~5CI7o z3?nEh9pxzLx=xgkf-oE!N^kA%fA@_a_2$|31&z)Zyn=Ec@9RKhKAGF$yL?RJ!1e=ft03&Vd(4LKF z%@&ZL?cJk~Z$FMDhw>xC$EA7*XaEo)mrt**&X0{m9apU^EoX+(jdr_IYcy(gFszi@ z>v={aGcyFphE1q-z+jk-9|ocCmrjp+o!-@J*B@^@aifWL%b%T@zJBw<&dyG8bh2Eo zfxu3;*Xw$@Y$g_q27!NcxEluj7hkw}d~`T9S=7Kr559#$-#m zaVDa$-|d7!Xdh4pSZiZB7*EZiW`H{A|sKp@F74y2%D|;!QoM@-h8sL zzi;!n27c24u@77f8JE*4s~>tWS&I<*j%nrqT&vV^aGM>m}GF{J)r!!vP z2gZKi3k^%h6;cwS)|xrA)FwuzftNH4eSNUEPm&7x{K3IiK0o|uZR^&pmq&{utyVLg zP9Gi~E9vxl{a&v(RxI|qoiGeG*Ea}wVRp9HZ52m{yX{6gkWv03`7#2KT3>cYL;mx7WR+XmoUBVRoKSegE#mdrx+Uq?=2| zgakwaE9bDC1Tz5me*euk-!50%p@DL>Do8LuG9J5m_?9LMV6t@E{V4@9k~B z{wrTTJUSFYIV#d@wWOear|tWGW+>x(p$YWC{%$;~rY4JCw>^|h^m^UJ#RUQ=m+SRL z7trZ+gLQ3C&zDGzvep9^ZW5=WMO_jlP#3Wl|b7N2e1klAtVwS1C>g((WnE;$%)zF zkz%vaUVpOYIw~Gm0OCh!9Wlu{DOL?SMwARtFNnW1zdHT0j}`2O13T2#tk`Qody zQ=<`AxsIchHPR>{gk5zI2_lJuY$QP-2ChZ4!B}LEp1%WY?^8z?Atqwcnc3+ptCzaH z;ElK6d%UrkjK^b92A;WH3}rd#3<~*LJC6AU;+uzR5F%I zQLE9{+HW+QhsP(=b8`$-t+zUTui5PU&NqJN=yZQ#G~aEtL&Krgo@acoH=HlDo6TOY zx3jr5Jw7~9%yzr&PN#Evay&OT=Xt)6${_apUaQrG!Ma}9Rjw5_2tw9|w6T63dt$NC zD1ZrpP%|R|3N$#_=8~Q4GXo(b+oWA$hzfaOabaO*=7aa&KRi6pI&_r7#)MkW&dt;s zH80da;l9 zAdr9G%q@FCN`z!2vN$(8IXzwO^ndW-gYDxANzA093I#HTq1o8n`1rkd=0>t^JYH^v z*RDTDpj(Z`WN~b2vKWoI%~oB9K|D6Jw|}~SP)nr>ljEbge8P=6p$<~XbfeY|ePd@3 zM8bZ61%V?;UcYwfxBtbL(`oVe(I$cfFrk4;t#NXCIzBPdY_-yvk>k@w5b9t4;wu~L z>q|@1+uQq6I$E1nt1YC+=X1S|$6@&B(Zh-HNyl~L@kFcD_WeL88EW6KK?DLq05PDi zBLMPQbRFS9k;%Z?gpACH#!AYO?EC?M2Nx(0L_hv^qRN%q*mIgkv4tK zBGpO_0iw|;3K5CMM@J@HCw6?Wf3&y#?)&c@9-qWw?iauC{KDM0>q;l$C`SpQ2KOBb z+fWUD{z*N-S7K}wwkR>E*^1Z^`!R4 zfBeS}9&KgvlegD)hsS0oilgtm`9{0dMmF198wfBxGv~U_{^7yS_UY`@=$Br*7Ln+> zN$Er&gq^*E-TgxjO~7Pz1tbVb5}-g%CzF5h`@eVn#)S_*_;6?IIGf9zJGW4()ck-9 zbGcluRGTB?V{4m_hccO?gVWKGiE}G+PuBN}6XPc*rFhKMf$@Vt3MUqeu`#{Ax4XAL zJ~7#CccoHeW25bMBNlOW5Fnti5M)L`0?XPUAS4R_I;$27eUS!15D73+*hN1efB-Va zAR?2c45P5mN9J5QUC3tk_V>b29~>TSY;LWuZ*CE}%m7wpPmdeRwdS-Us_x&f2ANSgglf%7-kJo$s z-t^?yOSi5KXOpfgmFr5I7bp~h5Mm%s$AR|$shSF(ZN8uW&d;H$(C*UC{zO;GvEkg6 zl?y|;{G0DTe)og*-QB&n-uTw-4DjM+?W;RG zTVCH>Sh@U-|LV6=so0%+4+0I2bUeS;^LhuzrvPenxVX2sm&xZoymSB7ORtWN75m*F zpNp1G8$yY0-|O}I%86)zaMbTPHM=AR!!=CdNmW&n+%4E=jL8)M@W3$ruFN5_XJ zr-2t{vRT%gNe$)m`EvR6_^9;c$?n4Z^hhS3N#(t;Gd?*Q=-_*AzT0SfVF)D2+GL54 z*)V|CfFN7#?vu^+4?p^-R%`$IZ+vxfqPX^CZF6gDc4q4OwablWz0vL%#-JbU@9seu@HRw|WMt}K;HZY1LQy6cC%AQaLW%H)iJgTupCr{g$oCX=aE zDwgwP3@}?8)qps~X7Dnxu_ZtRBqGu1rOT`NLgx77*vq1KvBquDw>J~=rpflwDNUYwho5B+|*bh5s_{`kogPwVOF(J#Doy^v2wBd&Cm zRF06!o}pylfS-t71b%AkM?Y3rKc_Tr28r-&kg3Hu$XGl+F*P=~FdL1fPioClqbVb? z(3nQ6KRPv0uU2dIstJQw#9cXm&hz_^9_=}H#){f-np}OfAi32Aqj;e zEU3^L(X`e`#Avh$PRrGDsn+XhAiYc>1rPV4CK_)D+7RxY1RPEL59-)wb}WN09sNFvhF(NVM6Qpza|4~Jn` zEmtfSiU+D(Fl^4QJ?pfrJ=t8(<#NwmeQtVc_O18c+1lR`5?{P^ zb#-MS9#w86B9%kJArfGZt3f*9VE1>{Lcy8$VKC=Dy8(ZG8S(fNrVoP*5+x{`N-ZwT zFDx#T6W=+h>>XDUiTH2-=5M4^iDt9gXm>h(Zvo~n8PM$I``sIsDiKrPX3|+r=F*JU?)$zlSEyo72)$YFY{_P*W z{r=ke?yVPJx_a%>#`@Z$$B)X@O6Y^p1OQSwMw>>xQLQx-$#}C_cS!U)-Q$zf-~655 z+1}oK?)sJEgZ-}O4Hfd4baH!ZH}G{PlgbZglL#Mt<7 ztJTnf&&(h|A|MzBogW>2vbEFk0%P-I2otVaU7Gp*Z+_!Uboxpdp-kc07TSbaBy6{eeZ6&8^#jxKmGGRYqk6NT>4kP@@hU4k2tRDMo9<~ z3Q-bDJHD`PcOv;zM*QqS^|YAIqStiMp_Ier|L)*KW3I zwW`sENE!n{$enJ`?P{Y*2+`|z-+ueu;o-4%*Q=IWgi;84;e{8{>2$Z-VZ)tvM|-_& zDt>fy0741Z^+U6I@$%;0er)ads{jBX07*naR6j7xSg%$)?Y84M!z0;BtyZlyOvn~r zW@8}D8CVJt4BKe60o9ri3d8wSB6hgHmmV7W^S}73y~Cq+-}A!2ARA*6(a2CHeOxMq znk|pTDt6ngR&gwMZf@2U%9iO+GQG4gUn~|Mtvxxd*1|I-u_Ai@>g9j^hktN&^?W>{ z#2}aiq@dZ^>1$UnO;1hw{Z6x43qwCNpaDXlZr^+KWb3W>-mSMffZ~PcR&HLq5R1r& z8?pQ#3+Eu~cd%Q(!9n%xnM9u%Ha&H2$^W9ogijGOzzCdlGlheDAwk zPu3ds?oh5!7@3L2GL_@QqoY%_W^ST(w>LUg$ma4Vl|3m)NCwkC+}nBb_`&*<$EQa} zLAR|`M1hamlkA`|%tmXU5g0{a{2%`C&5v)t-|ci_kyyLeBN_mFqY?MYm6xlP^B>*5 zv$wk&bwxa;4tL8pZ@t*>_Ci+Qee;8cc0G!a0Yn*%#xj|7#8J&=%QxDt!$YG<5TAix znN4Wy3_*afix;-5R$+sse~k>gF+@h zlFK>dPRvX*A+T=MTKDcfDAnu6Fd{ip&P-3~e!q}S=d(kC7zeaZwn3E|!gM0~>dV(x z&duJr|L`xq^_@G9w!5D3!B|*Kwd0X-Mhm%%D@(2>)Qa|9af`(VI}JS(YBzxzHZ zDg5*f<{#p$dfLS^03yVr?(F2`wM&=c$)Rq)e{gbobXs=Y$ob`St|D#1cDs#8(orwG z_`=cQ$@cDHdMNYy>t7xl$rncpj%)7UyVIyPISiJTW&^M1IHFQ2d3}$K(K=L8DkVbC z3w7vuL8!6U^Mk+`!%`|j+~41=R?2g8Gq+y2*{oNG($Ul7{nOH^6H7c=d(!E&4h|36 z?RMY?VnHhx;BAZVAt6%@>()8p<@4b8H;}0W|NIaD$A|WiD3~^usq*&A$DHN_> zzh0}iws&?lv+FoYNv(r;B=Y=~#cQjRnN-|$B2qcRaqV;pNuUr&VgM5W`Ba?#V>5-% z{2c#*Zop^vi3lta;?d~h;^OLsW!H6@?RK->93IY3O%}7cED0HEGci4lLOyu39xw>U zEsjs#y7hdkRg1<|x7+Twy9;x(<#Oet+jlQsTrHhe+U+iABZNR8)&_J4WNmnUqqp-s~90R-=i`>7k)yDpjks zPLFGZ!r0dzS_L{7!$`u~^=wB1KpF=fZV&{yd;t)8{a(H>d|Im5I4fYCh&kt%m$tWe zbjatH7U!lXM+-v_AKZQSy&oN)lpGZSl8tV!)@=GZ3^>%l)~iJ*1>)?~DYaRGphvG(O42;Y4Boj?DpZy%giPs%m619Cwcf{{$-mu@Xh zj}65l5yx?ba!5)+f`k-O(iu$QZ0w28s+*p<1o1Nm*gsfRow-kK2qz!|3dEsgd~tDM zacL2SFh&m-a=m{4$IDpHa5A{DhQAefus_SQi1PRYqf5#-EOsX zpoMfh-F_k!FOCi8vzeo#qaX;4)}3~zTrM@5?P|3J289rY?F!Ov{H%nHj9~__V;%-F zfD9x^fPqe@d*Q-`X0u@oH(Tw%4**#yx_Ev;DO!KBIW{^rJ~mn_AAj?|`Nr(b)SY|x z%H{fL>7?81PS4MGd;MPDXA<_yCoL;mo6z&BrPGKL87~%##nIJ^=i8n3#^%P|J9h%# z9~~W$LLdok!e+buAO8F=zyHH`_DeO7kx8*(>$g8QKl{S9nW2OeaiU7Oq@=~X2qC3Z zD5SL#J{_Gudr;vgebr|htbfR=diEOrBm>S>Y9yb#a_K@m9@{xOy8U2d|F}9ay-=-p z)_0F&B43=GyLtWkNFi6MHy>>5vC*~aNyKsM&G!DuX+L!O+87A3>BO&p^-EW;Ec82- z>sQX7KQ|k7MZH|{{4lgs0&BEYWPNZ#ibyOrIWsL?$91BiK0P_x9}vp*C~#v!^E~voljK-MU#E8Oi2yAKkuV7)Xj()J><7<#Nd| zvPH%W(zBrN`N!qzid zg+b73buX-(zj^(+{k^Te*N&&6qvK;zifXmtdErw*t<^f(xDRIALJ3G7k`yYP%(Ve^Z`hHj# z9+{t=9Uq@)wOYAM_T=<5)FIg@5!M4~Eij^FgRKspMc$GjRD0 z%noPvtj~xzx2w>=N9IF_|Aua@trp}4{JuaJ!2jnR;46Y z)K;d(mS#pizH{fOL%Y@bXahx}Fq)GyQ)B&FX=Z$Ue}AJ?sZ+H!IdwQRl$x9vJuTPU z{SeU*6EbVfMi4T0J6@$+y12S(Lb!i-ePJQ$$oMzE`3H^WNzdmL1BqTP#C<&w>p~wqDV{Gmg0Ln0cgX8LVzW?Uj zRB?WK>bYyreR%hNv**3}qYo?9`ou>csfgR{_q5SGh#A3%BQBkrO~;jT?Amx>@f+y! zNIY|$oZ)CbDXGt@S3dLk$2_Zk%+-SkC=fHL#LDv0^Ea*|VzcWtyS^ugnLW=`JAvjf zR~R|BvLqaLW2YRToSvHe{r~n~%}~R9zN72 zj6~GUo7aZY@ou-J4Wl;oa`|v?x7X?nrIJ#Zk3ahGw0xQy&YwGf?g#I@^Kfm;7^Rd# zBqYfIRwiw;WsDiDOboJNASF?d0V9O8vUDEg+mb=@yx`=t+-SBD1c1=SFc_PpB~WCB zvJ+z?`D|uucmMqlKW;V~#o??FV(;Ln+wT|0C-(REwbAKBa$#<6<-*Fj<#P**3)!JG zN$z&~CbaY*3N-E=)HXKuH+S|Ak54aLyj;lVzVemV63N)w+FGen>-4o@1t^hdWiI>0 z>kIjm>$)+eT%{ZoLXZFwLMkF<|Ef>zqt6!EXHKSnx>faz))WXpBBm0ttE)>ZbE6Rj zrFyIFGc$yNw_9tqyZs1{q5}!KYkR1K{Ud{h5Y#VT)vR4*6MffJlNSe zluq>U_=MTSOmG#ZT^9PDR?hAv;ahyZJA>-Qc$+}_@ax~ffT8sM810ELM}Db3;E&ZUdSdDRmSi8T9-?elaorP>+S3x1==D}@F|cMZ z28B>4q+vioKt$33YiSaK2+d%{j9^*NLXge(Bw;}&)>+DMhFb*e_q?(ENIIE3DVJ3= zGCeyJQO?2sLA%{Of8oOZ-hQjuSYBT4wA&9JKI(QnUmIh>v5`Wr(=lN%Hdd%qY5|ir zhS?}F2%q#r-R*WE^iuK2{M_u((dqq1>%L|~YI-dD-^4Zk&i}OP% z_sM?c(auRGn^Qu*_UbFBBDrCW>F zmPZq@q;ixal#oIw7fA@Igm4HYz!^y0-W(v#Vj};USJg9u2owl0M=i`wUt3)+4n^91 zuhQ&WD`u_J-#98Co}5T9y>8Eqrw_}mR-a0Z&hTh)f4`!Q_~kFZ`ak{Q@1L8WAIrt+ z_0oU%%kSQMw3EstlW{i@k1kD(ERPR44tM*#RwoEKG|UDiBCz(sXtM7(3 zk`UH;Y-5N3EpYVg`x^%w{XvL~1@Hr$9RLuE#q#<5@NglOh)qpS6vs#Ufu|XgskD94 zK3ZElI6Bsbv-w;!;%@EiTK%boJp^8V`TR<$R6&HHWU^AJurUTn32FZpW)PtydVQ~6 zua-(BHb@9#h4im|=~^Kjag>xwDJ7(|s81oJ5~Oh8)5B+)D*Wk7>Yv0L@Nab^(%=N< z2BYMK|~6*L8-Jh%%qiNI_CM16u}zMe&~95Kn7} z{w`ty_$U9tXPPYnh&#^e?9BY{jlcf#bN~L^@4WHh{c5up7(WatB>vvpKRQ1-JT;oT zaei)d>*&tirtwX;<<;BGZgaoat;QYv?XTQ={pATILm#NyZdPhF*OBp5HW77V(O9L^ zLSoiE4*DUZs}vwH3UY+;LqKK|63T(qkx1LI2(z$95`kghFd(a!I>X?A9Xb#xlB?&J zXQn3Kd-vVbY9-WxBPr^rOBYv1hsX90O6^WRFpLNW2FT&A=aUdhVLu2oGZ=P&k>u{~ z=IdX2t=Fm|L7>@Z(!j>|6bfc-pAKvSHXLXKA(=3rAG&mIBCb#fX>)iKm)ii1EDcsY-?+4&MH=sz#2pmMn{Gh=VtGG{PD@@ zsb(_>tPf1-^fVTYh_(%wJnHrrhgl*^_U#v?J^ z@%tU5aC!M$G!|hHe!mG`Wnpq;ZP$+$#;2x>2esDL{s}W7YqF{mBqj=(wKZQ8SqQOp zm7XmGpJp@@k{GO>t-*`I09hipy`2{3X0+cgQZ+AcVc&*mxFl#V_(ixc2k#K++VZrvHMH-O@#bbw000IXH9IFdPW*BtncJ1RR znxCCIEtg`^NIDrSmrj9@5EwKAGxONkSQv(lMw=Otgt38{K+Q%=GrjQq^bN~HuT00{&C%uim${9^P~{5St50T{bRL@_f``0sw>^~)D8eEW^J-+uSrZmAj& zun0y+M-NYGci!L0r~o*~#p%jic44XzkH#yN#^!-PF&=s0`c;)omiLbwNkRvH-vU}!WmY;J76aO?TUYfrq; z7-MK)!sbr56NyIx4nZjUry67Ils*!1;)&?o+}ug2VhjqxQ0sdS){aj~fnf#`NH%>G ziR=W!=08NDF8ewv>B`E~P|6iTNF{|-QmBEeodgbWvGAX1r0^H1s{Zy54d62%ffE95 zEKV*Kv%hrh!k_-t_rLey!xj@VOQOSi*omZPrx&*N?lmj7JFSUJ7cRvU$%*3RXt9vW zjbJo3cYgK8tuOxDfBPrj{ob3MzG0MLGqvrN2Xw|E5!SnGBj_2~085*L1)z;a9t5yi zgB}k;kO`QXxz*|<;_>qFF#_aFUar<*8r#=)u4LtMBh_?iG_WufO(Esa)OO+sGFu zB9Z*t>ra}U`(L`Xnu%uxakJ(_m|VU%BV@(zcXZe{2#hE|EicZ^&Q3pk_^?!}^aIUI zOp;Nu5Q2?`CW1Bw84U_42jm1W%!73y+8I0m5HXudt-3Tn=kBYMlcSaM3uDE?Xt6jv zQt&-*YjZ1;$*iq!8*KyM!LUIl5~M?Ya$5bX@4QLGT5ALfZOs81Krk#Mu`xtsk1=Dc zK?DpzFVMsB=*_Fk*+f(-MM5DG2}Pvv%n1I>rVr2dGw^q)r++R}(4Rs2fCK9s5P+j1 za}$#{E-q$*RXdwnrHu~6zjCK*k*ym``EZ<@y&hY?rYy?5{X zZ@js*bkWnM-}jR7*uVZC|KRt2_Zyd1&yS7{Bb!dU6@(g4FrXQnl8guvQ4#^NO++?q zp2DiEFKggN1@=5IKa?IH8?9BVGt-l?X!NL5`tbJchYuc%jE?sD-q!Z6A6l6W8Zh)! zGl8U;wK2qaHmSE(Q+xlS5M-fJLMmI=Acznp$=QkAt2dWMGb!b|%5ju(rE~@lg7aesSbYiFyg zO(K(BK6efcfAGNvm3m#HWJ8jK;c&o+Vw<0V1gMx@Aq{{A>*^8A1_`B<1gH(8kY>PO zAORe4V_$js{MTMwDkd{3u7o2aPC^JpQV5}hg`Rz?Pp40NM?bHsPtNTDQ_uitFrE(A zwhsQ^KmGPc_tsCUZP!&-R?j_paJyG8zw-Re`?v3%o|XVYJ5VqL>2&hK%DMmHzyIdt z3+J@)0ZE_?f=~+C?se8Sciw*g_IJPkqeiRM?lihyU}v?14IqF)FxuG1ApjUa9cn2B zG86Fh#ORk_`{M5Qj&jscHlqKcHNh%6%A>LnxtF(Z*d zo20@_AOs|8B9%(Tok(1Xh*FM}3Q0+&gmMVgGxPMP zGX?rP-+&T+0YA?Ux9m5ahzfOSVP^UdfA{128-Mz(w?4YJc64%d<>GvV7b}Oga=F5& z1xRLL19SlC+`02}a|-~(ASFsRp&&vM5!bo0x^m^>rB`0K^>}Ult#{tO|L94*-Sw>~ z4iPM;McSZb+oWqDY_^d`#AdU#xwV~$CBOg154xUjh?uQ&gY1Gz3Q2&*TI_*=8JWQV zBNGua0+Kzbl$2U)8$rVcG!8uU3_wB>fMB|`lo>C?94AVo1WF+-z0F!jrG5S3PjJip zeJ+b%z_aQnpI!{C0RpDOlk(f|fBYZ6_3cKz%7Lkss=n7X3<4E17(k_H_59rb@xT2q z=jNxi_H6)cs68Ph0~#GD;RInoLKp*wCnxLMdw>4z?|yvee!bld4Qrb_KtgLXXx`aa zBNs6XBxJ3mOeTk_^=1fY5ZP#fj6k7HX16XdM$N_wOKFg+3<`xnWCkCMF-8fAh>=*d z*Y6LQqlAnYvaz7Wp?LCt{^s)w#at|wibiGBi6|98=?I}nx>C7>@~oqJ_K2dtPhtJS zbnAcX@x=@RKnUcagmZ3T;^mt+1*nsw<94^*4>$y=1qFslDU$N$jqAVk>WdLqAP15t z)FBB$fZ7C7ICgX;hz#p=Dm^th@xt>re)*Ta5Ob*C>-m1jMgto_Vj!app%@_bk+ilu zLFo4SmPly%RfNKF=Z)5YAV9ETi!`#{VLM-71f!V=17?Il(`DG$ly6(a7J0;mBLZ)( z&b)GUJ{659S2)U1gR!SL)4jN7l|=Zns69Wgs==_E00;~X=$I-QORSz>xUjO2NW`m+ zb}uxHf{27t8u6r3KB`n%&_r=eATt{xrHw{FLOP?tq5&2}%vuS|rPG%$uH1O;+U)dX z81%hBO|=k$fQbkY!n1@@tA$`f#({Glo&s(G zNRoA{+kvM2CriSyT=GjVE>0J-jw2oAC?_U`LpHxgC?TCe5cM<4bo{J1{qw5&8>SA= zEUF2}l0{I+TrRh;xG+CI<9WK#>>I6_gb|{n_1ezC-3O0*omL^2Nhed*^e0Hzb+ABU zHUbfmjR~a?R?d_k8d{j0x_s%vh4U+c4r|pKgc=PHk=B~=DV7zj_uK|6*xW1{a6bTn z*$%8MgdGNqH3JNS7#JBO(x5jYG)A9Y@-{v}Fp@-AS(>`FI-f{Il_Xchg(4w92nR_D zp-4LPDZUv#)3bkGRX=-=Wkm*7?jLj1cyajpbF0&nqs?}`?|Z%pfrLhEbo&n;Z@v58 zM~1^}HWiD-h=dLUAsr21|w6pyG=&-g}!0HCd<8W0Hb z$;4M)Se~66in&h2i3lYe=?LKhNt8-Thftp7Z_|&J)aO<8_Z~tZVAOHvrY0_~oKK_^ zUEeD=n{0?Q1{_rSo%ioOeDYu;BIHmy9*sp2F$h9OC`R%%E1@(S%eV-`fULckjia2Q zbo$EWi!a=Ku8>Q|qfWQo^86kfCfi!u3b2+{L?OVKkfh~ngVnn$N7?xZih*jt=4dlQ zXfzIvH+!@pFbkBx3@la_i!WbW%A}%E*OgK^${`_yR4Am7N=S7^&3n4DryuvWe_mC8 zpZjqzn@=SZi*s}5mlh;py^lTHGZ7+@F;gQZj&Mgwes zH5+D-LI?mdz(zA!SK@%5FJ0w0jxkKYzz}nsFTS{PZYGzAI0F}rR3rx0WFak#>XVtm zGp#y&Ub~y=V*mgR$4Nv%R8>E>!m^Yz0(J!zhSHZWEMHuj2kkeSJwG&tAp~j$yjQBf z^X_|FJG;4DE}f1G1SL?L0GI_y4NNEyL2E6gFl@pg6v7GFI8r2I(cwb&l^36X@#eMc zP%`j5-|Ko_&oG`b+X)zqVHg;4h|uQV@F1{^8H^!D24j#Jkw_pIB+xc`9tcr8Bp0W1 zzx>jLY|3?AXW&adt12Ot5b7B*F+4L*|2bTLpI6nhg*6Cv7_h#j7%AkhUA{OzoPp49 zG~4~a*8rNS<9VBV`ybuA*Y5O^$y9o1NNep##mw3mNm858>Ptc$I?^@3Iy6d1V>A&) zq)NtPS1zvJeD2!R#Aqz))ap&o4+xQUXu^;Xg%Hea=aXbXXJidDWK-*rh>0y&_H6x$ zhK&ie07yjSD>oNbmx__7>o|_%I6^8wK|)xQmJssHMEWdynEw9t^m$eN#G(A)iz@&H zpsUo>#Mp&%vm^QJ&S|yL?VFMEwpJJ(eURD2PUx1gkd11ibf)nW5X|9zxwj?*TxGOG`ibu`#~@Wm9x22%m7R*1PC++ z*l1v(5DCB_Au%$bvG|6eSmcGP3#;cx<5A_fj+9bLDTI_#kdP>dghCLOa`w#KM?aUl z@AInq8D?DqMLLzfa&BpLcGeI4TD#r#eT|wBjiH_6+B+ZJKRGR@V@@g=cOnTLYUEG} z2#mHf${-A-kbt1I7D5;{fFMZtp|7NrM2UFp(&~k4*RD)YPQ)TkuhsIpy#TCL3$6Mc zSQCOGL4-ssiIfm@W@+1qL9yCT$-C3AM<;?<8m25faZ|MGqAIJc;~@dquH9C7>g^ZWW)gZp>JC* zTSGw@ND_z?notSFz=n+!GSDFjlqjMRXJKag(#pz(rMW^OcXC?s{ZIl(tAaU;h5`m= zEpRZH(9GH(fOH+_=IZ#()!9VMm9B7A)KRXG(uTRypih_2@XhEm@8Hj?>K~)L5Mxny zYI5xP>(3Q)xqhqN?zBzl6N0a~-tz9RZ~yS^cM$dP@GtkS3-t5uu)ao zXelHBgodS1hBX6A5)oGwN5`&Ry8Qf&3-ePW+UtA$FbJ4!9t0qRK>-30*&w0;3N;f^ zKArsfS8fz@F*gzwQK5t*g%Uyx4k{HnV<_NH>ZtJN^|kuEs(z-zVgkF^+vtZ?E$bt4uH#T|Ko>SYwKHq*PEJ}02`%56q-KAf{mV?QT@!0zt5}c=X+ogfMH+)5Gb!AsgN>c0F*?SNylD$Vfp`W@7#W)x~?$3uKUczGh=&bT2 zd+eDxm%aP2$HoRlYE{f7ne%APym)?Ed+l|;^?f_KTQflr7$Zu;21!VSh)K<=he9LY z!EM+kZBq55Z;0#X&_=jxYw^Xgk==v4Ru;?ES}jg2p-may|Kj-6)Quy@PtV@_x~;8{ zYsrdG7$+(Q!CD&&tCzDgapF~hh+z~48u&^k#8DD4i;^&7si)`pvAz3W7#rv-)hkQ0 z_ZDgZ7ASF!jE)X%dwE}Pp(PUpLCOS1Qw>czGK*nSAYHZP@OlS+Xo-}*VOy?A)nnsp zT^f{8+1AxLIy$_qv%|*We7Ouj#kTg2*0x(SGZT~7&Yr)r62&GZ#nyt7M%D^50!DGd zYP=TI7b;)LqB!ykRlb0Ems@3V&KC07!NEZi{q)?$m3rh2-#gl}uOHacU)q|&rUJ%+^}xoQG_+uaEsmJx)Rq zu7}azjvhbv#pNgwhgOw$@7nh2{^7PX5W)3v$Za^5Qtp+_w;-3e{gqx2~aJ%Oxpb5;OJnfGZO@=YBUg5 zR`pIVq{6I#j1SuI<7Ob$r0NmYtuU!fm1^i*!>_CwC0|a>T=;Toxw5>aHQU~nx6T1LVGg5Eh>0kQA~gyC^?GQG zu@F0lL^5;xtKa<*%xNbGNE+NWhvc09}o*y467Fw2<7Ah;X&_W%44p!tAv*)%fO!pLYE026DCnj}e_v%+#`=Jw&kf1bWKAEG4a3fbV$_`trw?U{5& z)v&6lst5uj5sR=0t{*>WImPDjT!Yv1gK1HZTZ3ez8$^Kp^NU^zLUhUb%_J( z0H*JhKmX$Dt(&)cx;k_D90I9GVq@?5lEeu!#}1EweD=c=Coz?+#?Auw6kFbWd8E4| zuYobfi#&;#iI|yLyfX*m29*opqZ8;gsd{3KJgnM^FhF4BxvlN{$M%%AcgIn^vRtX# zIC74_uB@zF{c7R(nTvC?ciIXqg?v7-kr4sF1e^-rEzcc0bxKqE+AD{yT)P&<$!q(D z4~_L_(?$bfK@t&BKa5}%Wb$8)HK}@RLx)Di@*-eH2~Z0Lt+bCr|zBA3y%#E8C03Yg5w# z?(NqP^c3?ZFlta$h?SU$h($#F+Qj-0wg=t|G^zSlboID8*+Otkl*?v!^==>DRm!D; zyR&o4)w*@yz=hV%S8A6oPu-ll!3gcG`Ic<9vQqu^d%wRvJ=Tl9$H!y!+1EH>bb))o=e;saNxb!u--g_m<+%e)PSu;hkx}@L+@( zg#|?rN!73@fw)z*`-XD4na5v~swesQ8<_j<&!UqbefI#4Id=Od`r;*0N}D15%rN{K2=> zY3NxhS*yP=5<)STJ-C0oueY>&pzr93GgCKjSE^wGm^heQtO1Gz3t)g?{;o zSeTd)k(rUajVTZ@HUyu98}6e%0Bm!SYSyZ!r*3&8WM{#}0JSKdoh$$S*guaPKQ(i& zyc{KUOU?m7>@dYj2gmw<@$UCqGbR-n5kUkMMf9QWEME7ru77$cHnK_8cj6(xeYMtX zS%|7(IC*vI)R~E+r$4zdyXdSV0Ee1yN&oWaKYew4kSQT1=Nyr@GDbr5DGvnlq>yT! zfKOMKg^ew0e?*y#G5dyx`?r@yhlc<3(Xoq@*O!+gCp(3lj?tet^ b2|WJ+ceY<>b~oc|00000NkvXXu0mjfj54mU literal 0 HcmV?d00001 diff --git a/boards/sam3x-ek/.spec b/boards/sam3x-ek/.spec new file mode 100644 index 00000000..9fae27aa --- /dev/null +++ b/boards/sam3x-ek/.spec @@ -0,0 +1,30 @@ +name = 'Atmel SAM3X-EK' +description = ''' +

Atmel SAM3X-EK

+ +

+ + + + + + + + + + + + + + + + + + + +
CPUAtmel SAM3X8
Clock72 MHz
Memory512 kB Flash, 64 kB SRAM
Peripheralstimers, UART, LCD display
+

+

+SAM3X-EK® is based on Atmel SAM3X8 Cortex-M3 CPU. +

+''' diff --git a/boards/sam3x-ek/hw/hw_hx8347.h b/boards/sam3x-ek/hw/hw_hx8347.h new file mode 100644 index 00000000..541f2849 --- /dev/null +++ b/boards/sam3x-ek/hw/hw_hx8347.h @@ -0,0 +1,163 @@ +/** + * \file + * + * + * \brief HX8347 low-level hardware macros for Atmel SAM3X-EK board. + * + * The LCD controller is connected to the cpu static memory controller. + * LCD has 16 data lines and usual RS/WR/RD lines. The data lines + * are connected to the SMC data bus (D0-15), while the SCM address bus + * (A1 only) is used to drive the RS pin. WR/RD are connected to SMC's + * NWE and NRD respectively. + * + * \author Stefano Fedrigo + */ + +#ifndef HW_HX8347_H +#define HW_HX8347_H + +#include "cfg/macros.h" +#include + + +/* + * LCD I/O pins/ports and peripherals + */ +#define LCD_DATABUS_PINS (0xFFFF << 2) +#define LCD_DATABUS_PORT PIOC_BASE +#define LCD_DATABUS_PERIPH PIO_PERIPH_A + +#define LCD_NRD_PIN BV(29) +#define LCD_NRD_PORT PIOA_BASE +#define LCD_NRD_PERIPH PIO_PERIPH_B + +#define LCD_NWE_PIN BV(18) +#define LCD_NWE_PORT PIOC_BASE +#define LCD_NWE_PERIPH PIO_PERIPH_A + +#define LCD_NCS2_PIN BV(24) +#define LCD_NCS2_PORT PIOB_BASE +#define LCD_NCS2_PERIPH PIO_PERIPH_B + +#define LCD_RS_PIN BV(22) +#define LCD_RS_PORT PIOC_BASE +#define LCD_RS_PERIPH PIO_PERIPH_A + + +// How many cpu clocks per nanosecond. +#define CLOCKS_PER_NS(ns) ((uint32_t)((ns * (CPU_FREQ/1000000)) / 1000) + 1) + + +// LCD Base Address, chip select 2 +#define LCD_BASE 0x62000000 + +// LCD index register address +#define LCD_IR (*(uint16_t *)(LCD_BASE)) + +// LCD data address (A1 drives RS signal) +#define LCD_D (*(uint16_t *)(LCD_BASE + 2)) + +/** + * Send a command to LCD controller. + */ +INLINE void hx8347_cmd(uint8_t cmd) +{ + LCD_IR = cmd; +} + +/** + * Send data to LCD controller. + */ +INLINE void hx8347_write(uint16_t data) +{ + LCD_D = data; +} + +/** + * Read data from LCD controller. + */ +INLINE uint16_t hx8347_read(void) +{ + return LCD_D; +} + +/** + * Bus initialization: on SAM3X-EK the display is wired + * on the static memory controller, chip select 2. + */ +INLINE void hx8347_busInit(void) +{ + // Configure pins: disable PIO... + HWREG(LCD_DATABUS_PORT + PIO_PDR_OFF) = LCD_DATABUS_PINS; + HWREG(LCD_NRD_PORT + PIO_PDR_OFF) = LCD_NRD_PIN; + HWREG(LCD_NWE_PORT + PIO_PDR_OFF) = LCD_NWE_PIN; + HWREG(LCD_NCS2_PORT + PIO_PDR_OFF) = LCD_NCS2_PIN; + HWREG(LCD_RS_PORT + PIO_PDR_OFF) = LCD_RS_PIN; + + // ... enable pull-up... + HWREG(LCD_DATABUS_PORT + PIO_PUER_OFF) = LCD_DATABUS_PINS; + HWREG(LCD_NRD_PORT + PIO_PUER_OFF) = LCD_NRD_PIN; + HWREG(LCD_NWE_PORT + PIO_PUER_OFF) = LCD_NWE_PIN; + HWREG(LCD_NCS2_PORT + PIO_PUER_OFF) = LCD_NCS2_PIN; + HWREG(LCD_RS_PORT + PIO_PUER_OFF) = LCD_RS_PIN; + + // ... and select appropriate peripheral. + PIO_PERIPH_SEL(LCD_DATABUS_PORT, LCD_DATABUS_PINS, LCD_DATABUS_PERIPH); + PIO_PERIPH_SEL(LCD_NRD_PORT, LCD_NRD_PIN, LCD_NRD_PERIPH); + PIO_PERIPH_SEL(LCD_NWE_PORT, LCD_NWE_PIN, LCD_NWE_PERIPH); + PIO_PERIPH_SEL(LCD_NCS2_PORT, LCD_NCS2_PIN, LCD_NCS2_PERIPH); + PIO_PERIPH_SEL(LCD_RS_PORT, LCD_RS_PIN, LCD_RS_PERIPH); + + // Enable peripheral clock + PMC_PCER = SMC_SDRAMC_ID; + + // Static memory controller configuration + SMC_SETUP2 = + SMC_SETUP_NWE_SETUP(CLOCKS_PER_NS(10)) | + SMC_SETUP_NCS_WR_SETUP(CLOCKS_PER_NS(10)) | + SMC_SETUP_NRD_SETUP(CLOCKS_PER_NS(90)) | + SMC_SETUP_NCS_RD_SETUP(CLOCKS_PER_NS(90)); + + SMC_PULSE2 = + SMC_PULSE_NWE_PULSE(CLOCKS_PER_NS(35)) | + SMC_PULSE_NCS_WR_PULSE(CLOCKS_PER_NS(35)) | + SMC_PULSE_NRD_PULSE(CLOCKS_PER_NS(355)) | + SMC_PULSE_NCS_RD_PULSE(CLOCKS_PER_NS(355)); + + SMC_CYCLE2 = + SMC_CYCLE_NWE_CYCLE(CLOCKS_PER_NS(100)) | + SMC_CYCLE_NRD_CYCLE(CLOCKS_PER_NS(460)); + + SMC_MODE2 = + SMC_MODE_WRITE_MODE | SMC_MODE_READ_MODE | SMC_MODE_DBW; +} + +#endif /* HW_HX8347_H */ diff --git a/boards/sam3x-ek/hw/hw_led.h b/boards/sam3x-ek/hw/hw_led.h new file mode 100644 index 00000000..ce808b61 --- /dev/null +++ b/boards/sam3x-ek/hw/hw_led.h @@ -0,0 +1,101 @@ +/** + * \file + * + * + * \brief Led on/off macros. + * + * \author Stefano Fedrigo + */ + +#ifndef HW_LED_H +#define HW_LED_H + +#include + +#include + +/* + * Note that power led (RED) is on by default. + */ +#define LED_GREEN 0 +#define LED_AMBER 1 +#define LED_BLUE 2 +#define LED_RED 3 +#define LED_DEFAULT LED_GREEN + +// Leds +#define LED_GREEN_PIN BV(13) // Port B +#define LED_AMBER_PIN BV(12) // Port B +#define LED_BLUE_PIN BV(12) // Port A +#define LED_RED_PIN BV(13) // Port A + +#define LED_ON(led) \ + do { \ + if (led == LED_GREEN) \ + PIOB_CODR = LED_GREEN_PIN; \ + else if (led == LED_AMBER) \ + PIOB_CODR = LED_AMBER_PIN; \ + else if (led == LED_BLUE) \ + PIOA_CODR = LED_BLUE_PIN; \ + else if (led == LED_RED) \ + PIOA_SODR = LED_RED_PIN; \ + else \ + ASSERT(0); \ + } while (0) + + +#define LED_OFF(led) \ + do { \ + if (led == LED_GREEN) \ + PIOB_SODR = LED_GREEN_PIN; \ + else if (led == LED_AMBER) \ + PIOB_SODR = LED_AMBER_PIN; \ + else if (led == LED_BLUE) \ + PIOA_SODR = LED_BLUE_PIN; \ + else if (led == LED_RED) \ + PIOA_CODR = LED_RED_PIN; \ + else \ + ASSERT(0); \ + } while (0) + + +#define LED_INIT() \ + do { \ + PIOA_SODR = LED_BLUE_PIN; \ + PIOA_CODR = LED_RED_PIN; \ + PIOA_OER = LED_BLUE_PIN | LED_RED_PIN; \ + PIOA_PER = LED_BLUE_PIN | LED_RED_PIN; \ + PIOB_SODR = LED_GREEN_PIN | LED_AMBER_PIN; \ + PIOB_OER = LED_GREEN_PIN | LED_AMBER_PIN; \ + PIOB_PER = LED_GREEN_PIN | LED_AMBER_PIN; \ + } while(0) + +#endif /* HW_LED_H */ diff --git a/boards/sam3x-ek/templates/.spec b/boards/sam3x-ek/templates/.spec new file mode 100644 index 00000000..3fd1ea2d --- /dev/null +++ b/boards/sam3x-ek/templates/.spec @@ -0,0 +1,3 @@ +name = 'Templates' +ord = 0 +description = 'Use these as a starting point for your BeRTOS project.' diff --git a/boards/sam3x-ek/templates/empty/.spec b/boards/sam3x-ek/templates/empty/.spec new file mode 100644 index 00000000..f3edfbc2 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/.spec @@ -0,0 +1,8 @@ +name = 'empty preset' +advanced = True +description=""" +

+This is a minimalist project, it just initializes the hardware of the +supported board and proposes an empty main. +<\p> +""" diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_adc.h b/boards/sam3x-ek/templates/empty/cfg/cfg_adc.h new file mode 100644 index 00000000..df2587be --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_adc.h @@ -0,0 +1,112 @@ +/** + * \file + * + * + * \brief Configuration file for the ADC module. + * + * \author Daniele Basile + */ + +#ifndef CFG_ADC_H +#define CFG_ADC_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define ADC_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define ADC_LOG_FORMAT LOG_FMT_VERBOSE + +/** + * Clock Frequency for ADC conversion. + * This frequency will be rounded down to an integer + * submultiple of CPU_FREQ. + * + * $WIZ$ type = "int" + * $WIZ$ supports = "at91" + * $WIZ$ max = 5000000 + */ +#define CONFIG_ADC_CLOCK 4800000UL + +/** + * Minimum time for starting up a conversion [us]. + * + * $WIZ$ type = "int" + * $WIZ$ min = 20 + * $WIZ$ supports = "at91" + */ +#define CONFIG_ADC_STARTUP_TIME 20 + +/** + * Minimum time for sample and hold [ns]. + * + * $WIZ$ type = "int" + * $WIZ$ min = 600 + * $WIZ$ supports = "at91" + */ +#define CONFIG_ADC_SHTIME 834 + +/** + * ADC Voltage Reference. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "avr_adc_refs" + * $WIZ$ supports = "avr" + */ +#define CONFIG_ADC_AVR_REF ADC_AVR_AVCC + +/** + * ADC clock divisor from main crystal. + * + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ max = 128 + * $WIZ$ supports = "avr" + */ +#define CONFIG_ADC_AVR_DIVISOR 2 + +/** + * Enable ADC strobe for debugging ADC ISR. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_ADC_STROBE 0 + +#endif /* CFG_ADC_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_afsk.h b/boards/sam3x-ek/templates/empty/cfg/cfg_afsk.h new file mode 100644 index 00000000..cce47c1f --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_afsk.h @@ -0,0 +1,113 @@ +/** + * \file + * + * + * \brief Configuration file for AFSK1200 modem. + * + * \author Francesco Sacchi + */ + +#ifndef CFG_AFSK_H +#define CFG_AFSK_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define AFSK_LOG_LEVEL LOG_LVL_WARN + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define AFSK_LOG_FORMAT LOG_FMT_TERSE + + +/** + * AFSK discriminator filter type. + * + * $WIZ$ type = "enum"; value_list = "afsk_filter_list" + */ +#define CONFIG_AFSK_FILTER AFSK_CHEBYSHEV + + +/** + * AFSK receiver buffer length. + * + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_AFSK_RX_BUFLEN 32 + +/** + * AFSK transimtter buffer length. + * + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_AFSK_TX_BUFLEN 32 + +/** + * AFSK DAC sample rate for modem outout. + * $WIZ$ type = "int" + * $WIZ$ min = 2400 + */ +#define CONFIG_AFSK_DAC_SAMPLERATE 9600 + +/** + * AFSK RX timeout in ms, set to -1 to disable. + * $WIZ$ type = "int" + * $WIZ$ min = -1 + */ +#define CONFIG_AFSK_RXTIMEOUT 0 + + +/** + * AFSK Preamble length in [ms], before starting transmissions. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_AFSK_PREAMBLE_LEN 300UL + + + +/** + * AFSK Trailer length in [ms], before stopping transmissions. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_AFSK_TRAILER_LEN 50UL + +#endif /* CFG_AFSK_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_ax25.h b/boards/sam3x-ek/templates/empty/cfg/cfg_ax25.h new file mode 100644 index 00000000..f561d212 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_ax25.h @@ -0,0 +1,75 @@ +/** + * \file + * + * + * \brief Configuration file for the AX25 protocol module. + * + * \author Francesco Sacchi + */ + +#ifndef CFG_AX25_H +#define CFG_AX25_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define AX25_LOG_LEVEL LOG_LVL_WARN + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define AX25_LOG_FORMAT LOG_FMT_TERSE + +/** + * AX25 frame buffer lenght. + * + * $WIZ$ type = "int" + * $WIZ$ min = 18 + */ +#define CONFIG_AX25_FRAME_BUF_LEN 330 + + +/** + * Enable repeaters listing in AX25 frames. + * If enabled use 56 addtional bytes of RAM + * for each message received. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_AX25_RPT_LST 1 + +#endif /* CFG_AX25_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_battfs.h b/boards/sam3x-ek/templates/empty/cfg/cfg_battfs.h new file mode 100644 index 00000000..249dda76 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_battfs.h @@ -0,0 +1,67 @@ +/** + * \file + * + * + * \brief Configuration file for BattFS module. + * + * \author Daniele Basile + */ + +#ifndef CFG_BATTFS_H +#define CFG_BATTFS_H + + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define BATTFS_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define BATTFS_LOG_FORMAT LOG_FMT_VERBOSE + +/** + * Set to 1 to enable free page shuffling. + * This increase memories life but makes debugging + * more difficult due to its unrepeteable state. + * $WIZ$ type = "boolean" + */ +#define CONFIG_BATTFS_SHUFFLE_FREE_PAGES 0 + + +#endif /* BATTFS */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_context_switch.h b/boards/sam3x-ek/templates/empty/cfg/cfg_context_switch.h new file mode 100644 index 00000000..fe0b4f87 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_context_switch.h @@ -0,0 +1,71 @@ +/** + * \file + * + * + * \brief Configuration file for the context switch benchmark. + * + * \author Daniele Basile + */ + +#ifndef CFG_CONTEXT_SWITCH_H +#define CFG_CONTEXT_SWITCH_H + +/** + * Use hp timer for the bechmark. + * + * $WIZ$ type = "boolean" + * $WIZ$ module= "boolean" + * $WIZ$ conditional_deps = "ser" + */ +#define CONFIG_USE_HP_TIMER 1 + + +/** + * Use board led for benchmark. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_USE_LED 1 + + +/** + * Debug console port. + * $WIZ$ type = "int"; min = 0 + */ +#define CONFIG_CTX_DEBUG_PORT 0 + +/** + * Baudrate for the debug console. + * $WIZ$ type = "int"; min = 300 + */ +#define CONFIG_CTX_DEBUG_BAUDRATE 115200UL + +#endif /* CFG_CONTEXT_SWITCH_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_dataflash.h b/boards/sam3x-ek/templates/empty/cfg/cfg_dataflash.h new file mode 100644 index 00000000..4e7dfbd9 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_dataflash.h @@ -0,0 +1,55 @@ +/** + * \file + * + * + * \brief Configuration file for data flash memory module. + * + * \author Daniele Basile + */ + +#ifndef CFG_DATAFLASH_H +#define CFG_DATAFLASH_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define DATAFLASH_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define DATAFLASH_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_DATAFLASH_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_dc_motor.h b/boards/sam3x-ek/templates/empty/cfg/cfg_dc_motor.h new file mode 100644 index 00000000..fd9bac73 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_dc_motor.h @@ -0,0 +1,111 @@ +/** + * \file + * + * + * \brief Configuration file for DC motor module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_DC_MOTOR_H +#define CFG_DC_MOTOR_H + +/** + * Number of the DC motors to manage. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NUM_DC_MOTOR 4 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define DC_MOTOR_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define DC_MOTOR_LOG_FORMAT LOG_FMT_VERBOSE + + +/** + * Min value of DC motor speed. + * \note Generally this value is the min value of the ADC conversion, + * if you use it. + * + * $WIZ$ type = "int" + */ +#define CONFIG_DC_MOTOR_MIN_SPEED 0 + + +/** + * Max value of DC motor speed. + * \note Generally this value is the max value of the ADC conversion, + * if you use it. + * + * $WIZ$ type = "int" + * $WIZ$ max = 65535 + */ +#define CONFIG_DC_MOTOR_MAX_SPEED 65535 + + +/** + * Sampling period in millisecond. + * $WIZ$ type = "int" + */ +#define CONFIG_DC_MOTOR_SAMPLE_PERIOD 40 + +/** + * Amount of millisecond before to read sample. + * $WIZ$ type = "int" + */ +#define CONFIG_DC_MOTOR_SAMPLE_DELAY 2 + +/** + * This control set which mode the driver use to lock share + * resources when we use the preempitive kernel. + * If we set to 1 we use the semaphore module otherwise the + * driver disable the switch context every time we need to access + * to shared sources. + * + * $WIZ$ type = "int" + */ +#define CONFIG_DC_MOTOR_USE_SEM 1 + +#endif /* CFG_DC_MOTOR_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_debug.h b/boards/sam3x-ek/templates/empty/cfg/cfg_debug.h new file mode 100644 index 00000000..10639848 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_debug.h @@ -0,0 +1,70 @@ +/** + * \file + * + * + * \brief Configuration file for Debug module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_DEBUG_H +#define CFG_DEBUG_H + +/** + * Debug console port. + * $WIZ$ type = "int"; min = 0 + */ +#define CONFIG_KDEBUG_PORT 0 + +/** + * Baudrate for the debug console. + * $WIZ$ type = "int"; min = 300 + */ +#define CONFIG_KDEBUG_BAUDRATE 115200UL + +/** + * Clock source for the UART module. You need to write the code to reprogram the respective clock at the required frequency in your project before calling kdbg_init(). + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "kdbg_clk_src" + * $WIZ$ supports = "msp430" + */ +#define CONFIG_KDEBUG_CLOCK_SOURCE KDBG_UART_SMCLK + +/** + * Clock frequency. (Only if different from MCLK's frequency, otherwise leave it zero) + * $WIZ$ type = "int"; min = 0 + * $WIZ$ supports = "msp430" + */ +#define CONFIG_KDEBUG_CLOCK_FREQ 0UL + +#endif /* CFG_DEBUG_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_eeprom.h b/boards/sam3x-ek/templates/empty/cfg/cfg_eeprom.h new file mode 100644 index 00000000..b56c1f9c --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_eeprom.h @@ -0,0 +1,64 @@ +/** + * \file + * + * + * \brief Configuration file for the Eeprom module. + * + * \author Daniele Basile + */ + +#ifndef CFG_EEPROM_H +#define CFG_EEPROM_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define EEPROM_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define EEPROM_LOG_FORMAT LOG_FMT_TERSE + +/** + * Check this to disable Eeprom deprecated API support. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_EEPROM_DISABLE_OLD_API 0 + +#endif /* CFG_EEPROM_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_emb_flash.h b/boards/sam3x-ek/templates/empty/cfg/cfg_emb_flash.h new file mode 100644 index 00000000..82d96e52 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_emb_flash.h @@ -0,0 +1,73 @@ +/** + * \file + * + * + * \author Daniele Basile + * + * \brief Configuration file for embedded flash module. + */ + +#ifndef CFG_EMB_FLASH_H +#define CFG_EMB_FLASH_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define CONFIG_FLASH_EMB_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define CONFIG_FLASH_EMB_LOG_FORMAT LOG_FMT_TERSE + + +/** + * Write emb flash timeout. + * For how many milliseconds the cpu wait + * to complete write operation. + * + * $WIZ$ type = "int" + */ +#define CONFIG_FLASH_WR_TIMEOUT 100 + +/** + * Check this to disable embedded flash deprecated API support. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_FLASH_DISABLE_OLD_API 0 + +#endif /* CFG_FLASH_AT91_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_eth.h b/boards/sam3x-ek/templates/empty/cfg/cfg_eth.h new file mode 100644 index 00000000..a3788081 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_eth.h @@ -0,0 +1,57 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the generic ethernet driver module + */ + +#ifndef CFG_ETH_H +#define CFG_ETH_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define ETH_LOG_LEVEL LOG_LVL_WARN + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define ETH_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_ETH_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_fat.h b/boards/sam3x-ek/templates/empty/cfg/cfg_fat.h new file mode 100644 index 00000000..fcd717af --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_fat.h @@ -0,0 +1,156 @@ +/** + * \file + * + * + * \brief Configuration file for Fat module. + * + * + * \author Luca Ottaviano + * \author Francesco Sacchi + */ + +#ifndef CFG_FAT_H +#define CFG_FAT_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define FAT_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define FAT_LOG_FORMAT LOG_FMT_VERBOSE + + +/** + * Use word alignment to access FAT structure. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_WORD_ACCESS 0 +#define _WORD_ACCESS CONFIG_FAT_WORD_ACCESS + +/** + * Enable read functions only. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_FS_READONLY 0 +#define _FS_READONLY CONFIG_FAT_FS_READONLY + +/** + * Minimization level to remove some functions. + * $WIZ$ type = "int"; min = 0; max = 3 + */ +#define CONFIG_FAT_FS_MINIMIZE 0 +#define _FS_MINIMIZE CONFIG_FAT_FS_MINIMIZE + +/** + * If enabled, this reduces memory consumption 512 bytes each file object by using a shared buffer. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_FS_TINY 1 +#define _FS_TINY CONFIG_FAT_FS_TINY + +/** + * To enable string functions, set _USE_STRFUNC to 1 or 2. + * $WIZ$ type = "int" + * $WIZ$ supports = "False" + */ +#define CONFIG_FAT_USE_STRFUNC 0 +#define _USE_STRFUNC CONFIG_FAT_USE_STRFUNC + +/** + * Enable f_mkfs function. Requires CONFIG_FAT_FS_READONLY = 0. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_USE_MKFS 0 +#define _USE_MKFS (CONFIG_FAT_USE_MKFS && !CONFIG_FAT_FS_READONLY) + +/** + * Enable f_forward function. Requires CONFIG_FAT_FS_TINY. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_USE_FORWARD 0 +#define _USE_FORWARD (CONFIG_FAT_USE_FORWARD && CONFIG_FAT_FS_TINY) + +/** + * Number of volumes (logical drives) to be used. + * $WIZ$ type = "int"; min = 1; max = 255 + */ +#define CONFIG_FAT_DRIVES 1 +#define _DRIVES CONFIG_FAT_DRIVES + +/** + * Maximum sector size to be handled. (512/1024/2048/4096). + * 512 for memory card and hard disk, 1024 for floppy disk, 2048 for MO disk + * $WIZ$ type = "int"; min = 512; max = 4096 + */ +#define CONFIG_FAT_MAX_SS 512 +#define _MAX_SS CONFIG_FAT_MAX_SS + +/** + * When _MULTI_PARTITION is set to 0, each volume is bound to the same physical + * drive number and can mount only first primaly partition. When it is set to 1, + * each volume is tied to the partitions listed in Drives[]. + * $WIZ$ type = "boolean" + * $WIZ$ supports = "False" + */ +#define CONFIG_FAT_MULTI_PARTITION 0 +#define _MULTI_PARTITION CONFIG_FAT_MULTI_PARTITION + +/** + * Specifies the OEM code page to be used on the target system. + * $WIZ$ type = "int" + */ +#define CONFIG_FAT_CODE_PAGE 850 +#define _CODE_PAGE CONFIG_FAT_CODE_PAGE + +/** + * Support for long filenames. Enable only if you have a valid Microsoft license. + * $WIZ$ type = "boolean" + */ +#define CONFIG_FAT_USE_LFN 0 +#define _USE_LFN CONFIG_FAT_USE_LFN + +/** + * Maximum Long File Name length to handle. + * $WIZ$ type = "int"; min = 8; max = 255 + */ +#define CONFIG_FAT_MAX_LFN 255 +#define _MAX_LFN CONFIG_FAT_MAX_LFN + +#endif /* CFG_FAT_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_flash25.h b/boards/sam3x-ek/templates/empty/cfg/cfg_flash25.h new file mode 100644 index 00000000..4b478b21 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_flash25.h @@ -0,0 +1,51 @@ +/** + * \file + * + * + * \brief Configuration file for flash25 module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_FLASH25_H +#define CFG_FLASH25_H + +/** + * Eeprom memory type. + * + *$WIZ$ type = "enum" + *$WIZ$ value_list = "flash25_list" + */ +#define CONFIG_FLASH25 FLASH25_AT25F2048 + +#endif /* CFG_FALSH25_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_formatwr.h b/boards/sam3x-ek/templates/empty/cfg/cfg_formatwr.h new file mode 100644 index 00000000..bac8aca7 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_formatwr.h @@ -0,0 +1,65 @@ +/** + * \file + * + * + * \brief Configuration file for formatted write module. + * + * \author Daniele Basile + */ + +#ifndef CFG_FORMATWR_H +#define CFG_FORMATWR_H + +/** + * printf()-style formatter configuration. + * $WIZ$ type = "enum"; value_list = "printf_list" + * + * \sa PRINTF_DISABLED + * \sa PRINTF_NOMODIFIERS + * \sa PRINTF_REDUCED + * \sa PRINTF_NOFLOAT + * \sa PRINTF_FULL + */ +#define CONFIG_PRINTF PRINTF_FULL + +/** + * Size of buffer to format "%" sequences in printf. + * + * Warning: no check on buffer size is done when formatting, be careful especially + * with big numbers and %f formatting. + * + * $WIZ$ type = "int" + * $WIZ$ min = 4 + */ +#define CONFIG_FRMWRI_BUFSIZE 134 + +#endif /* CFG_FORMATWR_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_gfx.h b/boards/sam3x-ek/templates/empty/cfg/cfg_gfx.h new file mode 100644 index 00000000..59dde04c --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_gfx.h @@ -0,0 +1,67 @@ +/** + * \file + * + * + * \brief Configuration file for GFX module. + * + * \author Daniele Basile + */ + +#ifndef CFG_GFX_H +#define CFG_GFX_H + +/** + * Enable line clipping algorithm. + * $WIZ$ type = "boolean" + */ +#define CONFIG_GFX_CLIPPING 1 + +/** + * Enable text rendering in bitmaps. + * $WIZ$ type = "boolean" + */ +#define CONFIG_GFX_TEXT 1 + +/** + * Enable virtual coordinate system. + * $WIZ$ type = "boolean" + */ +#define CONFIG_GFX_VCOORDS 1 + +/** + * Select bitmap pixel format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "bitmap_format" + */ +#define CONFIG_BITMAP_FMT BITMAP_FMT_PLANAR_V_LSB + +#endif /* CFG_GFX_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_hashtable.h b/boards/sam3x-ek/templates/empty/cfg/cfg_hashtable.h new file mode 100644 index 00000000..e4645f33 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_hashtable.h @@ -0,0 +1,51 @@ +/** + * \file + * + * + * \brief Configuration file for hashtable module. + * + * \author Daniele Basile + */ + +#ifndef CFG_HASHTABLE_H +#define CFG_HASHTABLE_H + +/** + * Enable/disable support to declare special hash tables which maintain a copy of the key internally instead of relying on the hook to extract it from the data. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_HT_OPTIONAL_INTERNAL_KEY 1 + +#endif /* CFG_HASHTABLE_H */ + + + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_heap.h b/boards/sam3x-ek/templates/empty/cfg/cfg_heap.h new file mode 100644 index 00000000..e1a37b76 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_heap.h @@ -0,0 +1,50 @@ +/** + * \file + * + * + * \brief Configuration file for heap module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_HEAP_H +#define CFG_HEAP_H + +/** + * Enable malloc/free like API. + * $WIZ$ type = "boolean" + */ +#define CONFIG_HEAP_MALLOC 1 + +#endif /* CFG_HEAP_H */ + + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_i2c.h b/boards/sam3x-ek/templates/empty/cfg/cfg_i2c.h new file mode 100644 index 00000000..ea599a81 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_i2c.h @@ -0,0 +1,83 @@ +/** + * \file + * + * + * \brief Configuration file for I2C module. + * + * \author Daniele Basile + */ + +#ifndef CFG_I2C_H +#define CFG_I2C_H + +/** +*Comunication frequency. +* +* $WIZ$ type = "int" +*/ +#define CONFIG_I2C_FREQ 100000UL + +/** + * I2C start timeout. + * For how many milliseconds the i2c_start + * should try to get an ACK before + * returning error. + * + * $WIZ$ type = "int" + */ +#define CONFIG_I2C_START_TIMEOUT 100 + +/** + * Check this to disable I2c deprecated API support. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_I2C_DISABLE_OLD_API 0 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define I2C_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define I2C_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_I2C_H */ + + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_i2s.h b/boards/sam3x-ek/templates/empty/cfg/cfg_i2s.h new file mode 100644 index 00000000..6657157e --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_i2s.h @@ -0,0 +1,74 @@ +/** + * \file + * + * + * \brief Configuration file for I2S module. + * + * + * \author Luca Ottaviano + */ + +#ifndef CFG_I2S_H +#define CFG_I2S_H + +/** + * Length of each play buffer. + * + * $WIZ$ type = "int" + */ +#define CONFIG_PLAY_BUF_LEN 8192 + +/** + * Sampling frequency of the audio file. + * + * $WIZ$ type = "int" + * $WIZ$ min = 32000 + * $WIZ$ max = 192000 + */ +#define CONFIG_SAMPLE_FREQ 44100UL + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define I2S_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define I2S_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_I2S_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_ini_reader.h b/boards/sam3x-ek/templates/empty/cfg/cfg_ini_reader.h new file mode 100644 index 00000000..d0be4389 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_ini_reader.h @@ -0,0 +1,48 @@ +/** + * \file + * + * + * \brief Configuration file for ini reader module. + * + * + * \author Luca Ottaviano + */ + +#ifndef CFG_INI_READER_H +#define CFG_INI_READER_H + +/** + * Maximum ini file line length (chars). + * $WIZ$ type = "int"; min = 1 + */ +#define CONFIG_INI_MAX_LINE_LEN 64 + +#endif /* CFG_INI_READER_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_kbd.h b/boards/sam3x-ek/templates/empty/cfg/cfg_kbd.h new file mode 100644 index 00000000..92aa272d --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_kbd.h @@ -0,0 +1,58 @@ +/** + * \file + * + * + * \brief Configuration file for keyboard module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_KBD_H +#define CFG_KBD_H + +/// Keyboard polling method. $WIZ$ supports = "False" +#define CONFIG_KBD_POLL KBD_POLL_SOFTINT + +/// Enable keyboard event delivery to observers. $WIZ$ type = "boolean" +#define CONFIG_KBD_OBSERVER 0 + +/// Enable key beeps. $WIZ$ type = "boolean" +#define CONFIG_KBD_BEEP 0 + +/// Enable long pression handler for keys. $WIZ$ type = "boolean" +#define CONFIG_KBD_LONGPRESS 0 + +/// Enable calling poor man's scheduler to be called inside kbd_peek. $WIZ$ type = "boolean" +#define CONFIG_KBD_SCHED 0 + +#endif /* CFG_KBD_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_keytag.h b/boards/sam3x-ek/templates/empty/cfg/cfg_keytag.h new file mode 100644 index 00000000..8bedadf6 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_keytag.h @@ -0,0 +1,61 @@ +/** + * \file + * + * + * \brief Configuration file for keytag module. + * + * \author Daniele Basile + */ + +#ifndef CFG_KEYTAG_H +#define CFG_KEYTAG_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define CONFIG_KEYTAG_LOG_LEVEL LOG_LVL_ERR +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define CONFIG_KEYTAG_LOG_FORMAT LOG_FMT_TERSE + +/** + * Max buffer lenght + * $WIZ$ type = "int" + */ +#define CONFIG_TAG_MAX_LEN 14U + +#endif /* CFG_KEYTAG_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_kfile.h b/boards/sam3x-ek/templates/empty/cfg/cfg_kfile.h new file mode 100644 index 00000000..0ebed7b1 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_kfile.h @@ -0,0 +1,61 @@ +/** + * \file + * + * + * \brief Configuration file for KFile interface module. + * + * \author Daniele Basile + */ + +#ifndef CFG_KFILE_H +#define CFG_KFILE_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define KFILE_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define KFILE_LOG_FORMAT LOG_FMT_TERSE + +/** + * Enable the gets function with echo. + * $WIZ$ type = "boolean" + */ +#define CONFIG_KFILE_GETS 0 + +#endif /* CFG_KFILE_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_lcd_32122a.h b/boards/sam3x-ek/templates/empty/cfg/cfg_lcd_32122a.h new file mode 100644 index 00000000..5a9b3ca7 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_lcd_32122a.h @@ -0,0 +1,63 @@ +/** + * \file + * + * + * \brief Displaytech 32122A LCD driver configuration file. + * + * \author Bernie Innocenti + * \author Stefano Fedrigo + * + */ +#ifndef CFG_LCD_32122A_H +#define CFG_LCD_32122A_H + +/** + * Enable soft interrupt to refresh the LCD. + * $WIZ$ type = "boolean" + */ +#define CONFIG_LCD_SOFTINT_REFRESH 0 + +/** + * Enable wait macro when display is busy. + * $WIZ$ type = "boolean" + */ +#define CONFIG_LCD_WAIT 0 + +/** + * Display refresh time 32122a. + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_LCD_REFRESH 100 + +#endif /* CFG_LCD_32122A_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_lcd_hd44.h b/boards/sam3x-ek/templates/empty/cfg/cfg_lcd_hd44.h new file mode 100644 index 00000000..7bea4376 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_lcd_hd44.h @@ -0,0 +1,69 @@ +/** + * \file + * + * + * \brief Configuration file for lcd display module. + * + * \author Daniele Basile + */ + +#ifndef CFG_LCD_H +#define CFG_LCD_H + +/** + * Use 4 bit addressing mode. + * $WIZ$ type = "boolean" + */ +#define CONFIG_LCD_4BIT 0 + +/** + * Use a table to speed up LCD memory addressing. + * This will use about 100 bytes of RAM. + * $WIZ$ type = "boolean" + */ +#define CONFIG_LCD_ADDRESS_FAST 1 + +/** + * Number of columns in LCD display. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "lcd_hd44_cols" + */ +#define CONFIG_LCD_COLS LCD_HD44_COLS_16 + +/** + * Number of rows in LCD display. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "lcd_hd44_rows" + */ +#define CONFIG_LCD_ROWS LCD_HD44_ROWS_2 + +#endif /* CFG_LCD_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_lm75.h b/boards/sam3x-ek/templates/empty/cfg/cfg_lm75.h new file mode 100644 index 00000000..91b347ad --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_lm75.h @@ -0,0 +1,57 @@ +/** + * \file + * + * + * \brief Configuration file for the LM75 sensor temperature. + * + * \author Daniele Basile + */ + +#ifndef CFG_LM75_H +#define CFG_LM75_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define LM75_LOG_LEVEL LOG_LVL_WARN + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define LM75_LOG_FORMAT LOG_FMT_TERSE + +#endif /* CFG_AX25_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_lwip.h b/boards/sam3x-ek/templates/empty/cfg/cfg_lwip.h new file mode 100644 index 00000000..b6b55f65 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_lwip.h @@ -0,0 +1,1856 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the lwIP TCP/IP stack module + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * + */ +#ifndef CFG_LWIP_H +#define CFG_LWIP_H + +/* + ----------------------------------------------- + ---------- Platform specific locking ---------- + ----------------------------------------------- +*/ + +/** + * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain + * critical regions during buffer allocation, deallocation and memory + * allocation and deallocation. + */ +#ifndef SYS_LIGHTWEIGHT_PROT +#define SYS_LIGHTWEIGHT_PROT 1 +#endif + +/** + * NO_SYS==1: Provides VERY minimal functionality. Otherwise, + * use lwIP facilities. + */ +#ifndef NO_SYS +#define NO_SYS 0 +#endif + +/** + * MEMCPY: override this if you have a faster implementation at hand than the + * one included in your C library + */ +#ifndef MEMCPY +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/** + * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a + * call to memcpy() if the length is known at compile time and is small. + */ +#ifndef SMEMCPY +#define SMEMCPY(dst,src,len) memcpy(dst,src,len) +#endif + +/* + ------------------------------------ + ---------- Memory options ---------- + ------------------------------------ +*/ +/** + * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library + * instead of the lwip internal allocator. Can save code size if you + * already use it. + */ +#ifndef MEM_LIBC_MALLOC +#define MEM_LIBC_MALLOC 0 +#endif + +/** + * Use mem_malloc/mem_free instead of the lwip pool allocator. + * + * $WIZ$ type = "boolean" + */ +#ifndef MEMP_MEM_MALLOC +#define MEMP_MEM_MALLOC 0 +#endif + +/** + * MEM_ALIGNMENT: should be set to the alignment of the CPU + * \verbatim + * 4 byte alignment -> #define MEM_ALIGNMENT 4 + * 2 byte alignment -> #define MEM_ALIGNMENT 2 + * \endverbatim + */ +#ifndef MEM_ALIGNMENT +#define MEM_ALIGNMENT 4 +#endif + +/** + * The size of the lwIP heap memory. + * + * If the application will send a lot of data that needs to be copied, this + * should be set high. + * + * $WIZ$ type = "int"; min = 1600 + */ +#define MEM_SIZE 1600 + +/** + * Dynamic pool memory overflow protection check level. + * + * MEMP_OVERFLOW_CHECK == 0 no checking + * MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed + * MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time + * memp_malloc() or memp_free() is called (useful but slow!) + * + * $WIZ$ type = "int"; min = "0"; max = "2" + */ +#define MEMP_OVERFLOW_CHECK 0 + +/** + * Run a sanity check after each memp_free(). + * + * $WIZ$ type = "boolean" + */ +#define MEMP_SANITY_CHECK 0 + +/** + * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set + * of memory pools of various sizes. When mem_malloc is called, an element of + * the smallest pool that can provide the length needed is returned. + * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. + */ +#ifndef MEM_USE_POOLS +#define MEM_USE_POOLS 0 +#endif + +/** + * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next + * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more + * reliable. */ +#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL +#define MEM_USE_POOLS_TRY_BIGGER_POOL 0 +#endif + +/** + * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h + * that defines additional pools beyond the "standard" ones required + * by lwIP. If you set this to 1, you must have lwippools.h in your + * inlude path somewhere. + */ +#ifndef MEMP_USE_CUSTOM_POOLS +#define MEMP_USE_CUSTOM_POOLS 0 +#endif + +/** + * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from + * interrupt context (or another context that doesn't allow waiting for a + * semaphore). + * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, + * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs + * with each loop so that mem_free can run. + * + * ATTENTION: As you can see from the above description, this leads to dis-/ + * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc + * can need longer. + * + * If you don't want that, at least for NO_SYS=0, you can still use the following + * functions to enqueue a deallocation call which then runs in the tcpip_thread + * context: + * - pbuf_free_callback(p); + * - mem_free_callback(m); + */ +#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 +#endif + +/* + ------------------------------------------------ + ---------- Internal Memory Pool Sizes ---------- + ------------------------------------------------ +*/ +/** + * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). + * If the application sends a lot of data out of ROM (or other static memory), + * this should be set high. + */ +#ifndef MEMP_NUM_PBUF +#define MEMP_NUM_PBUF 16 +#endif + +/** + * MEMP_NUM_RAW_PCB: Number of raw connection PCBs + * (requires the LWIP_RAW option) + */ +#ifndef MEMP_NUM_RAW_PCB +#define MEMP_NUM_RAW_PCB 4 +#endif + +/** + * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One + * per active UDP "connection". + * (requires the LWIP_UDP option) + */ +#ifndef MEMP_NUM_UDP_PCB +#define MEMP_NUM_UDP_PCB 4 +#endif + +/** + * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB +#define MEMP_NUM_TCP_PCB 5 +#endif + +/** + * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_PCB_LISTEN +#define MEMP_NUM_TCP_PCB_LISTEN 8 +#endif + +/** + * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. + * (requires the LWIP_TCP option) + */ +#ifndef MEMP_NUM_TCP_SEG +#define MEMP_NUM_TCP_SEG 16 +#endif + +/** + * MEMP_NUM_REASSDATA: the number of simultaneously IP packets queued for + * reassembly (whole packets, not fragments!) + */ +#ifndef MEMP_NUM_REASSDATA +#define MEMP_NUM_REASSDATA 5 +#endif + +/** + * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing + * packets (pbufs) that are waiting for an ARP request (to resolve + * their destination address) to finish. + * (requires the ARP_QUEUEING option) + */ +#ifndef MEMP_NUM_ARP_QUEUE +#define MEMP_NUM_ARP_QUEUE 30 +#endif + +/** + * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces + * can be members et the same time (one per netif - allsystems group -, plus one + * per netif membership). + * (requires the LWIP_IGMP option) + */ +#ifndef MEMP_NUM_IGMP_GROUP +#define MEMP_NUM_IGMP_GROUP 8 +#endif + +/** + * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. + * (requires NO_SYS==0) + */ +#ifndef MEMP_NUM_SYS_TIMEOUT +#define MEMP_NUM_SYS_TIMEOUT 8 +#endif + +/** + * MEMP_NUM_NETBUF: the number of struct netbufs. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETBUF +#define MEMP_NUM_NETBUF 2 +#endif + +/** + * MEMP_NUM_NETCONN: the number of struct netconns. + * (only needed if you use the sequential API, like api_lib.c) + */ +#ifndef MEMP_NUM_NETCONN +#define MEMP_NUM_NETCONN 4 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used + * for callback/timeout API communication. + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_API +#define MEMP_NUM_TCPIP_MSG_API 8 +#endif + +/** + * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used + * for incoming packets. + * (only needed if you use tcpip.c) + */ +#ifndef MEMP_NUM_TCPIP_MSG_INPKT +#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#endif + +/** + * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. + */ +#ifndef PBUF_POOL_SIZE +#define PBUF_POOL_SIZE 16 +#endif + +/* + --------------------------------- + ---------- ARP options ---------- + --------------------------------- +*/ +/** + * LWIP_ARP==1: Enable ARP functionality. + */ +#ifndef LWIP_ARP +#define LWIP_ARP 1 +#endif + +/** + * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. + */ +#ifndef ARP_TABLE_SIZE +#define ARP_TABLE_SIZE 10 +#endif + +/** + * ARP_QUEUEING==1: Outgoing packets are queued during hardware address + * resolution. + */ +#ifndef ARP_QUEUEING +#define ARP_QUEUEING 1 +#endif + +/** + * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be + * updated with the source MAC and IP addresses supplied in the packet. + * You may want to disable this if you do not trust LAN peers to have the + * correct addresses, or as a limited approach to attempt to handle + * spoofing. If disabled, lwIP will need to make a new ARP request if + * the peer is not already in the ARP table, adding a little latency. + */ +#ifndef ETHARP_TRUST_IP_MAC +#define ETHARP_TRUST_IP_MAC 1 +#endif + +/** + * ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header. + * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check. + * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted. + * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted. + */ +#ifndef ETHARP_SUPPORT_VLAN +#define ETHARP_SUPPORT_VLAN 0 +#endif + +/* + -------------------------------- + ---------- IP options ---------- + -------------------------------- +*/ +/** + * IP_FORWARD==1: Enables the ability to forward IP packets across network + * interfaces. If you are going to run lwIP on a device with only one network + * interface, define this to 0. + */ +#ifndef IP_FORWARD +#define IP_FORWARD 0 +#endif + +/** + * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. + * IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. + * IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). + */ +#ifndef IP_OPTIONS_ALLOWED +#define IP_OPTIONS_ALLOWED 1 +#endif + +/** + * Reassemble incoming fragmented IP packets. + * + * $WIZ$ type = "boolean" + */ +#define IP_REASSEMBLY 1 + +/** + * Fragment outgoing IP packets if their size exceeds MTU. + * + * $WIZ$ type = "boolean" + */ +#define IP_FRAG 1 + +/** + * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) + * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived + * in this time, the whole packet is discarded. + */ +#ifndef IP_REASS_MAXAGE +#define IP_REASS_MAXAGE 3 +#endif + +/** + * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. + * Since the received pbufs are enqueued, be sure to configure + * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive + * packets even if the maximum amount of fragments is enqueued for reassembly! + */ +#ifndef IP_REASS_MAX_PBUFS +#define IP_REASS_MAX_PBUFS 10 +#endif + +/** + * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP + * fragmentation. Otherwise pbufs are allocated and reference the original + * packet data to be fragmented. + */ +#ifndef IP_FRAG_USES_STATIC_BUF +#define IP_FRAG_USES_STATIC_BUF 1 +#endif + +/** + * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer + * (requires IP_FRAG_USES_STATIC_BUF==1) + */ +#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU) +#define IP_FRAG_MAX_MTU 1500 +#endif + +/** + * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. + */ +#ifndef IP_DEFAULT_TTL +#define IP_DEFAULT_TTL 255 +#endif + +/** + * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast + * filter per pcb on udp and raw send operations. To enable broadcast filter + * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. + */ +#ifndef IP_SOF_BROADCAST +#define IP_SOF_BROADCAST 0 +#endif + +/** + * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast + * filter on recv operations. + */ +#ifndef IP_SOF_BROADCAST_RECV +#define IP_SOF_BROADCAST_RECV 0 +#endif + +/* + ---------------------------------- + ---------- ICMP options ---------- + ---------------------------------- +*/ +/** + * Enable ICMP module inside the IP stack. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_ICMP 1 + +/** + * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. + */ +#ifndef ICMP_TTL +#define ICMP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) + */ +#ifndef LWIP_BROADCAST_PING +#define LWIP_BROADCAST_PING 0 +#endif + +/** + * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) + */ +#ifndef LWIP_MULTICAST_PING +#define LWIP_MULTICAST_PING 0 +#endif + +/* + --------------------------------- + ---------- RAW options ---------- + --------------------------------- +*/ +/** + * Enable application layer to hook into the IP layer itself. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_RAW 1 + +/** + * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. + */ +#ifndef RAW_TTL +#define RAW_TTL (IP_DEFAULT_TTL) +#endif + +/* + ---------------------------------- + ---------- DHCP options ---------- + ---------------------------------- +*/ +/** + * Enable DHCP module. UDP must be also available. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_DHCP 1 + +/** + * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. + */ +#ifndef DHCP_DOES_ARP_CHECK +#define DHCP_DOES_ARP_CHECK ((LWIP_DHCP) && (LWIP_ARP)) +#endif + +/* + ------------------------------------ + ---------- AUTOIP options ---------- + ------------------------------------ +*/ +/** + * LWIP_AUTOIP==1: Enable AUTOIP module. + */ +#ifndef LWIP_AUTOIP +#define LWIP_AUTOIP 0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on + * the same interface at the same time. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP +#define LWIP_DHCP_AUTOIP_COOP 0 +#endif + +/** + * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes + * that should be sent before falling back on AUTOIP. This can be set + * as low as 1 to get an AutoIP address very quickly, but you should + * be prepared to handle a changing IP address when DHCP overrides + * AutoIP. + */ +#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES +#define LWIP_DHCP_AUTOIP_COOP_TRIES 9 +#endif + +/* + ---------------------------------- + ---------- SNMP options ---------- + ---------------------------------- +*/ +/** + * Turn on SNMP module. UDP must be also available. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_SNMP 0 + +/** + * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will + * allow. At least one request buffer is required. + */ +#ifndef SNMP_CONCURRENT_REQUESTS +#define SNMP_CONCURRENT_REQUESTS 1 +#endif + +/** + * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap + * destination is required + */ +#ifndef SNMP_TRAP_DESTINATIONS +#define SNMP_TRAP_DESTINATIONS 1 +#endif + +/** + * SNMP_PRIVATE_MIB: + */ +#ifndef SNMP_PRIVATE_MIB +#define SNMP_PRIVATE_MIB 0 +#endif + +/** + * Only allow SNMP write actions that are 'safe' (e.g. disabeling netifs is not + * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). + * Unsafe requests are disabled by default! + */ +#ifndef SNMP_SAFE_REQUESTS +#define SNMP_SAFE_REQUESTS 1 +#endif + +/* + ---------------------------------- + ---------- IGMP options ---------- + ---------------------------------- +*/ +/** + * Turn on IGMP module. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_IGMP 0 + +/* + ---------------------------------- + ---------- DNS options ----------- + ---------------------------------- +*/ +/** + * Turn on DNS module. UDP must be available for DNS transport. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_DNS 0 + +/** DNS maximum number of entries to maintain locally. */ +#ifndef DNS_TABLE_SIZE +#define DNS_TABLE_SIZE 4 +#endif + +/** DNS maximum host name length supported in the name table. */ +#ifndef DNS_MAX_NAME_LENGTH +#define DNS_MAX_NAME_LENGTH 256 +#endif + +/** The maximum of DNS servers */ +#ifndef DNS_MAX_SERVERS +#define DNS_MAX_SERVERS 2 +#endif + +/** DNS do a name checking between the query and the response. */ +#ifndef DNS_DOES_NAME_CHECK +#define DNS_DOES_NAME_CHECK 1 +#endif + +/** DNS use a local buffer if DNS_USES_STATIC_BUF=0, a static one if + DNS_USES_STATIC_BUF=1, or a dynamic one if DNS_USES_STATIC_BUF=2. + The buffer will be of size DNS_MSG_SIZE */ +#ifndef DNS_USES_STATIC_BUF +#define DNS_USES_STATIC_BUF 1 +#endif + +/** DNS message max. size. Default value is RFC compliant. */ +#ifndef DNS_MSG_SIZE +#define DNS_MSG_SIZE 512 +#endif + +/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, + * you have to define + * \code + * #define DNS_LOCAL_HOSTLIST_INIT {{"host1", 0x123}, {"host2", 0x234}} + * \endcode + * (an array of structs name/address, where address is an u32_t in network + * byte order). + * + * Instead, you can also use an external function: + * \code + * #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name) + * \endcode + * that returns the IP address or INADDR_NONE if not found. + */ +#ifndef DNS_LOCAL_HOSTLIST +#define DNS_LOCAL_HOSTLIST 0 +#endif /* DNS_LOCAL_HOSTLIST */ + +/** If this is turned on, the local host-list can be dynamically changed + * at runtime. */ +#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC +#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0 +#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ + +/* + --------------------------------- + ---------- UDP options ---------- + --------------------------------- +*/ +/** + * Turn on UDP. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_UDP 1 + +/** + * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) + */ +#ifndef LWIP_UDPLITE +#define LWIP_UDPLITE 0 +#endif + +/** + * UDP_TTL: Default Time-To-Live value. + */ +#ifndef UDP_TTL +#define UDP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf. + */ +#ifndef LWIP_NETBUF_RECVINFO +#define LWIP_NETBUF_RECVINFO 0 +#endif + +/* + --------------------------------- + ---------- TCP options ---------- + --------------------------------- +*/ +/** + * Turn on TCP. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_TCP 1 + +/** + * TCP_TTL: Default Time-To-Live value. + */ +#ifndef TCP_TTL +#define TCP_TTL (IP_DEFAULT_TTL) +#endif + +/** + * TCP_WND: The size of a TCP window. This must be at least + * (2 * TCP_MSS) for things to work well + */ +#ifndef TCP_WND +#define TCP_WND (4 * TCP_MSS) +#endif + +/** + * TCP_MAXRTX: Maximum number of retransmissions of data segments. + */ +#ifndef TCP_MAXRTX +#define TCP_MAXRTX 12 +#endif + +/** + * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. + */ +#ifndef TCP_SYNMAXRTX +#define TCP_SYNMAXRTX 6 +#endif + +/** + * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. + * Define to 0 if your device is low on memory. + */ +#ifndef TCP_QUEUE_OOSEQ +#define TCP_QUEUE_OOSEQ (LWIP_TCP) +#endif + +/** + * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, + * you might want to increase this.) + * For the receive side, this MSS is advertised to the remote side + * when opening a connection. For the transmit size, this MSS sets + * an upper limit on the MSS advertised by the remote host. + */ +#ifndef TCP_MSS +#define TCP_MSS 536 +#endif + +/** + * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really + * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which + * reflects the available reassembly buffer size at the remote host) and the + * largest size permitted by the IP layer" (RFC 1122) + * Setting this to 1 enables code that checks TCP_MSS against the MTU of the + * netif used for a connection and limits the MSS if it would be too big otherwise. + */ +#ifndef TCP_CALCULATE_EFF_SEND_MSS +#define TCP_CALCULATE_EFF_SEND_MSS 1 +#endif + + +/** + * TCP_SND_BUF: TCP sender buffer space (bytes). + */ +#ifndef TCP_SND_BUF +#define TCP_SND_BUF (2 * TCP_MSS) +#endif + +/** + * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least + * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. + */ +#ifndef TCP_SND_QUEUELEN +#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF)/(TCP_MSS)) +#endif + +/** + * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than or equal + * to TCP_SND_BUF. It is the amount of space which must be available in the + * TCP snd_buf for select to return writable. + */ +#ifndef TCP_SNDLOWAT +#define TCP_SNDLOWAT ((TCP_SND_BUF)/2) +#endif + +/** + * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. + */ +#ifndef TCP_LISTEN_BACKLOG +#define TCP_LISTEN_BACKLOG 0 +#endif + +/** + * The maximum allowed backlog for TCP listen netconns. + * This backlog is used unless another is explicitly specified. + * 0xff is the maximum (u8_t). + */ +#ifndef TCP_DEFAULT_LISTEN_BACKLOG +#define TCP_DEFAULT_LISTEN_BACKLOG 0xff +#endif + +/** + * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. + */ +#ifndef LWIP_TCP_TIMESTAMPS +#define LWIP_TCP_TIMESTAMPS 0 +#endif + +/** + * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an + * explicit window update + */ +#ifndef TCP_WND_UPDATE_THRESHOLD +#define TCP_WND_UPDATE_THRESHOLD (TCP_WND / 4) +#endif + +/* + ---------------------------------- + ---------- Pbuf options ---------- + ---------------------------------- +*/ +/** + * PBUF_LINK_HLEN: the number of bytes that should be allocated for a + * link level header. The default is 14, the standard value for + * Ethernet. + */ +#ifndef PBUF_LINK_HLEN +#define PBUF_LINK_HLEN 14 +#endif + +/** + * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is + * designed to accomodate single full size TCP frame in one pbuf, including + * TCP_MSS, IP header, and link header. + */ +#ifndef PBUF_POOL_BUFSIZE +#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) +#endif + +/* + ------------------------------------------------ + ---------- Network Interfaces options ---------- + ------------------------------------------------ +*/ +/** + * Use DHCP_OPTION_HOSTNAME with netif's hostname field. + * + * $WIZ$ type = "boolean" + */ +#define LWIP_NETIF_HOSTNAME 1 + +/** + * Support netif api (in netifapi.c) + * + * $WIZ$ type = "boolean" + */ +#define LWIP_NETIF_API 0 + +/** + * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface + * changes its up/down status (i.e., due to DHCP IP acquistion) + */ +#ifndef LWIP_NETIF_STATUS_CALLBACK +#define LWIP_NETIF_STATUS_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface + * whenever the link changes (i.e., link down) + */ +#ifndef LWIP_NETIF_LINK_CALLBACK +#define LWIP_NETIF_LINK_CALLBACK 0 +#endif + +/** + * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table + * indices) in struct netif. TCP and UDP can make use of this to prevent + * scanning the ARP table for every sent packet. While this is faster for big + * ARP tables or many concurrent connections, it might be counterproductive + * if you have a tiny ARP table or if there never are concurrent connections. + */ +#ifndef LWIP_NETIF_HWADDRHINT +#define LWIP_NETIF_HWADDRHINT 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP + * address equal to the netif IP address, looping them back up the stack. + */ +#ifndef LWIP_NETIF_LOOPBACK +#define LWIP_NETIF_LOOPBACK 0 +#endif + +/** + * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback + * sending for each netif (0 = disabled) + */ +#ifndef LWIP_LOOPBACK_MAX_PBUFS +#define LWIP_LOOPBACK_MAX_PBUFS 0 +#endif + +/** + * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in + * the system, as netifs must change how they behave depending on this setting + * for the LWIP_NETIF_LOOPBACK option to work. + * Setting this is needed to avoid reentering non-reentrant functions like + * tcp_input(). + * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a + * multithreaded environment like tcpip.c. In this case, netif->input() + * is called directly. + * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. + * The packets are put on a list and netif_poll() must be called in + * the main application loop. + */ +#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING +#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS) +#endif + +/** + * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data + * to be sent into one single pbuf. This is for compatibility with DMA-enabled + * MACs that do not support scatter-gather. + * Beware that this might involve CPU-memcpy before transmitting that would not + * be needed without this flag! Use this only if you need to! + * + * @todo: TCP and IP-frag do not work with this, yet: + */ +#ifndef LWIP_NETIF_TX_SINGLE_PBUF +#define LWIP_NETIF_TX_SINGLE_PBUF 0 +#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ + +/* + ------------------------------------ + ---------- LOOPIF options ---------- + ------------------------------------ +*/ +/** + * Support loop interface (127.0.0.1) and loopif.c + * + * $WIZ$ type = "boolean" + */ +#define LWIP_HAVE_LOOPIF 0 + +/* + ------------------------------------ + ---------- SLIPIF options ---------- + ------------------------------------ +*/ +/** + * Support slip interface and slipif.c + * + * $WIZ$ type = "boolean" + */ +#define LWIP_HAVE_SLIPIF 0 + +/* + ------------------------------------ + ---------- Thread options ---------- + ------------------------------------ +*/ +/** + * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. + */ +#ifndef TCPIP_THREAD_NAME +#define TCPIP_THREAD_NAME "tcpip_thread" +#endif + +/** + * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_STACKSIZE +#define TCPIP_THREAD_STACKSIZE (KERN_MINSTACKSIZE * 3) +#endif + +/** + * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef TCPIP_THREAD_PRIO +#define TCPIP_THREAD_PRIO 0 +#endif + +/** + * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when tcpip_init is called. + */ +#ifndef TCPIP_MBOX_SIZE +#define TCPIP_MBOX_SIZE 0 +#endif + +/** + * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. + */ +#ifndef SLIPIF_THREAD_NAME +#define SLIPIF_THREAD_NAME "slipif_loop" +#endif + +/** + * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_STACKSIZE +#define SLIPIF_THREAD_STACKSIZE 0 +#endif + +/** + * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef SLIPIF_THREAD_PRIO +#define SLIPIF_THREAD_PRIO 1 +#endif + +/** + * PPP_THREAD_NAME: The name assigned to the pppMain thread. + */ +#ifndef PPP_THREAD_NAME +#define PPP_THREAD_NAME "pppMain" +#endif + +/** + * PPP_THREAD_STACKSIZE: The stack size used by the pppMain thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef PPP_THREAD_STACKSIZE +#define PPP_THREAD_STACKSIZE 0 +#endif + +/** + * PPP_THREAD_PRIO: The priority assigned to the pppMain thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef PPP_THREAD_PRIO +#define PPP_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. + */ +#ifndef DEFAULT_THREAD_NAME +#define DEFAULT_THREAD_NAME "lwIP" +#endif + +/** + * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. + * The stack size value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_STACKSIZE +#define DEFAULT_THREAD_STACKSIZE (KERN_MINSTACKSIZE * 3) +#endif + +/** + * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. + * The priority value itself is platform-dependent, but is passed to + * sys_thread_new() when the thread is created. + */ +#ifndef DEFAULT_THREAD_PRIO +#define DEFAULT_THREAD_PRIO 1 +#endif + +/** + * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_RAW_RECVMBOX_SIZE +#define DEFAULT_RAW_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_UDP_RECVMBOX_SIZE +#define DEFAULT_UDP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a + * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed + * to sys_mbox_new() when the recvmbox is created. + */ +#ifndef DEFAULT_TCP_RECVMBOX_SIZE +#define DEFAULT_TCP_RECVMBOX_SIZE 0 +#endif + +/** + * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. + * The queue size value itself is platform-dependent, but is passed to + * sys_mbox_new() when the acceptmbox is created. + */ +#ifndef DEFAULT_ACCEPTMBOX_SIZE +#define DEFAULT_ACCEPTMBOX_SIZE 0 +#endif + +/* + ---------------------------------------------- + ---------- Sequential layer options ---------- + ---------------------------------------------- +*/ +/** + * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) + * Don't use it if you're not an active lwIP project member + */ +#ifndef LWIP_TCPIP_CORE_LOCKING +#define LWIP_TCPIP_CORE_LOCKING 0 +#endif + +/** + * Enable Netconn API (require to use api_lib.c) + * + * $WIZ$ type = "boolean" + */ +#define LWIP_NETCONN 1 + +/* + ------------------------------------ + ---------- Socket options ---------- + ------------------------------------ +*/ +/** + * Enable Socket API (require to use sockets.c) + * + * $WIZ$ type = "boolean" + */ +#define LWIP_SOCKET 1 + +/** + * Enable BSD-style sockets functions names. + * + * NOTE: do not change this!!! + */ +#ifndef LWIP_COMPAT_SOCKETS +#define LWIP_COMPAT_SOCKETS 0 +#endif + +/** + * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. + * Disable this option if you use a POSIX operating system that uses the same + * names (read, write & close). (only used if you use sockets.c) + */ +#ifndef LWIP_POSIX_SOCKETS_IO_NAMES +#define LWIP_POSIX_SOCKETS_IO_NAMES 0 +#endif + +/** + * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT + * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set + * in seconds. (does not require sockets.c, and will affect tcp.c) + */ +#ifndef LWIP_TCP_KEEPALIVE +#define LWIP_TCP_KEEPALIVE 0 +#endif + +/** + * LWIP_SO_RCVTIMEO==1: Enable SO_RCVTIMEO processing. + */ +#ifndef LWIP_SO_RCVTIMEO +#define LWIP_SO_RCVTIMEO 0 +#endif + +/** + * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. + */ +#ifndef LWIP_SO_RCVBUF +#define LWIP_SO_RCVBUF 0 +#endif + +/** + * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. + */ +#ifndef RECV_BUFSIZE_DEFAULT +#define RECV_BUFSIZE_DEFAULT INT_MAX +#endif + +/** + * SO_REUSE==1: Enable SO_REUSEADDR and SO_REUSEPORT options. DO NOT USE! + */ +#ifndef SO_REUSE +#define SO_REUSE 0 +#endif + +/* + ---------------------------------------- + ---------- Statistics options ---------- + ---------------------------------------- +*/ +/** + * LWIP_STATS==1: Enable statistics collection in lwip_stats. + */ +#ifndef LWIP_STATS +#define LWIP_STATS 0 +#endif + +#if LWIP_STATS + +/** + * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. + */ +#ifndef LWIP_STATS_DISPLAY +#define LWIP_STATS_DISPLAY 0 +#endif + +/** + * LINK_STATS==1: Enable link stats. + */ +#ifndef LINK_STATS +#define LINK_STATS 1 +#endif + +/** + * ETHARP_STATS==1: Enable etharp stats. + */ +#ifndef ETHARP_STATS +#define ETHARP_STATS (LWIP_ARP) +#endif + +/** + * IP_STATS==1: Enable IP stats. + */ +#ifndef IP_STATS +#define IP_STATS 1 +#endif + +/** + * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is + * on if using either frag or reass. + */ +#ifndef IPFRAG_STATS +#define IPFRAG_STATS (IP_REASSEMBLY || IP_FRAG) +#endif + +/** + * ICMP_STATS==1: Enable ICMP stats. + */ +#ifndef ICMP_STATS +#define ICMP_STATS 1 +#endif + +/** + * IGMP_STATS==1: Enable IGMP stats. + */ +#ifndef IGMP_STATS +#define IGMP_STATS (LWIP_IGMP) +#endif + +/** + * UDP_STATS==1: Enable UDP stats. Default is on if + * UDP enabled, otherwise off. + */ +#ifndef UDP_STATS +#define UDP_STATS (LWIP_UDP) +#endif + +/** + * TCP_STATS==1: Enable TCP stats. Default is on if TCP + * enabled, otherwise off. + */ +#ifndef TCP_STATS +#define TCP_STATS (LWIP_TCP) +#endif + +/** + * MEM_STATS==1: Enable mem.c stats. + */ +#ifndef MEM_STATS +#define MEM_STATS ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) +#endif + +/** + * MEMP_STATS==1: Enable memp.c pool stats. + */ +#ifndef MEMP_STATS +#define MEMP_STATS (MEMP_MEM_MALLOC == 0) +#endif + +/** + * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). + */ +#ifndef SYS_STATS +#define SYS_STATS (NO_SYS == 0) +#endif + +#else + +#define LINK_STATS 0 +#define ETHARP_STATS 0 +#define IP_STATS 0 +#define IPFRAG_STATS 0 +#define ICMP_STATS 0 +#define IGMP_STATS 0 +#define UDP_STATS 0 +#define TCP_STATS 0 +#define MEM_STATS 0 +#define MEMP_STATS 0 +#define SYS_STATS 0 +#define LWIP_STATS_DISPLAY 0 + +#endif /* LWIP_STATS */ + +/* + --------------------------------- + ---------- PPP options ---------- + --------------------------------- +*/ +/** + * Enable PPP. + * + * $WIZ$ type = "boolean" + */ +#define PPP_SUPPORT 0 + +/** + * Enable PPP Over Ethernet. + * + * $WIZ$ type = "boolean" + */ +#define PPPOE_SUPPORT 0 + +/** + * PPPOS_SUPPORT==1: Enable PPP Over Serial + */ +#ifndef PPPOS_SUPPORT +#define PPPOS_SUPPORT PPP_SUPPORT +#endif + +#if PPP_SUPPORT + +/** + * NUM_PPP: Max PPP sessions. + */ +#ifndef NUM_PPP +#define NUM_PPP 1 +#endif + +/** + * PAP_SUPPORT==1: Support PAP. + */ +#ifndef PAP_SUPPORT +#define PAP_SUPPORT 0 +#endif + +/** + * CHAP_SUPPORT==1: Support CHAP. + */ +#ifndef CHAP_SUPPORT +#define CHAP_SUPPORT 0 +#endif + +/** + * MSCHAP_SUPPORT==1: Support MSCHAP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 0 +#endif + +/** + * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CBCP_SUPPORT +#define CBCP_SUPPORT 0 +#endif + +/** + * CCP_SUPPORT==1: Support CCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CCP_SUPPORT +#define CCP_SUPPORT 0 +#endif + +/** + * VJ_SUPPORT==1: Support VJ header compression. + */ +#ifndef VJ_SUPPORT +#define VJ_SUPPORT 0 +#endif + +/** + * MD5_SUPPORT==1: Support MD5 (see also CHAP). + */ +#ifndef MD5_SUPPORT +#define MD5_SUPPORT 0 +#endif + +/* + * Timeouts + */ +#ifndef FSM_DEFTIMEOUT +#define FSM_DEFTIMEOUT 6 /* Timeout time in seconds */ +#endif + +#ifndef FSM_DEFMAXTERMREQS +#define FSM_DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ +#endif + +#ifndef FSM_DEFMAXCONFREQS +#define FSM_DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ +#endif + +#ifndef FSM_DEFMAXNAKLOOPS +#define FSM_DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ +#endif + +#ifndef UPAP_DEFTIMEOUT +#define UPAP_DEFTIMEOUT 6 /* Timeout (seconds) for retransmitting req */ +#endif + +#ifndef UPAP_DEFREQTIME +#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ +#endif + +#ifndef CHAP_DEFTIMEOUT +#define CHAP_DEFTIMEOUT 6 /* Timeout time in seconds */ +#endif + +#ifndef CHAP_DEFTRANSMITS +#define CHAP_DEFTRANSMITS 10 /* max # times to send challenge */ +#endif + +/* Interval in seconds between keepalive echo requests, 0 to disable. */ +#ifndef LCP_ECHOINTERVAL +#define LCP_ECHOINTERVAL 0 +#endif + +/* Number of unanswered echo requests before failure. */ +#ifndef LCP_MAXECHOFAILS +#define LCP_MAXECHOFAILS 3 +#endif + +/* Max Xmit idle time (in jiffies) before resend flag char. */ +#ifndef PPP_MAXIDLEFLAG +#define PPP_MAXIDLEFLAG 100 +#endif + +/* + * Packet sizes + * + * Note - lcp shouldn't be allowed to negotiate stuff outside these + * limits. See lcp.h in the pppd directory. + * (XXX - these constants should simply be shared by lcp.c instead + * of living in lcp.h) + */ +#define PPP_MTU 1500 /* Default MTU (size of Info field) */ +#ifndef PPP_MAXMTU +/* #define PPP_MAXMTU 65535 - (PPP_HDRLEN + PPP_FCSLEN) */ +#define PPP_MAXMTU 1500 /* Largest MTU we allow */ +#endif +#define PPP_MINMTU 64 +#define PPP_MRU 1500 /* default MRU = max length of info field */ +#define PPP_MAXMRU 1500 /* Largest MRU we allow */ +#ifndef PPP_DEFMRU +#define PPP_DEFMRU 296 /* Try for this */ +#endif +#define PPP_MINMRU 128 /* No MRUs below this */ + +#ifndef MAXNAMELEN +#define MAXNAMELEN 256 /* max length of hostname or name for auth */ +#endif +#ifndef MAXSECRETLEN +#define MAXSECRETLEN 256 /* max length of password or secret */ +#endif + +#endif /* PPP_SUPPORT */ + +/* + -------------------------------------- + ---------- Checksum options ---------- + -------------------------------------- +*/ +/** + * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. + */ +#ifndef CHECKSUM_GEN_IP +#define CHECKSUM_GEN_IP 1 +#endif + +/** + * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. + */ +#ifndef CHECKSUM_GEN_UDP +#define CHECKSUM_GEN_UDP 1 +#endif + +/** + * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. + */ +#ifndef CHECKSUM_GEN_TCP +#define CHECKSUM_GEN_TCP 1 +#endif + +/** + * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. + */ +#ifndef CHECKSUM_CHECK_IP +#define CHECKSUM_CHECK_IP 1 +#endif + +/** + * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. + */ +#ifndef CHECKSUM_CHECK_UDP +#define CHECKSUM_CHECK_UDP 1 +#endif + +/** + * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. + */ +#ifndef CHECKSUM_CHECK_TCP +#define CHECKSUM_CHECK_TCP 1 +#endif + +/* + --------------------------------------- + ---------- Debugging options ---------- + --------------------------------------- +*/ + +#ifdef _DEBUG +#define LWIP_DEBUG +#endif + +/** + * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is + * compared against this value. If it is smaller, then debugging + * messages are written. + */ +#ifndef LWIP_DBG_MIN_LEVEL +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL +#endif + +/** + * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable + * debug messages of certain types. + */ +#ifndef LWIP_DBG_TYPES_ON +#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#endif + +/** + * ETHARP_DEBUG: Enable debugging in etharp.c. + */ +#ifndef ETHARP_DEBUG +#define ETHARP_DEBUG LWIP_DBG_OFF +#endif + +/** + * NETIF_DEBUG: Enable debugging in netif.c. + */ +#ifndef NETIF_DEBUG +#define NETIF_DEBUG LWIP_DBG_OFF +#endif + +/** + * PBUF_DEBUG: Enable debugging in pbuf.c. + */ +#ifndef PBUF_DEBUG +#define PBUF_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_LIB_DEBUG: Enable debugging in api_lib.c. + */ +#ifndef API_LIB_DEBUG +#define API_LIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * API_MSG_DEBUG: Enable debugging in api_msg.c. + */ +#ifndef API_MSG_DEBUG +#define API_MSG_DEBUG LWIP_DBG_OFF +#endif + +/** + * SOCKETS_DEBUG: Enable debugging in sockets.c. + */ +#ifndef SOCKETS_DEBUG +#define SOCKETS_DEBUG LWIP_DBG_OFF +#endif + +/** + * ICMP_DEBUG: Enable debugging in icmp.c. + */ +#ifndef ICMP_DEBUG +#define ICMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IGMP_DEBUG: Enable debugging in igmp.c. + */ +#ifndef IGMP_DEBUG +#define IGMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * INET_DEBUG: Enable debugging in inet.c. + */ +#ifndef INET_DEBUG +#define INET_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_DEBUG: Enable debugging for IP. + */ +#ifndef IP_DEBUG +#define IP_DEBUG LWIP_DBG_OFF +#endif + +/** + * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. + */ +#ifndef IP_REASS_DEBUG +#define IP_REASS_DEBUG LWIP_DBG_OFF +#endif + +/** + * RAW_DEBUG: Enable debugging in raw.c. + */ +#ifndef RAW_DEBUG +#define RAW_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEM_DEBUG: Enable debugging in mem.c. + */ +#ifndef MEM_DEBUG +#define MEM_DEBUG LWIP_DBG_OFF +#endif + +/** + * MEMP_DEBUG: Enable debugging in memp.c. + */ +#ifndef MEMP_DEBUG +#define MEMP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SYS_DEBUG: Enable debugging in sys.c. + */ +#ifndef SYS_DEBUG +#define SYS_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_DEBUG: Enable debugging for TCP. + */ +#ifndef TCP_DEBUG +#define TCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. + */ +#ifndef TCP_INPUT_DEBUG +#define TCP_INPUT_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. + */ +#ifndef TCP_FR_DEBUG +#define TCP_FR_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit + * timeout. + */ +#ifndef TCP_RTO_DEBUG +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. + */ +#ifndef TCP_CWND_DEBUG +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. + */ +#ifndef TCP_WND_DEBUG +#define TCP_WND_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. + */ +#ifndef TCP_OUTPUT_DEBUG +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. + */ +#ifndef TCP_RST_DEBUG +#define TCP_RST_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. + */ +#ifndef TCP_QLEN_DEBUG +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#endif + +/** + * UDP_DEBUG: Enable debugging in UDP. + */ +#ifndef UDP_DEBUG +#define UDP_DEBUG LWIP_DBG_OFF +#endif + +/** + * TCPIP_DEBUG: Enable debugging in tcpip.c. + */ +#ifndef TCPIP_DEBUG +#define TCPIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * PPP_DEBUG: Enable debugging for PPP. + */ +#ifndef PPP_DEBUG +#define PPP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SLIP_DEBUG: Enable debugging in slipif.c. + */ +#ifndef SLIP_DEBUG +#define SLIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * DHCP_DEBUG: Enable debugging in dhcp.c. + */ +#ifndef DHCP_DEBUG +#define DHCP_DEBUG LWIP_DBG_OFF +#endif + +/** + * AUTOIP_DEBUG: Enable debugging in autoip.c. + */ +#ifndef AUTOIP_DEBUG +#define AUTOIP_DEBUG LWIP_DBG_OFF +#endif + +/** + * SNMP_MSG_DEBUG: Enable debugging for SNMP messages. + */ +#ifndef SNMP_MSG_DEBUG +#define SNMP_MSG_DEBUG LWIP_DBG_OFF +#endif + +/** + * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. + */ +#ifndef SNMP_MIB_DEBUG +#define SNMP_MIB_DEBUG LWIP_DBG_OFF +#endif + +/** + * DNS_DEBUG: Enable debugging for DNS. + */ +#ifndef DNS_DEBUG +#define DNS_DEBUG LWIP_DBG_OFF +#endif + +/* Custom definitions: !!!DO NOT CHANGE THIS SECTION!!! */ +#define LWIP_TIMEVAL_PRIVATE 0 + +#endif /* CFG_LWIP_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_md2.h b/boards/sam3x-ek/templates/empty/cfg/cfg_md2.h new file mode 100644 index 00000000..e937b900 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_md2.h @@ -0,0 +1,53 @@ +/** + * \file + * + * + * \brief Configuration file for MD2 module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_MD2_H +#define CFG_MD2_H + +/** + * Size of block for MD2 algorithm. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_MD2_BLOCK_LEN 16 + +/// Use standard permutation in MD2 algorithm. $WIZ$ type = "boolean" +#define CONFIG_MD2_STD_PERM 0 + +#endif /* CFG_MD2_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_monitor.h b/boards/sam3x-ek/templates/empty/cfg/cfg_monitor.h new file mode 100644 index 00000000..78f222bf --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_monitor.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Kernel monitor configuration parameters + * + * \author Bernie Innocenti + */ + +#ifndef CFG_MONITOR_H +#define CFG_MONITOR_H + +/** + * Process monitor. + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_KERN_MONITOR 0 + +#endif /* CFG_MONITOR_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_nmea.h b/boards/sam3x-ek/templates/empty/cfg/cfg_nmea.h new file mode 100644 index 00000000..9249a9af --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_nmea.h @@ -0,0 +1,85 @@ +/** + * \file + * + * + * \brief Configuration file for NMEA module. + * + * \author Daniele Basile + */ + +#ifndef CFG_NMEA_H +#define CFG_NMEA_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define NMEA_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define NMEA_LOG_FORMAT LOG_FMT_TERSE + + +/** + * Maximum number of sentence parsers supported. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NMEAP_MAX_SENTENCES 8 + +/** + * Max length of a complete sentence. The standard says 82 bytes, but its probably + * better to go at least 128 since some units don't adhere to the 82 bytes + * especially for proprietary sentences. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NMEAP_MAX_SENTENCE_LENGTH 255 + +/** + * Max tokens in one sentence. 24 is enough for any standard sentence. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NMEAP_MAX_TOKENS 24 + +#endif /* CFG_NMEA_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_parser.h b/boards/sam3x-ek/templates/empty/cfg/cfg_parser.h new file mode 100644 index 00000000..67e091a5 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_parser.h @@ -0,0 +1,66 @@ +/** + * \file + * + * + * \brief Configuration file for parser module. + * + * \author Daniele Basile + */ + +#ifndef CFG_PARSER_H +#define CFG_PARSER_H + +/** + * Max number of arguments and results for each command + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_PARSER_MAX_ARGS 4 + +/** + * Max number of commands + * $WIZ$ type = "int" + * $WIZ$ min = 8 + */ +#define CONFIG_MAX_COMMANDS_NUMBER 16 + +/** + * Enable compatibility behaviour. + * + * Skip the first word from incoming commands. Don't enable in new projects. + * $WIZ$ type = "boolean" + */ +#define CONFIG_ENABLE_COMPAT_BEHAVIOUR 1 + +#endif /* CFG_PARSER_H */ + + + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_phase.h b/boards/sam3x-ek/templates/empty/cfg/cfg_phase.h new file mode 100644 index 00000000..1ed51076 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_phase.h @@ -0,0 +1,55 @@ +/** + * \file + * + * + * \brief Configuration file for phase module. + * + * \author Daniele Basile + */ + +#ifndef CFG_PHASE_H +#define CFG_PHASE_H + +/** + * Max value of the duty cycle on triac. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_TRIAC_MAX_DUTY 100 + +/** + * Max value of the triac power. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_TRIAC_MAX_POWER 100 + +#endif /* CFG_PHASE_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_pocketbus.h b/boards/sam3x-ek/templates/empty/cfg/cfg_pocketbus.h new file mode 100644 index 00000000..aa0b090b --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_pocketbus.h @@ -0,0 +1,71 @@ +/** + * \file + * + * + * \brief Configuration file for pocketbus module. + * + * \author Daniele Basile + */ + +#ifndef CFG_POCKETBUS_H +#define CFG_POCKETBUS_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define POCKETBUS_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define POCKETBUS_LOG_FORMAT LOG_FMT_TERSE + + +/** + *Buffer len for pockebus protocol. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_POCKETBUS_BUFLEN 128 + +/** + * Command replay timeout in milliseconds. + * $WIZ$ type = "int" + */ +#define CONFIG_POCKETBUS_CMD_REPLY_TIMEOUT 50 + +#endif /* CFG_POCKETBUS_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_proc.h b/boards/sam3x-ek/templates/empty/cfg/cfg_proc.h new file mode 100644 index 00000000..3c9439fb --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_proc.h @@ -0,0 +1,107 @@ +/** + * \file + * + * + * \brief Kernel configuration parameters + * + * \author Bernie Innocenti + */ + +#ifndef CFG_PROC_H +#define CFG_PROC_H + +/** + * Enable the multithreading kernel. + * + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_KERN 0 + +/** + * Kernel interrupt supervisor. WARNING: Experimental, still incomplete! + * $WIZ$ type = "boolean" + * $WIZ$ supports = "False" + */ +#define CONFIG_KERN_IRQ 0 + +/** + * Preemptive process scheduling. + * + * $WIZ$ type = "boolean" + * $WIZ$ conditional_deps = "timer" + */ +#define CONFIG_KERN_PREEMPT 0 + +/** + * Time sharing quantum (a prime number prevents interference effects) [ms]. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_KERN_QUANTUM 11 + +/** + * Priority-based scheduling policy. + * $WIZ$ type = "boolean" + */ +#define CONFIG_KERN_PRI 0 + +/** + * Dynamic memory allocation for processes. + * $WIZ$ type = "boolean" + * $WIZ$ conditional_deps = "heap" + */ +#define CONFIG_KERN_HEAP 0 + +/** + * Size of the dynamic memory pool used by processes. + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_KERN_HEAP_SIZE 2048L + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define KERN_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define KERN_LOG_FORMAT LOG_FMT_VERBOSE + +#endif /* CFG_PROC_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_pwm.h b/boards/sam3x-ek/templates/empty/cfg/cfg_pwm.h new file mode 100644 index 00000000..595189e6 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_pwm.h @@ -0,0 +1,56 @@ +/** + * \file + * + * + * \brief Configuration file for PWM module. + * + * \author Daniele Basile + */ + +#ifndef CFG_PWM_H +#define CFG_PWM_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define PWM_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define PWM_LOG_FORMAT LOG_FMT_VERBOSE + +#endif /* CFG_PWM_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_ramp.h b/boards/sam3x-ek/templates/empty/cfg/cfg_ramp.h new file mode 100644 index 00000000..162d2db2 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_ramp.h @@ -0,0 +1,115 @@ + /** + * \file + * + * + * \brief Configuration file Ramp algorithm module. + * + * \author Daniele Basile + */ + +#ifndef CFG_RAMP_H +#define CFG_RAMP_H + +/** + * Define whether the ramp will use floating point calculation within ramp_evaluate(). + * Otherwise, a less precise fixed point version will be used, which is faster on + * platforms which do no support floating point operations. + * + * \note Floating point operations will be always done within ramp_compute() to + * precalculate values, so there has to be at least a floating point emulation support. + * + * $WIZ$ type = "boolean" + */ +#define RAMP_USE_FLOATING_POINT 0 + + +#if !RAMP_USE_FLOATING_POINT + + /** + * Number of least-significant bits which are stripped away during ramp evaluation. + * This setting allows to specify larger ramps at the price of less precision. + * + * The maximum ramp size allowed is 2^(24 + RAMP_CLOCK_SHIFT_PRECISION), in clocks. + * For instance, using RAMP_CLOCK_SHIFT_PRECISION 1, and a 8x prescaler, the maximum + * length of a ramp is about 6.7 secs. Raising RAMP_CLOCK_SHIFT_PRECISION to 2 + * brings the maximum length to 13.4 secs, at the price of less precision. + * + * ramp_compute() will check that the length is below the maximum allowed through + * a runtime assertion. + * + * \note This macro is used only for the fixed-point version of the ramp. + * $WIZ$ type = "int" + * $WIZ$ min = 0 + * $WIZ$ max = 32 + */ + #define RAMP_CLOCK_SHIFT_PRECISION 2 +#endif + + +/** +* Negative pulse width for ramp. +* $WIZ$ type = "int" +* $WIZ$ min = 1 +*/ +#define RAMP_PULSE_WIDTH 50 + +/** + * Default ramp time (microsecs). + * $WIZ$ type = "int" + * $WIZ$ min = 1000 + */ +#define RAMP_DEF_TIME 6000000UL +/** + * Default ramp maxfreq (Hz). + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define RAMP_DEF_MAXFREQ 5000 +/** + * Default ramp minfreq (Hz). + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define RAMP_DEF_MINFREQ 200 +/** + * Default ramp powerrun (deciampere). + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define RAMP_DEF_POWERRUN 10 +/** + * Default ramp poweridle (Hz). + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define RAMP_DEF_POWERIDLE 1 + +#endif /* CFG_RAMP_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_random.h b/boards/sam3x-ek/templates/empty/cfg/cfg_random.h new file mode 100644 index 00000000..5e3afdff --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_random.h @@ -0,0 +1,65 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the "random" module + */ + +#ifndef CFG_RANDOM_H +#define CFG_RANDOM_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define RANDOM_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define RANDOM_LOG_FORMAT LOG_FMT_TERSE + +/** + * Random security level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "random_level" + */ +#define RANDOM_SECURITY_LEVEL RANDOM_SECURITY_MINIMUM + +#endif /* CFG_RANDOM_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_randpool.h b/boards/sam3x-ek/templates/empty/cfg/cfg_randpool.h new file mode 100644 index 00000000..3038363e --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_randpool.h @@ -0,0 +1,55 @@ +/** + * \file + * + * + * \brief Configuration file for randpool module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_RANDPOOL_H +#define CFG_RANDPOOL_H + + +/** + * Define a size, in byte, of entropy pool. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_SIZE_ENTROPY_POOL 64 + +/// Enable timer in randpool algo. $WIZ$ type = "boolean" +#define CONFIG_RANDPOOL_TIMER 1 + +#endif /* CFG_RANDPOOL_H */ + + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_sd.h b/boards/sam3x-ek/templates/empty/cfg/cfg_sd.h new file mode 100644 index 00000000..8c40f827 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_sd.h @@ -0,0 +1,75 @@ +/** + * \file + * + * + * \brief Configuration file Secure Digital module. + * + * + * \author Francesco Sacchi + */ + +#ifndef CFG_SD_H +#define CFG_SD_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define SD_LOG_LEVEL LOG_LVL_ERR + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define SD_LOG_FORMAT LOG_FMT_VERBOSE + + +/** + * Enable autoassignment of SD driver to disk drive number 0 of FatFs module. + * $WIZ$ type = "boolean" + * $WIZ$ conditional_deps = "fat" + */ +#define CONFIG_SD_AUTOASSIGN_FAT 1 + +/** + * Enable backward compatibility for sd_init(). + * If enabled, sd_init() will allocate internally an Sd context, + * otherwise sd_init() will need the context to be passed explicitly. + * + * $WIZ$ type = "boolean" + */ +#define CONFIG_SD_OLD_INIT 1 + +#endif /* CFG_SD_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_sem.h b/boards/sam3x-ek/templates/empty/cfg/cfg_sem.h new file mode 100644 index 00000000..51811da4 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_sem.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Kernel semaphores configuration parameters. + * + * \author Bernie Innocenti + */ + +#ifndef CFG_SEM_H +#define CFG_SEM_H + +/** + * Re-entrant mutual exclusion primitives. + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_KERN_SEMAPHORES 0 + +#endif /* CFG_SEM_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_ser.h b/boards/sam3x-ek/templates/empty/cfg/cfg_ser.h new file mode 100644 index 00000000..91a10e0b --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_ser.h @@ -0,0 +1,222 @@ +/** + * \file + * + * + * \brief Configuration file for serial module. + * + * \author Daniele Basile + */ + +#ifndef CFG_SER_H +#define CFG_SER_H + +/** + * Example of setting for serial port and + * spi port. + * Edit these define for your project. + */ + +/** + * Size of the outbound FIFO buffer for port 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_UART0_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for port 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_UART0_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for port 1 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lm3s or lpc2 or (at91 and not atmega8 and not atmega168 and not atmega32)" + */ +#define CONFIG_UART1_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for port 1 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lm3s or lpc2 or (at91 and not atmega8 and not atmega168 and not atmega32)" + */ +#define CONFIG_UART1_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for port 2 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lm3s or lpc2" + */ +#define CONFIG_UART2_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for port 2 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lm3s or lpc2" + */ +#define CONFIG_UART2_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for port 3 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lpc2" + */ +#define CONFIG_UART3_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for port 3 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "lpc2" + */ +#define CONFIG_UART3_RXBUFSIZE 32 + + +/** + * Size of the outbound FIFO buffer for SPI port [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for SPI port [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for SPI port 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "at91" + */ +#define CONFIG_SPI0_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for SPI port 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "at91" + */ +#define CONFIG_SPI0_RXBUFSIZE 32 + +/** + * Size of the outbound FIFO buffer for SPI port 1 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "at91" + */ +#define CONFIG_SPI1_TXBUFSIZE 32 + +/** + * Size of the inbound FIFO buffer for SPI port 1 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + * $WIZ$ supports = "at91" + */ +#define CONFIG_SPI1_RXBUFSIZE 32 + +/** + * SPI data order. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "ser_order_bit" + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_DATA_ORDER SER_MSB_FIRST + +/** + * SPI clock division factor. + * $WIZ$ type = "int" + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_CLOCK_DIV 16 + +/** + * SPI clock polarity: normal low or normal high. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "ser_spi_pol" + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_CLOCK_POL SPI_NORMAL_LOW + +/** + * SPI clock phase you can choose sample on first edge or + * sample on second clock edge. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "ser_spi_phase" + * $WIZ$ supports = "avr" + */ +#define CONFIG_SPI_CLOCK_PHASE SPI_SAMPLE_ON_FIRST_EDGE + +/** + * Default transmit timeout (ms). Set to -1 to disable timeout support. + * $WIZ$ type = "int" + * $WIZ$ min = -1 + */ +#define CONFIG_SER_TXTIMEOUT -1 + +/** + * Default receive timeout (ms). Set to -1 to disable timeout support. + * $WIZ$ type = "int" + * $WIZ$ min = -1 + */ +#define CONFIG_SER_RXTIMEOUT -1 + +/** + * Use RTS/CTS handshake. + * $WIZ$ type = "boolean" + * $WIZ$ supports = "False" + */ +#define CONFIG_SER_HWHANDSHAKE 0 + +/** + * Default baudrate for all serial ports (set to 0 to disable). + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_SER_DEFBAUDRATE 0UL + +/// Enable strobe pin for debugging serial interrupt. $WIZ$ type = "boolean" +#define CONFIG_SER_STROBE 0 + +#endif /* CFG_SER_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_signal.h b/boards/sam3x-ek/templates/empty/cfg/cfg_signal.h new file mode 100644 index 00000000..e48d86a6 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_signal.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Kernel signals configuration parameters + * + * \author Bernie Innocenti + */ + +#ifndef CFG_SIGNAL_H +#define CFG_SIGNAL_H + +/** + * Inter-process signals. + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_KERN_SIGNALS 0 + +#endif /* CFG_SIGNAL_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_spi_bitbang.h b/boards/sam3x-ek/templates/empty/cfg/cfg_spi_bitbang.h new file mode 100644 index 00000000..1a3a8a92 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_spi_bitbang.h @@ -0,0 +1,51 @@ +/** + * \file + * + * + * \brief Configuration file for SPI bitbang module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_SPI_BITBANG_H +#define CFG_SPI_BITBANG_H + +/** + * Set data order for emulated SPI. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "ordet_bit_list" + */ +#define CONFIG_SPI_DATAORDER SPI_LSB_FIRST + +#endif /* CFG_SPI_BITBANG_H */ + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_stepper.h b/boards/sam3x-ek/templates/empty/cfg/cfg_stepper.h new file mode 100644 index 00000000..2925fb66 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_stepper.h @@ -0,0 +1,69 @@ +/** + * \file + * + * + * \brief Configuration file for stepper motor module. + * + * \author Daniele Basile + */ + +#ifndef CFG_STEPPER_H +#define CFG_STEPPER_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define STEPPER_LOG_LEVEL LOG_LVL_INFO + +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define STEPPER_LOG_FORMAT LOG_FMT_TERSE + +/** + * Max number of the stepper motor. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_NUM_STEPPER_MOTORS 6 + +/** + * Max number of the timer usable on target to drive stepper motor. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_TC_STEPPER_MAX_NUM 6 + +#endif /* CFG_STEPPER_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_tas5706a.h b/boards/sam3x-ek/templates/empty/cfg/cfg_tas5706a.h new file mode 100644 index 00000000..32b3598f --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_tas5706a.h @@ -0,0 +1,50 @@ +/** + * \file + * + * + * \brief Configuration file for the TAS5706A module. + * + * \author Luca Ottaviano + */ + +#ifndef CFG_TAS5706A_H +#define CFG_TAS5706A_H + +/** + * Maximum output volume for TAS chip [dB]. + * + * $WIZ$ type = "int" + * $WIZ$ min = -100 + * $WIZ$ max = 24 + */ +#define CONFIG_TAS_MAX_VOL -39 + +#endif /* CFG_TAS5706A_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_tftp.h b/boards/sam3x-ek/templates/empty/cfg/cfg_tftp.h new file mode 100644 index 00000000..36cc622c --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_tftp.h @@ -0,0 +1,20 @@ +#ifndef CFG_TFTP_H +#define CFG_TFTP_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define TFTP_LOG_LEVEL LOG_LVL_WARN + +/** + * Module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define TFTP_LOG_FORMAT LOG_FMT_VERBOSE + +#endif /* CFG_TFTP_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_thermo.h b/boards/sam3x-ek/templates/empty/cfg/cfg_thermo.h new file mode 100644 index 00000000..2734f899 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_thermo.h @@ -0,0 +1,71 @@ +/** + * \file + * + * + * \brief Configuration file for thermo module. + * + * \author Daniele Basile + */ + +#ifndef CFG_THERMO_H +#define CFG_THERMO_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define CONFIG_THERMO_LOG_LEVEL LOG_LVL_ERR +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define CONFIG_THERMO_LOG_FORMAT LOG_FMT_TERSE + + +/** + * Interval at which thermo control is performed [ms]. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_THERMO_INTERVAL_MS 100 + +/** + * Number of different samples we interpolate over to get the hifi temperature. + * + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_THERMO_HIFI_NUM_SAMPLES 10 + +#endif /* CFG_THERMO_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_timer.h b/boards/sam3x-ek/templates/empty/cfg/cfg_timer.h new file mode 100644 index 00000000..b6d43b38 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_timer.h @@ -0,0 +1,67 @@ +/** + * \file + * + * + * \brief Configuration file for timer module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_TIMER_H +#define CFG_TIMER_H + +/** + * Hardware timer selection for drv/timer.c. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "timer_select" + */ +#define CONFIG_TIMER TIMER_DEFAULT + +/** + * Debug timer interrupt using a strobe pin. + * $WIZ$ type = "boolean" + */ +#define CONFIG_TIMER_STROBE 0 + +/** + * Enable asynchronous timers. + * $WIZ$ type = "boolean" + */ +#define CONFIG_TIMER_EVENTS 1 + +/** + * Support hi-res timer_usleep(). + * $WIZ$ type = "boolean" + */ +#define CONFIG_TIMER_UDELAY 1 + +#endif /* CFG_TIMER_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_usb.h b/boards/sam3x-ek/templates/empty/cfg/cfg_usb.h new file mode 100644 index 00000000..dbfd6fe1 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_usb.h @@ -0,0 +1,85 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the USB driver module + */ + +#ifndef CFG_USB_H +#define CFG_USB_H + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define USB_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define USB_LOG_FORMAT LOG_FMT_TERSE + +/** + * Size of the USB buffer used for endpoint transfers [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 2 + */ +#define CONFIG_USB_BUFSIZE 64 + +/** + * Maximum number of USB device interfaces (default = 1). + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_USB_INTERFACE_MAX 1 + +/** + * Maximum number of allocated endpoints (0 = auto). + * $WIZ$ type = "int" + * $WIZ$ min = 0 + */ +#define CONFIG_USB_EP_MAX 0 + +/** + * Maximum packet size of the control endpoint 0 [bytes]. + * $WIZ$ type = "int" + * $WIZ$ min = 8 + */ +#define CONFIG_EP0_MAX_SIZE 8 + +#endif /* CFG_USB_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_usbkbd.h b/boards/sam3x-ek/templates/empty/cfg/cfg_usbkbd.h new file mode 100644 index 00000000..5b6fb65a --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_usbkbd.h @@ -0,0 +1,78 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the usbkbd driver module + */ + +#ifndef CFG_USBKBD_H +#define CFG_USBKBD_H + +/** + * Enable the usbkbd module. + * + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_USBKBD 0 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define USB_KEYBOARD_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define USB_KEYBOARD_LOG_FORMAT LOG_FMT_TERSE + +/** + * USB vendor ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_KEYBOARD_VENDOR_ID 0x046d + +/** + * USB product ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_KEYBOARD_PRODUCT_ID 0xffff + +#endif /* CFG_USB_KEYBOARD_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_usbmouse.h b/boards/sam3x-ek/templates/empty/cfg/cfg_usbmouse.h new file mode 100644 index 00000000..73143284 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_usbmouse.h @@ -0,0 +1,78 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the usbmouse driver module + */ + +#ifndef CFG_USBMOUSE_H +#define CFG_USBMOUSE_H + +/** + * Enable the usbmouse module. + * + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_USBMOUSE 0 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define USB_MOUSE_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define USB_MOUSE_LOG_FORMAT LOG_FMT_TERSE + +/** + * USB vendor ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_MOUSE_VENDOR_ID 0xffff + +/** + * USB product ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_MOUSE_PRODUCT_ID 0x0000 + +#endif /* CFG_USBMOUSE_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_usbser.h b/boards/sam3x-ek/templates/empty/cfg/cfg_usbser.h new file mode 100644 index 00000000..1fa44e73 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_usbser.h @@ -0,0 +1,78 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief Configuration file for the USB serial driver module + */ + +#ifndef CFG_USBSER_H +#define CFG_USBSER_H + +/** + * Enable the usb-serial module. + * + * $WIZ$ type = "autoenabled" + */ +#define CONFIG_USBSER 0 + +/** + * Module logging level. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define USB_SERIAL_LOG_LEVEL LOG_LVL_INFO + +/** + * module logging format. + * + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define USB_SERIAL_LOG_FORMAT LOG_FMT_TERSE + +/** + * USB vendor ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_SERIAL_VENDOR_ID 0x05f9 + +/** + * USB product ID (please change this in your project, using a valid ID number!). + * + * $WIZ$ type = "hex" + */ +#define USB_SERIAL_PRODUCT_ID 0xffff + +#endif /* CFG_USBSER_H */ diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_wdt.h b/boards/sam3x-ek/templates/empty/cfg/cfg_wdt.h new file mode 100644 index 00000000..b53b327e --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_wdt.h @@ -0,0 +1,47 @@ +/** + * \file + * + * + * \brief Configuration file for watchdog module. + * + * + * \author Daniele Basile + */ + +#ifndef CFG_WDT_H +#define CFG_WDT_H + +/// Enable watchdog timer. $WIZ$ type = "autoenabled" +#define CONFIG_WATCHDOG 0 + +#endif /* CFG_WDT_H */ + + diff --git a/boards/sam3x-ek/templates/empty/cfg/cfg_xmodem.h b/boards/sam3x-ek/templates/empty/cfg/cfg_xmodem.h new file mode 100644 index 00000000..38db7359 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/cfg/cfg_xmodem.h @@ -0,0 +1,79 @@ +/** + * \file + * + * + * \brief Configuration file for xmodem module. + * + * \author Daniele Basile + */ + +#ifndef CFG_XMODEM_H +#define CFG_XMODEM_H + +/** + * Module logging level. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_level" + */ +#define CONFIG_XMODEM_LOG_LEVEL LOG_LVL_ERR +/** + * Module logging format. + * $WIZ$ type = "enum" + * $WIZ$ value_list = "log_format" + */ +#define CONFIG_XMODEM_LOG_FORMAT LOG_FMT_TERSE + + +/// Enable Rx. $WIZ$ type = "boolean" +#define CONFIG_XMODEM_RECV 1 + +/// Enable TX. $WIZ$ type = "boolean" +#define CONFIG_XMODEM_SEND 1 + +/// Allow a Rx/Tx of 1Kbyte block. $WIZ$ type = "boolean" +#define CONFIG_XMODEM_1KCRC 1 + +/** + * Max retries before giving up. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_XMODEM_MAXRETRIES 15 + +/** + * Max retries before switching to BCC. + * $WIZ$ type = "int" + * $WIZ$ min = 1 + */ +#define CONFIG_XMODEM_MAXCRCRETRIES 7 + +#endif /* CFG_XMODEM_H */ + diff --git a/boards/sam3x-ek/templates/empty/empty.mk b/boards/sam3x-ek/templates/empty/empty.mk new file mode 100644 index 00000000..cfdfe285 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/empty.mk @@ -0,0 +1,87 @@ +# +# Wizard autogenerated makefile. +# DO NOT EDIT, use the empty_user.mk file instead. +# + +# Constants automatically defined by the selected modules +empty_DEBUG = 1 + +# Our target application +TRG += empty + +empty_PREFIX = "arm-none-eabi-" + +empty_SUFFIX = "" + +empty_SRC_PATH = boards/sam3x-ek/templates/empty + +empty_HW_PATH = boards/sam3x-ek + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_CSRC INSTEAD! +empty_WIZARD_CSRC = \ + bertos/drv/lcd_hx8347.c \ + bertos/mware/event.c \ + bertos/cpu/cortex-m3/drv/timer_cm3.c \ + bertos/mware/formatwr.c \ + bertos/drv/timer.c \ + bertos/mware/hex.c \ + # + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_PCSRC INSTEAD! +empty_WIZARD_PCSRC = \ + \ + # + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_CPPASRC INSTEAD! +empty_WIZARD_CPPASRC = \ + \ + # + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_CXXSRC INSTEAD! +empty_WIZARD_CXXSRC = \ + \ + # + +# Files automatically generated by the wizard. DO NOT EDIT, USE empty_USER_ASRC INSTEAD! +empty_WIZARD_ASRC = \ + \ + # + +empty_CPPFLAGS = -D'CPU_FREQ=(72000000UL)' -D'ARCH=(ARCH_DEFAULT)' -D'WIZ_AUTOGEN' -I$(empty_HW_PATH) -I$(empty_SRC_PATH) $(empty_CPU_CPPFLAGS) $(empty_USER_CPPFLAGS) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_LDFLAGS = $(empty_CPU_LDFLAGS) $(empty_WIZARD_LDFLAGS) $(empty_USER_LDFLAGS) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CPPAFLAGS = $(empty_CPU_CPPAFLAGS) $(empty_WIZARD_CPPAFLAGS) $(empty_USER_CPPAFLAGS) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CSRC = $(empty_CPU_CSRC) $(empty_WIZARD_CSRC) $(empty_USER_CSRC) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_PCSRC = $(empty_CPU_PCSRC) $(empty_WIZARD_PCSRC) $(empty_USER_PCSRC) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CPPASRC = $(empty_CPU_CPPASRC) $(empty_WIZARD_CPPASRC) $(empty_USER_CPPASRC) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CXXSRC = $(empty_CPU_CXXSRC) $(empty_WIZARD_CXXSRC) $(empty_USER_CXXSRC) + +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_ASRC = $(empty_CPU_ASRC) $(empty_WIZARD_ASRC) $(empty_USER_ASRC) + +# CPU specific flags and options, defined in the CPU definition files. +# Automatically generated by the wizard. PLEASE DO NOT EDIT! +empty_CPU_CPPASRC = bertos/cpu/cortex-m3/hw/crt_cm3.S bertos/cpu/cortex-m3/hw/vectors_cm3.S +empty_CPU_CPPAFLAGS = -g -gdwarf-2 -mthumb -mno-thumb-interwork +empty_CPU_CPPFLAGS = -O0 -g3 -gdwarf-2 -mthumb -mno-thumb-interwork -fno-strict-aliasing -fwrapv -fverbose-asm -Ibertos/cpu/cortex-m3/ -D__ARM_SAM3X8__ +empty_CPU_CSRC = bertos/cpu/cortex-m3/hw/init_cm3.c bertos/cpu/cortex-m3/drv/irq_cm3.c bertos/cpu/cortex-m3/drv/clock_sam3.c +empty_PROGRAMMER_CPU = sam3 +empty_STOPFLASH_SCRIPT = bertos/prg_scripts/arm/stopopenocd.sh +empty_CPU = cortex-m3 +empty_STOPDEBUG_SCRIPT = bertos/prg_scripts/arm/stopopenocd.sh +empty_DEBUG_SCRIPT = bertos/prg_scripts/arm/debug.sh +empty_CPU_LDFLAGS = -mthumb -mno-thumb-interwork -nostartfiles -Wl,--no-warn-mismatch -Wl,-dT bertos/cpu/cortex-m3/scripts/sam3x8_rom.ld +empty_FLASH_SCRIPT = bertos/prg_scripts/arm/flash-sam3.sh + +include $(empty_SRC_PATH)/empty_user.mk diff --git a/boards/sam3x-ek/templates/empty/empty_user.mk b/boards/sam3x-ek/templates/empty/empty_user.mk new file mode 100644 index 00000000..4c8ed7ef --- /dev/null +++ b/boards/sam3x-ek/templates/empty/empty_user.mk @@ -0,0 +1,43 @@ +# +# User makefile. +# Edit this file to change compiler options and related stuff. +# + +# Programmer interface configuration, see http://dev.bertos.org/wiki/ProgrammerInterface for help +empty_PROGRAMMER_TYPE = none +empty_PROGRAMMER_PORT = none + +# Files included by the user. +empty_USER_CSRC = \ + $(empty_SRC_PATH)/main.c \ + # + +# Files included by the user. +empty_USER_PCSRC = \ + # + +# Files included by the user. +empty_USER_CPPASRC = \ + # + +# Files included by the user. +empty_USER_CXXSRC = \ + # + +# Files included by the user. +empty_USER_ASRC = \ + # + +# Flags included by the user. +empty_USER_LDFLAGS = \ + # + +# Flags included by the user. +empty_USER_CPPAFLAGS = \ + # + +# Flags included by the user. +empty_USER_CPPFLAGS = \ + -fno-strict-aliasing \ + -fwrapv \ + # diff --git a/boards/sam3x-ek/templates/empty/main.c b/boards/sam3x-ek/templates/empty/main.c new file mode 100644 index 00000000..d726f355 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/main.c @@ -0,0 +1,32 @@ +// Empty main.c file generated by the wizard +#include +#include +#include +#include +#include + +static void init(void) +{ + kdbg_init(); + + IRQ_ENABLE; + + timer_init(); + LED_INIT(); +} + +int main(void) +{ + init(); + + LED_ON(LED_RED); + + for (;;) + { + kprintf("Hello world!\n"); + timer_delay(500); + } + + return 0; +} + diff --git a/boards/sam3x-ek/templates/empty/project.bertos b/boards/sam3x-ek/templates/empty/project.bertos new file mode 100644 index 00000000..b699e246 --- /dev/null +++ b/boards/sam3x-ek/templates/empty/project.bertos @@ -0,0 +1,63 @@ +(dp0 +S'BERTOS_PATH' +p1 +S'../../../..' +p2 +sS'SELECTED_FREQ' +p3 +V72000000 +p4 +sS'WIZARD_VERSION' +p5 +I4 +sS'PROJECT_NAME' +p6 +Vempty +p7 +sS'TOOLCHAIN' +p8 +(dp9 +S'path' +p10 +Varm-none-eabi-gcc +p11 +ssS'PROJECT_SRC_PATH_FROM_MAKEFILE' +p12 +Vboards/sam3x-ek/templates/empty +p13 +sS'ENABLED_MODULES' +p14 +(lp15 +S'debug' +p16 +aS'timer' +p17 +aS'formatwr' +p18 +aS'lcd_hx8347' +p19 +asS'CPU_NAME' +p20 +VSAM3X8 +p21 +sS'PROJECT_HW_PATH' +p22 +S'../..' +p23 +sS'PROJECT_SRC_PATH' +p24 +S'.' +p25 +sS'PRESET' +p26 +I01 +sS'PROJECT_HW_PATH_FROM_MAKEFILE' +p27 +Vboards/sam3x-ek +p28 +sS'OUTPUT' +p29 +(lp30 +S'codelite' +p31 +as. \ No newline at end of file -- 2.25.1