From dbcd7ddef42c71d029c2cd662f17794be52be3fd Mon Sep 17 00:00:00 2001 From: whowechina Date: Wed, 15 Nov 2023 21:57:12 +0800 Subject: [PATCH] Light support both RGB and regular LED --- Production/Firmware/aic_pico.uf2 | Bin 111616 -> 113664 bytes firmware/aic_pico.uf2 | Bin 113152 -> 0 bytes firmware/src/CMakeLists.txt | 2 +- firmware/src/board_defs.h | 1 + firmware/src/{rgb.c => light.c} | 56 +++++++++++++++++++++---------- firmware/src/{rgb.h => light.h} | 10 +++--- firmware/src/main.c | 8 ++--- 7 files changed, 49 insertions(+), 28 deletions(-) delete mode 100644 firmware/aic_pico.uf2 rename firmware/src/{rgb.c => light.c} (78%) rename firmware/src/{rgb.h => light.h} (64%) diff --git a/Production/Firmware/aic_pico.uf2 b/Production/Firmware/aic_pico.uf2 index 2611edf1de9511e2c456f0d8736f792aee1e81ce..1f4055b7c62a619671885e7b6e5eda9e64d7e1bf 100644 GIT binary patch delta 19555 zcmb7s33yXg+VD9yOVhL|p)HuEDcmG2bfcsTP?mv^mP^_cD2rJ3P|yijC7{E!2($uX zMa04>+(JG ze$_s|z5}UgdZ$jpGz8KM3`d_i3~3qUU%U5?#Bt~9t6xYhK5^t($`5pi1=6VDG?^_Q zQE>rY8%~2%ZQEP#=dj^Yio%Imh47i1{x-TLt*Bky7F~w)EQ%2pInh^vY#H*qi6$*qH~qPfET65xQ?v3z9tV%M)BGw zrw>IaYe=WwcF+=gQPN6Sg@%9SD8546cxaXsB*I`N5cC?rLhq9|6-Iq^B}l6fmV1Gu z0Z5zVLbaEaD~4;;{X=F&kJneHBU}(AME9Sz^mZ!QD50vC)G0Kz*=9-^yA&JXB)VKTyHxPp7!2lL#YS3 zC}R|A;&58xY$T+4cUTg>v~kn98%sY^D9sa*e)>-ul|}8!Kzq%Lt8sx+U$oeXgrR`= zughv<9zuF*+^;E3Qx$sxd z&2GjRWmOm?PJA4L9nX3$ci+#+0dG-?Txj!r-c9X=yS!d?TOPXueEL+c&MJACIf0K$ zg#Q6sNjfzp8mm;eJRmv59K=l$p}`xSC4AwD7WVZ<3B`R#*ycvULJtzU`iGRUh!N1B z9>rOapzcdFsB9r`*Ft1dZ_7pA9;R1Wu^{!t!ml2Fk)ZL$l+d?cAi8rv+Ny3BN*Ht# zJW1nDrz|*c9UFsM;}QEih@QJ8NPUEs0SEz4Khf&#`GdE>$_R(u`L=>t)Q{jrw$|_R zU))&uc7S^3oqm*V=|na5fEAQpM^ltPXNrK8T?_Bulbng@Au;lsfpqxHI321k}d zXT|wR<_vq3u&P%(TU%msD24CA26wrXAUy9SXJU25O3&jzsq1OccY}ZHRzVd0?D?p> zP9JM6!Ac?7lkWH@NLLL(eI*yMH}jxf4n=G+NVNdokL<)q7)iCiM%+VmhM?w4p&Sa3 zx=jMX6eT>?C%K?*@8C44WPIEQBjN|^40C7Yg2?G0atuUTreij+KH;5JW~>$&Gd?CZ zND^g@>?Eu@m7VFSGfbO3qr?Q&<-%=umSbvJzTH?29h8fKxF)OBY}{xMHX5B-j(j^K z)Og80^;%{@F7c>G@~4jC%e33NOX&|}r6`cmFC*22jZd9I^`!bXf*w@&YDjMeco^Q( zvk+^C_GY$~p&jt9w5i*YfjjC{w=)9cC3W#Srg{Q-HhyvHFt-VXdL)B%b^|B1-lp~p z(CdPyNZsLKb+dsBVH1bP&mP3aEN8q;>i__4p7juGqAv4kkHN9ZQKvmP9c3_`3R{!q z@+EK2FM}5Y-lCEf52ad=J&B_nuR~k$_MGxkC+r4=tWczGld+OgX^FRItyf~x*lF38 z7^J3U6erjepKQg#$8L-=z(W%}tdaR6J`R01!9vv_J}5=0ke}s2*>Nu198l&i-ITE3 zVy@;Ol*-P@tu6$Ijr8DVT!6>FVEN^Wl9da!?qsN+=s`w^g%i@_ShzSy%7^P1?;v?_ z`0(1F2II4Tg7HBvEOf`T`i&{HmvUc$qOG9hSpYgjT!3fm8Kgc5&x-)+HgC^EUIu9I zbW_c`e0ef>-|CjyWY%OyQng%oZ;+PVfikKwdX3hjmWuaT3erjG37rZD37p#leIig6loe%@=wqcSRh7g+KbhI9 zDvk4{(t6_{H3aflNDc9&l6!|hN)36#d#SkDP`51>{0q-AfJ?Dxw0bopssNscg5B_J z1o#-dc?6!v0R9R2r(YvyG?SR;2gom)Q6c&DasHMNCu#|wX|wc&;NujfOn7{NWNLG? z>jvafGw0Piie$o?fpN&Imld%{CafAD8??*gsB*stFpWa&+1JQ5?I=w!fTou`-a6f? z5L8~Im!a5T#HZ*&J*7m@y5;&|yb`%!>662_xvg)aGEit2?m{m+%)+pm>8Il zM7TJRg4Na%KUhi|r1cD;D6Q$lM zbwMQsl9>@eEPxuo>qSUtd!IuP_pf^xA;}$s7?gq%(W51CjyaBF$?en87}WVgm(p&t zZz`#q6{!^)N{(|thrFeZ*Q!DN=Us&0gx*Cb8)E327 z&QA3f92+JgT~_&K04-!5qB4XVTTq1El})s&sOE*rYrkR;yXwZTaLQKAC==J&y~+ab z)Ednwx#FW$`6$7>q-bhMvNYOZGbhLX22wHhDYoC#mLxk?n5Rjn*rvsfv}gIyq8-Un zid5)BD&n-}c}3%G@zP|+Vsm_K0iy<{Nhlw6Tha$IZ~b&An}v!X6lKror{YJG=R zCOp%}LM?NsR;sU-((g;1OKA_;r8eFlHu0jcvDqOcQ&Z5$67#s#3=ANQ)xlcaozi^e z%4aOUbV^~aEVL(CcUV5Y_+_^Sp6F6c_nGc~7U3P1YoC4(T`WWfI|Z6`ISdN4X}iZG zR?fg`0AMME-BPv8Y=vj-4*0Rc%MO4hNH@^}s9X*}1ALlFf(o`F)Z3P1o53}48rwCl z8Gi5KW^;!)WQ6`1ChKSv8ePgQ;k0)baUJhAar3#9dvHNIw7nVqGCh6ber#|VPneVC zhbpli8ED>+{@7vJUv*CL&HayZFT?!5gL44mfO*owJxw|2aub?QEbE*pv|ZyU`x!7e zY=;T^i~TNRvb>2i+N20iKFk?xDtLlWdTeB^%^XTvGaVa8&WRm`3?Om?-diytu4|&> zdCSmCtGMQ6^U%IiC=0u=QCozkDyE?vjjM>OaV&8hUuOCK;y11m?ulg|ndfpb=0%*% zypnTjo>+GI)IrM)m&A#h@WDcRjr~fu!ltd0w1$-t+Ji!~vk{_dIY9|*)6~<6Ax)Ed zHk(dteCx4Cc86=+gD;bRyJ# zL!O0Pt{YFo(3ePxQjPc+`EBY<`A$y}w%y?)H(^RPw7aK z2_>F#+eqiv-MKZ3fY2>6Vbo~+DOoWpdD45m%VzX;&hoJz%HW=NyL#3mzvI znta@{*;$-S==XGT$2a-&cL(xi!VjQWAv(Aj#-CoAx&)~$z0^22JW0mka}pyMu*jI;SuwbBCH_!r8&q-7pwIUp~XTup0uLMS|Ho z7g}NyIQmWjOv~Ot>eacB9*5Yv*Zq^9KFB`}=_qKOPH3sy>JVxKyehymLH-U%Tj9AB z03~4dl2s=B!*j`YsWcfoLMG8^{E?#(MNTt%uA&e{3lEU?^pUCS2E9FhA6$RyZ&3do z&w1M?rOA$F)Ybj-Sc_{Sx&T&WdiP~$6hC|OtMRyJEQHO};+tf0=Ez~0gAfF? zciq4BxDTTgN-lw{hq>#;%(ypa{ODs`NLJ-!;WOmvoU{;oq8cAFIcSi4sJ3WubV#{B zcU8d7hQgpWDRX7Qoq-~5F;#ZE(m0}9axeq1_mJ+Kj9Mu~L1HSbVjxmz6!ilL&?i>F z`{xiTbUOVlJdXebqliYB2I_qPc@Ds9fHaLXC%j7`>M+b#27%7Eke?2Dg#cy%D?l9N zw?O_|-y&1KOtJWd9SS;d&1&TMuDlsC9TDlgFaEv^$;JlrwO z=awWDqNGiffDQ=!(pki1vn^Z-%uF}CDeaGG!sD-HIXj^i_dj|ll zb!`%>{3Drg-nXc*X2bds79>L37aYgUfuXLWEy+pVxAJDMB{;p)I@*fsf+TLzm$TLu`t z1cvG+7*%ecA>#|u*~5KuSa>$Tyg*}jwo`(XSUC`-gdMqLYe8mg7o9?zW#$Ut5%SvT z5q__Y5P5AH?C4ReINM;a5LT_xf}@XoP*BLOIY-SD9*hzDM5|1Y4;Ja-U5fN|F2au2 z;xaOMe41h60E@ViXqd%Is$mZ*Yr1ccDw@Td%mC4&g?szRw()tP!H}q?#taXdFIo_K zb74|U`?HaKHIM!0v~y;>kv9f?X!mxDRye!Acne-*&U`OdDWrtTo9Y z6RO;v9?s2x-%=p|UN`+6PNo%Rl+AK40gvEu(t>9!!sWNSvtg=~orYNHTQE}x5Sy+Z znhk=ySO6Aa2fT~@7O>$oU3^e*zp<$Y$=ijMgq>tBpact`a?l?iLMthR_aN#5NWTJk z74UQbEJ{J@kaLL25~B1DRYCp=>xNKaC0}D?PJUL1JO)pOW2kf~_Vf9ro z_O!Ouw@Ux)?P-JkM5eQyleV_D-({=vRaiz=PD#OUklHEZLQHB6{s=ILB4B&(Kf8B> zx)sR?DbCV;T@@@)*ur0M>>R72l7~4zsO*MpMBPvcj<(XPVSo3bh@DR|^=1z3j}r2| zY)y1%w*tdvc8^bS=Ur5BvfQG>F7k*aiHY`-1C|k@cr6tRX34|fkZ#LF!WOf*olGwt zi|;1ui<9wFHH!vk+hCqlsWG0>e6A_8y--(bd|~}tTL@cPh_91Hr7)Hbl8vQPLuw~v_|=A% zA6hDt)1@r_iTu5^Xkw>(5e$a0K6W2LnzBm-c7Jtmam?xdJ2wj^RVL_;Xdoiwjqdr} z>!m?;hs-To6=FhE3&b8NE5J$Q>#}6sT$ngKGvMvH?3Rugf7#nJcL1g5xp21W>Q^a* zon44?$)eeM{2qB^c8Z)DsPQfG?CiS&`;T{vV{3K+K1jZvoviBwdMN-)+^|JFf&;3q ze%S~MP&HpAY`G=x0FeqaJSZ(4wR6F31)*JSFmvh>1?)SK z#`18dOjH#yp~2)TsQ8PAejWx z);IvgX@tl!waL)lR+L`gs^TQ+dRJ6>`X$(xQI$XsC$vF7rw~kiBzs{QgZs#)h1$e) zsB{kI{T%=-q>llkuwBRc?K)O$*OrCVgsoVrjD|vY6l@BOB|9q&qCUkgir|(CKwfNO ziYJhHix&n6uM~x2%VI!SS|4IbRIA0+mqO|CaA`umU!eR5ftK4fH^E-8Z#4vPjeC9W22^6UO`H8XqCo>KdZIZ=`Yyu=R^TO7B}P()2+wulp)kibRnWrA3apYt?O1 z2V$SJNG|SMi%mx@=rh7PG|b8gWRl~-0F`xOnH=WA8qjhnfE4E2u4%AU*M<>ODuFXH zb06Ky{QyGccTg^|En2HYO=}me-DT-ho z+8NR!VUl0-NfDY?El3TDQg;J&soQ?|NxfskYs!)s@Qd5^m!DQVjg8yQgnclT0fO9v zl_7#ewNcFdK`^wlS}lzSceTlE+gmY0L=zlaf3MR9yZwv4Q%;Cz!gN2;=^~<}WfQR9925)>C8`}_V{C@ft-;dA#A0uS zk~(p8)QjuYLFu+&J!l9s{H$k0u-*npJAz10iiz)llAXa4s6NwQ9WFYA$JmygfK(qw zBB}nP%K<=Y3L-rx7N7}A z4h2h~`dokYxe?V50n*_x5>Xu!OK=!UpADBL%=eR+A3@?-Ksr(%P~s0_364O?QBn1~ z{nhV|sD2bW(PNK`Y;aO6!7(85Qjqu`#l&BNl9n)WqG}b_YjMW29l#ECO-lu%rvntc zO)^g`W=wCBohOWeJ|E1o$S>5Q2%$~@@sm&Ruli1RUlp@G3F7|ACy?*lH(`mt`jUw1 ze}d|*V%gph%hp;Df4u^!?YXcQ4sz82TzH#&-8`a9#!--@_R|ogkStRq!)_^?k zgjtc6Ga$s-Fdw3NPfX%$H97zG2r~8UwP9UW`6XE;mc(<`0Ei0-+aV_PL3n|^u3y%w zKC3t@Y1PbZpG98l7{Sz(lP@|lS!%j9Hb>J{akPAoahA*?#~f=Yu8SrZxWRFf$bOiRS_7LVDso zRYoX1BoNi-F>yiR+aEycmI>rf7ak(|Pqs_V zFvbLg{kvF>PZp2(&Kg-QJCie}if2{9-?qGMKngc4<}QyepFdA%1aX686(DnFNpxffXN!(DqZ%_VXap zWwDT-L&+Dx5-`>}fAw_{)xQ9wi(w?9>JkU!MJW9;SbAMd{L5lyz)8OU5(42$ouZ|X zcGt)iax78Z6w|pUK=%o{Yia z?RnZeW(^wiLnl4=z6_p8hcT!)o1E)1#r^2T4fpFLo%HOP^X$70W73VS$^~9mH#S7s z<^?w@z7Ai!c@7BBi*pDrBc_2=eqx9n_7FLD!-O}GpKgpH>`ivG#QQT4kpYoUx`P#h z$aKn1_vj?TKJwd}xkG4v@GM`2hEr9p(knDX^{v?2H>=}1=)woK0s}ha+%m z>NW&-4=IhMzSYRXV@RH`QKUz2OmvX%59GLDWEPAep9u2^`(v4t=%ENDX_3Tc#vK|Y zEbql|{|)%%+%d$j0#wE*Dg7{diI&{=eK%xR-pSO>82DdE!a}ph>#c)piu0uEHmyC@ z7F(jV2ecRvcOQ3_XEnejJgKWr-(XafKEZUB(`ESgkSBv1`5iblF(Q_+Ra6&^Xqw(}$~n{juBkRhbqsON z?BI?VN&hdS2-|DI>&e{SdqURUufpP}>76o#R;>WI1JD5O?uF;C*@?G3pN5-SvtS=; zzUxC9Vf%BKDQ;5UUlHPv@TgyhM%JdRBrexm;Aib-`Zgj9xxZfh}=C-6`&ed-!b%?7wKm zyN6(1Qcy*07aSKC`m19sX^Z^=k$iBQP9>g zYT(wNb*O_jGUU7GM&s*DR?ldy|r2lB85{*ZUQK6@LOAB(@I9c3h=xCc*wyhQES&Vo#5$7b9 z!{$1R>I`q>q665NYC^)yLB28(b0Kl__xO#wM`Yae$z2+>AEqJjnLvlJ8C};jPOdXR z9?(ES;voM)A}*|@tkF5IcNSa#nhh`yz}YseOa|^{k*8;RKMa>Bb(|WwO1yA<12G1- zMfFI~dG`TTir1y_^o;300B=BD5IoJ0I?SyurpEZ%gMki$EB?-QznZf-dNMczF6r26 zf<-~EDa8? z1b7vT!|NA%52+bGAK2k@9simJujN@SE@j}}NR<``XD)asuQK592^vJk2`%1;ukv~w z&YgT1df=ZrE4Vc^s0;n&`|f-j-T5qsKI~~IndM9E8>mfJUqbBHAlx3vRr+!t=bzGv zVk%*u-%0zBxCQ92j+r&UzpulKy+&iJ)@Oa)S<3A; z&M#`>-Y72O>hqKAG1VVxR&fIwOqOu{;V(^iRl2B+p?wk<98Az+Zo^j;pSoVI!C6eF zh5J{{XHH5G>*p8sYlf~rUfs7K0RdS@%%%@&l9|2LlA_P*P{tY8JkFYDHk!~GjkjlW z|0y{8^Gk?~had>fKoC%yi1iOLj?Dz1zZc;zFDcc@62Pr{_G(_|^f1ot=}=ykcym3VVBEfbMF@ zMXpWVlhESgAARYEyT7VA0^XDq0heLbZx(BGW|$lJ8H{(~tb*V?Aq$5Od**O9ZlV*9 z7IWR(J5BQz+}lH)le$YeKhMj3m@VkuZGamzMSs!MPnhIDnW!_fo0cX(ll`bK4fr1g z{s~2tZ3;+6%PL`(-41n!ciT8L8dg>iKZ)lM-02Pc!IHg9j$W)rY-RPf)~75(UArs> z*B-;srMoOquBUv@G#5S2V_KcWv3g0= zHNcZzrtfk5ict|gtVujGxH1YC^K3fK9CC4xT?1bxxv;*(f`v|gQ92%}dK5BoD*b8) z3y<)RrDOl}n0M!j`>-qNI4^$V;HW1mpEy$g$|-W{fF=L4^ID$G#3mR6Rz88#Y`W%C zN9qq+;w~Yh86|6*PqAxOJ?bYcw(RB$k0s zZ`A7@p>da2jTenK^Q7})=NEmT$%QU>aDe|N8)n9A4o<|Y_;ES-A?BF@{zMLDhh7{= z>T0tXK7GzI^|OBMzEkTdJ>L>M;jq8u9~QNI{z?wDu?cIE?j9)Nb|uf{PH0Mta5L*D zDo%pA$6!whKi7muXS_2YcEK4q|Lk(Cdej&&(*|ED^~3}G^Cp~RI1+(=aG+NIRn2!e z$=v10D7wC$+BPuYOvJij!F~t}vqN-B_^(YkS@*8TWE)%azZ#om(exafEVYSy63%_; zZMEhKp3TD!{1pF09-gS}hk*$`eL}83yI~4h?7Jo8zpyJZ=#&VrdO5B22<3hrH>QBfCP6>XO_&Pxlpt9Kx%LaZFZF`6jNe zI10(&Qi!|f@xIC0LmX>+lygF@!yfNvvaZ}m&$$Um3;mb zY)mNc3tt58ZI?ognf#h5_@VH+^aXzeybuuqQ?Le4;D4Tiv-pcsuns5iznO|Nm|K0k zV=8_);HH@ox=*F5nIm*BjnLhUi?vm-`OtR^IKuU5*nB8K!rFd1m0o{}pJc%t^RkEE zX2Ij})BKy3h~+^UjtPZC)yk7A70{6_HMx6!&wp*fBQqS0?!^4@9mw1lD2k5DR@74;hD#tOQD==QzM!U^l=kPS1wMN)wUW8q&)NrNv zFuuvRm*Vgpn1mC4&(I^mU_kI!N-1_(DE{t_@Ie_ZoE^cdB7)a!icpT*L#H9UYH2cFYrK0&1gCj;2CrX$-x9Tx9dL5yY>P#4X(cO=umfghlFP;ik~KVA5z={Ogd`P|(PCWAtU1ST zSPV1n;6-*`wK{^~Vm!Vuz5m}aL`G+uyiA4^$Y^)>Jos;L_|m0#pGepHA}BA#ITppg zsYO+xRAFPvATKl6waDEwyYJsg(A(C*@#V|0jz7B`tNG2#v6;U@Q&sRIePu{sZAu5< z1bTr4BXn9E7Q%9D;#oV+<}c7%Wp?bplf}E&h>g`{$AyWD7B5-4Z21cN%F0z0%JL2C ze!F4i13X)aPxEb|IIa@w_jx5QJ?w%D3XUv-){%(L*Jt*e#-fFy*XYa$u0&R1h zSn&7mqlFIKs5WWf!!>|AclnAtNt(Ri0NyGDZ>m!hItsrObzxRV*LN#^zB5xe=Tf8u~p!mU}u*A zmziiBz9o*s_o}F$9t=70_YqEf5HD4iuUWN@wcT6eT)7%eFDZikDksjA`~}JRSx%f% z8ZCuW6}Uw#i`EZ?lwl%@l5LZi5mv-7@P|;el!3TnkX!~=SFkJKS&!TlQU-e*hwFX7-@hoe6<6Fqe6sb0m4#QlkN?<9LE zMl~%1ER^y4N0|vQm&8hD<9G=2ZS;PY_Vj0hxJFk&fEYvK9dfKNl-y+yR9`fsZLC)_J=gkB1| z(dU1_t^H33>Wz#4BM~1BigzBE(&w)Q_`hguTnsIBD^#LVirij@!-spc$QrP*n9jz< z{HBfgfVQ#2{|`Z~Z>z7Z4x~R5erIuZ@R`-vkm!QEyB~C{d~kKuy{p-hd2?A)@Y^Z6 zgxeMoVb!>zc2^xzUwag(-v^-S7I-!QWCMHw@8GpK84f|?4g_BNIk3psfX@`?gsuA5s|^}hABPm zgU&%guz^1S2#*4+X@utif29ME{t`AhJ^^?GfWH44HbQ}GtDn6Q&~KPKwTh#pt*7dB({@Rkmwu4mxmXn1x2ECrcvcJM!LhP`P0R+#*S8+Cnz z$+zOB#K*k-204O>q7n8>^srGU9QN{i>Y%U9tHa^LeqOaJqG}z6)g}LA9p2Bg+i<$( zVK`l2Q+>98t453s=Qquy)9OHTdlKtH*Y(*{zH%ErrhN(i?MDZEyn@h-3fP5(>s?$C z{kn2C$Fn;kx}rT1taspad@ujR4$SlHPCT7I9r%9;ys9ArZzpzWKOT&?#g}S*{}}*5 z>_FdKt_Elv!{6A6^J3|tUL73f32pZP*ZKfg-o003XxM!a7~#YD#K8;e#-e5WYtw(SlCn~6Gy z-psQH@KokTUm$*-!@AH_6Yqf6D}9H*?*M*HzP+!5OMQnoG~w{2dR}!jLf9r;hL`Yv zY=R}{LM4vla}L3gP`F7Pi$FevtA+(nz{KaFz5MkK?|=uYgl~e44TD z;P6@dO!SvEg^}-nJQVr<=&ZQC=@3(5iL|G0^VE5DF$_MTV5 zLVEM z_6nf0H2cY(6p@AUDX$+s3T=~?^X@;2V*YiA2OG`b>#x@;s`u-%Q=&4Uc~(lT&9f&& zk&*BvNDLBw3F-z%1>SywHmj3jw99_9%MoZNDcYaJXjlAbS0d2i8GX*p*yheb4be}|BK(;k=n|xy!ENf91urQkYLjw7D%JI zRx(AA)3^*?>so;_%d{h{$s8w~^I)N~AF)_?qMzwN?N7Hp%wgS?Y^5EuN+GeI{(jsi zZABeSdwea@vM52w@u6IalcuhFk?^D!L+!bMDG@IEzju9?hgbpVNQK=!MUzL?7T6RB z6TDk*8!#9VbGp;dA_04~C|<{+_~HcNZ(ed+k;4ys27gXGcwnOptcJm6AogbfGyTus z5;`8XQ5p+v#N6GbTU)SpxB2s~FI-B!*0BI|QVKi0KuiZjjS8XFTVOjp-!(tTm6#dl zFvM8m1WV6=$?>DLj$DMx;)Dr3C(S)w39Ldm}Ams7%+bp=pV(I~yNW2v+YcmqZ_D38^2iX$ypy@}QI zZBsuIEd8=prbDQfphI8_+SrNQ){Bb*H7I`AkYJm~$Mxwos!^&CjWv`e5NrT|~2<1$ERpVY}A zT~E8-YM5-O&9vhZPzU)-5`?WF73%8gXwv1OX{d-r3gJc10Ig=S&Q@U4Sa4~EDX&2x zR#?I{Ky8wgL3$_DTIH(?|UL5O)1F%dHmRdQlZ*ga@5(=LSuj1#Oq z(vO*rPOeZ-Dwy-S%l%EddnXrz;JF}o7qo7^Z3+lr_f4+VJ5a%pt`Nxq8fBOqF{Bt+ zmA6TE&y$(rw-?w-8zjO#KC&}qsewui z@-S2b^y3f){RHqcz#V{J0Dc`J)*>ZQ#5UD1n<`I@U;$;RLAF48D?l#1kIP4F1N3l{ zwHB4bdxDi|&jNu^7trt_`Effz;WO zt9`_mn#P2w-T}%cpc*mj*o2^WC5XJs-adG;3>5$)i4zqvUG|PtFkmXEUSLlFmH?ps zA}^^;(@5^~lBH>x$y9VIVij0HFp_O)!;?xlXI zHNAnBtpO2e8O0IW|H@6`n%bX-AhW9-Z={E(kE?9=uD243Ph$2Nfne z@g7u=crBt2QKcnDqDT=!26k$(qZ}IaD-Yg-%kb!f=3hUjac^RO7SQ<2gY@7h$7Dyb za0t9O)0t*Ph88Xp4YI}!-^JxQQl}UpVk(3`dr}G$onukn1A0?jL9)}#1@qs5{GS7n zRMVf>nsjC>x2us8I%>F^;NgqFB6a{8Ih)`);}k>(cy0k;+Wqdw{IpNj!r;@%Z4czh z;k~L~W|dpAY#9!Pu-QY)jzAeT&&dD|HET-1tV}!3Rd*?ENQ)ry`g2v6<7@S{gmk;# zZSuzfsgPX;M4)%*=QNMVj55uUJq|;guQ3{`UoAh%e67mntZJZ@lS7z79S+z+@G*&r) zj7WuR9te^>nbis*u}1*|pS5Qr7=k)24XK(QtTAfjg4_SB_CvWsQ1vK;ik?5UWl0P& zO=Y8GyRtSPAuWtiuPKE)UaZsG)Rp=MzdOONXtj3$DVSfeb$-A96$HH+W=eKsxKq;u zZq@6P2-^NcBth9I6*W{R+oswMWpzwIBT(0g?t}(w!`$k*)&yIYZ9C`JEv!38iZx z{Y99-d`-4Lj1T#FW#P9Zn8r+ryw$?nW0AKl@YWJ}`xxFj%KVLCRtq)gMx?NI;mBG| zMo8L)BWe$ERJA=QtNx>f5*YBq1{p3gNTG8`Ej5VVh701Z)T7RH6JDh4%#;hadRT~Z z&qiuxiE1TeI%%a8Ym*`3F%L08kAYT+Ox?0kTD57^A_>GyiN(g6JzcWWg!%i-zryIs zST>sfcKLJH0C=J+wXQR+J{IAP=I&1fmkEM?9e8aWghlGP45Sqj1OXW#vfq$O?hGp= zY_16_$^6`chzLZb6OArga%=D>6b?Vh^FT8?Ht zpb#GI-Dbt3vexV~|8jLA7a^CP64WR~q)`GZ7rMwx`Pn#`ypgZRFO!S;lN3$9N^XvW zu!R-)G?`O4LiVbEZg^HVR5K*pbt}-y?9L3iQ0c3)4zYjhDqb@S;!ig@SU4PiOg<{i zYCPNXz{H-e$sA?F`YXBMXm|8F)|)w`oo?T%QR?IZ_DSH~Upl?%UXIC5*ew@)-U^`f zN{>=sS+xiB`y)4z+s)-qJqocOk5UNR0(1-6$(&rck&4+`owNTeIt zV$8%}kl!1J3^I7fAp2S@{wC@&%_O0q-D3q*6XEhQz1CjdXw+XPsX z$%iFc^*Fzk+p`9bP8j>L`Oa0^Mtg|2L{HeVxy)3L_pAE=^Pu*PYb zFHjLuG9PWGC1ifNHlen^9GSUlZlE!uXzmy4Vha2^HG>>3GJV995 zGJre9i2Vk*RKc=o9dyek$b)SHpf=2-v}V~_Y)WBe|DteXmTDra7c3m{$YFu{c)vs| zg)zJZR$^ODkpmUEtg%-C6YQ-pAfz|gJ17fEei5*ttkxOH?TUQ%4qd3353OTJ)~@0IeWB&D*pv{KQ{$pVRt)XpKFy1$XlsNaVm3HM7xDLD`@#F zk>$yjahaGSzaKYLSK7}at~y?j_eveG1TB~l7(ps0OOEG(=eENcFoWO4nbZkz&U`8@Gfr3plxXrl6=#GkW6F5G04;~nl{E|s2nEx0C?=@@E)$* z1L=v7=YeO^+lcud(y4C~oq4?K^*&UX?zD2*HY_|#9x-PqHuT`!FT*QQJdmiyi3e^o zD_J#~oG|C$`^kTsvvDo?hk4Yp^*vv?wou8TrH%uGo^}?h)IK+oF8ZzsiO6bIgRb6ym{TvLy?v z$P$Y_!eW#*$U-Y-(F9|^t%bwFPrXeUYbGf4lC9F0YB+<|#GxH=!e4ykge6mQ{B3f< zqN%vhi}ZOlXnRxotO@b@3Pf=YS|e-@?DN4^3jp!Ua_+k7cgMs2P=ON{7GJxWeN}lC z5w@lT-y+j%#ze$X>w@Cw#NuqJVe#AK^_r1*D!EpZg|(!&W_XJ1h~Hh{Lu?19Xl(_n zmc30%YRiTtfH*lJaS{W9S7aNsxggFp7>suST=dDpdwvte=BnMUZ3dlR>p}X`5P>9J zki@&`K@#i9gekRr$}{*X-7g$w2nuTu35yDIotf4Y?QSj|EveEWnQ)f8GUYCOfc(#t zp>ky@Vv`A;Iz&6aRtbBCGGUEZiupnAf9EE{8oLUj zAMFkZ`QzP}{C?`%O42cHAz^2fm8<~0`lh>T6~tcW@KxqCChotS%Z^+7-SrHA@xj_w~dy4whOfx=A{x)-v<{lp!nu|KPxZrLAY$h-|6US65g|GX! z-Om!XJ~f{5o(sI=$=&q@cotbwAMH;>HBHf73G#WmvPeE1g%q%n|lS;(AANa8&VK#xdKtkL9i9tA>=BB3q9n}+*;$F zo=Yx8ZGu&z%doM~ztnwy)bG#PgQQK@T_1xe3$!rP12_liLm&=e=Q$!Ah^k)HcrEkh zCcFeZJ#h&Awt)ENL7;7jBCAIP#Tg+IhqN>pCH14pg@&1gT@c2dBl6>x13K4U6 z5p4J%R7S~A^Is<3#V}2`g}Kic%Vm3xXqP@NGQ}b><)u)%%n^xv>e8Upr7==3V-w_H zl%NRY{blnAyS!dOU*#jnhUJ+e;qD3mXfyR z%L!{Yl{bPyivZGLn(n+uZi1aRB&m_YwwI}w&Nr3sAm#}ums)2nO+YP6XD!`q?(4Eo z3Nc(F*3%A}Jo<1_b{Wju8{{TRQY6>1#DuV1jibr#M>i36)eJ?DKUupfJZ?a{-4(RJ zT`?9|WspF%v#S;mc6HdwE5zJaJ9H=oTBBWVeYzFmEJ@c5(Mv6U_X~b{(p3nGj5ClD z$Kr@g>M=n^V`3ONz(LlAInXK0DsgMAh0=8v`8qI(j6AX~izx%1xWn&1b_^jp+lW#h z8>BuqhWa|FzadQhak2axHfm*5{_Ci_iNX!kO}T_=;|_$zle?SdL>b&2WN>#3gQnVK zN`{Jq;0SWvX!2825n-PS^Q0QB6KnJoNVG9rx?U{NMkv`7E}`|B#Pv2oYd1%|T0J2s z&4d_fnt{aTC<(PWh-8jI+6+ir!bs1ECD;NbFN90LGpd5st759Z07zS-NJO<+Eauii z$+g8L0o-%b24m)B5Omk_2B%QUjwP4o%0gU!AhkE zRwha8VA>q8cL>740WTfjEiuCF1nMnf>f6NBTcC9JvZPxu)YJ3ixo}P#YF;81aknwW z0`9vVVmA4(2{ zOF+9R!Rk|DsviKPLs2B6dRZ*NAt*f@wmFcf3zDddA#oUxj)Y0PDwf~~lpI?V4UE%* z)u+W&KL$w0!_}#e9u`Y*97<1wOMfpWegaBb?aBr?Wk;y{o=B%6s$(?4VB&v>j+k!9h7Kxj70A?6UV6>GXBi$&^)MJ z%=ZkCI4iRB+#rd$F(l3cQfHJ8QN0^ARMOs5GN8MYn_NQ=g z90{IGrku}bsR@4sug4ad7S@E5>L4s;%!kFRo(^*9(albxdS7hN^G_*q{75V7Anb)I zNw1GAzEBd9<4z^pgXuS3{*qU%vV<`RS7)#l)p>%0HS6yYv{J8d{C1 z9||&mD2Dl^jj|aqKoR!S**W(<0vM@w8(EUYr^@R!6CKZDZGqowMHgMvRC zBlzcl^hFejs4k01d;z81;nFK&*4 zS-%v^`t>+T(i!sU*ENLwCRH&G2AKK+Qt^#3d8Z$5eOM#yGQ#w}+e;kZghw1|%Nt@r zzS&?9d`=hE#aXABUx9T9y)T2{lFI8VU@8@$h}eBANX2arBwyYx4sZxBK~*RX5%#;VreA5&!c$2E@sUn# zLmD3b&Y0Zbi$h@zk9o+g@5YtnB28%dCUlrMI2QF%IjCNLap9qln12vy7os%n2eXVO zqe`s`Dzz#`sUHlI@4e*g4=^nih8gO;7ejR4bV+x7B%(UO9<~`-Dino+Fg5vYvB`yv zy0AH@Qq&|8*v*nyGXgtWWv~xeZXn}-D#2>9@+YmL&BG#lM^wbsK@nHSi1?FHG8fiO zKjllhJmlA(@(Ft651Hy*vx>5&*DI~Al$w(ODc{$KLQ0@IY!xSO5KinzFbHYuy zx!}rna6x+U1_?<$fn@^ZG3`nnh8qw+!nwPWRR3BmIn__r{Teu34O{{n>IjPG5Qzs@ z*5E1?B{Vm%-e@i)$9`Rn=MZg=UScaGT+g(KdPMb;*jPQ#9s5k>wnD^iL`k%^?%5ZRxjzGT9k=}4H@gW)C-us+s-viJuVWPjF|uesj$BP3x3>Gu1ZbSmpK8PlHGkYr7&&TJs8XI|!v zK9nnSHfgu&l{L>vy6Wg+dK%=(qx;iD^=o2A*!pn$=5c$6RCvDchKu4hlB1r-3F~7^ z9AH_n7dj0`rv}*jKB+^j#9HsD%xRg>*=C;vasu!zmn>w-34 z2PDGGNQ=*i6Um3Z`**N-+&D^M8GsVjYg?gRli>NUT*dpSFTx!b7w9tG`C-_I)RFt5 zZL^~V7fC+t-*Fz-^Q;7iy{$hQp!gOEZsu88q>NJVMJeztGFq+>mG4ktak&B;idxPD z?Lj4`HVR8k)AWzpi$2c)-f0bgTY*ROtP%%jI=lyCu|P`vXxcGPie7?}j>2ZFu&Qsz z*ZQ>s3eXjvO%Tb!t7I{PBv3(SaNX5AAWxDMWh|r@HE_XqqhP(xg`ENgNLNK zVUPKaQw#Uc{O-4U1=n%#m6JMtdDYyvN^4=7z=h;+|m6tsmG|;mm1F^{Gp6F@P>d<8u zTpiN=-G$g2K(7{drB;FFu+b9;Ha>S@;QA5GhneAg+HYtYZgJIO*fXYdv~Yv!V8hM8 zO|Dx0$5cF$XVXIbdC!0tluAD@od zgnFMGuC*XR@bWfzXTJ0{<|bUxp-Qg0#9wkH+*j~GUX_BQTRER(G=Xvb?uEXau1XHB z6FdCwYTq>%kZnuHM!cQBnU1x?MSlEt$9|^|lAhgqn1xi_uQ3HyDv{-NSzdXL4-r z*zR<+11=&7r#+qeJ?MJ+_OVSm$OAkiobd1_4K9~}>}xeRI(On#X*h9axPwgSgTpdp z7{vhHeLmQR7IwoghD&6peA|Gg99q9S-RByvkLNWTX*iZ=!g zUBu$0kv^^dZO|;gMbSRZx3IWI^0Jq|1)-R#r_8gA?P!%pT`=>2NW`u#a>& zBQXzl^(Q;)APyAr|J30@8g2i#j>cTm73wH>x8HrV|24-!Gj?LbAs5dYutwtQ`(y6#+uA9Y1-me2|_gh^l!}L{4oQrkaTPLui?qF!|)74cc6=G33MT^`{Te(z1Y0> z{Sna{w+5Bn3e>_}XfUA_gm&v11yUinPhODFrCf6k88TDK4z+DJOD|_leFE+nNS$!Q z5lLHxj(EqCbgM&K@M~AIzPB#XAweIeKcT_oJq;o-ht>Pt3K)xA&ezu9f>bBgk6rni zW30Vd-`H2LUfZ=MOOjamj-$T`<^7Md0-5wiWGV5x5B51-|5(#+cR?#rfrjXX_EePO zkb_8S6D}CsHGc}brqt15PU&jUr^8;a+N^Z4xrtp19f<|X%d>0tpo{gda5zr|If{ZL zCv+GP7U#*ku%3p<>4R$g?lXOu{n>RBq~GAw6@1?%noaU59gbds=yiV$9YcbCZl+!E zI8?jo!g+(8(!6iGUUf{e7OzAFw}1!gMt{KU-=XYU*L8>4x)Snbp?s8kJ`|i+LH$1g z&TOdvVORH>gKLl^z4C_RRfkMt%0*X9hBE7+Hk7AqbmCma6$@*e+iaF};c-Tq&7$pY z_becB07x7Qsgn=d%!j-d$lKp_bIpD*tTaF}U1NeF(!@3aL8B8F6kRDrcsMREezd7A zz7%amtlOR6cTf6zZS>~I<1T8Pbf8uN)Dl*@9xDB*9_6Fxkuk3_hz#>^0ACHkuBdOZ z>*ksRz*k*KInE1|D1nj|DAl{raHaL4i#FyA7zS^_lln3J%Z13F2k;f-eFI=`Ppg%q z1CFO!H=C2Y<~v?8GhHb)*nsk>DF;^XZbLJ{&Ty;@*AW*ukYO`?Qt*Ro7~0cj8BJ%a zK$?^yxBFu6s}7UCBrqV7UK#o-lU=3n41cf)ujg4Ku8MR=O8>z=^fhW-MIg z_ZjgJ)zgp(mdJ&uA*|;=G~)Ytwgi`?GnEix;9N4!kNqhIR=y zN=AD5oh9%EiGqK-1W&*t_}&scoM+4MI5-!rZ*>l zdEI~HSC-*yyqkZq43EHj_>MBH#qaW8mf^f%4|vK^Pe%dTVU}LplewpjnEOAu(X6#i zlTAySUU@#f7xqRT+_K(mCv_j!mT(= zyzck-_2qaleuLjpj)ymX)Gs#qIXK|!wk>>8|76hKs{*Ce@+9KD$Av7ydrHMKqDABI z8J-;Wc`1p(=UIl7UYEe^$$NfuhC0uN4 zs)|E$xK815f8RScb2rCYpXBUNzSmrKIj7p=zR^2TGl$dIkpAXkolRCc-K5ZEnqZS3 z>nk%GrgJyvi=1X0PRt4$#meayRC1V|S|Ghr7hrInf4mCo)u(!+hr>M`GT`w#|9TaE zjJI((9q;4Ea5#FGb?_@eJzo*&`CRJ|@GgqHhJO+U6-jL$f1Jasc-A7a5U(=Dn9xFP zQxmbx1gwc1{2hm7di#E0#M&ppGQAoJOJO0~$&EO{Z>YhXWT2n_paze|zwq7~tXD0Y ze|)|Y0^3}p$9;_-QHzHRR=o;0eO^P%Gsh8=0Wb?79${*l;1usbP>lm3HTXrfFcUq> z@2JJoaU=h2EiRQ&NqBY&PF2tp@UNHx#-P_cc+W(vDGD1G33Y+>|7loM!~^fZy|?Og z8xpD_`SJt&<|%lm+z;DO&HT_h9No6(;p-;R>TppVwaqk<@zlQy%KN(*d8gsMcq0$e z4&m7uB5Yn&8$)geB{wr->d7%~IFlCEi)yQn1bH2a;Z=`2cm)IMLO2085=dN}0ncNR4C zy6VU9QyOrZNS68-SsG~71tJc-YIY350$e9K+QFY%0P|aR5gwiVLZ6sNfH3cwgEb}L z77nt7u~TnvSHJ+QMEVAg`%+A`kZ3O~!rORuF)m75{%?w7W>NESVtJT@9qu_O5$x~i z6t%jBOyqH&>=g?YmY}DdhBGkm*2P%ECq0B2{>)-*;*T$e)H)mdcxdW#`cr7b(W~(4 z)}WbN#b&Ov;X;0k4OU?6Qe3V~sC#t9LyyjXBxHg4;)Ywc6rbeTWw4$NUPhsdyhUQO zE?b7}Wz8!1VhUh2Kqf#7z?L@n#?%j=O)St4M5*ROm6NL;oHTL9gWUZO&YU=HdNt23 z$8&jg=xa+gTpXqD@RnH4b<6P~p0$h6c$H1ee4QO{Uv@4PZW#bHhn_V3zX2oQ4+F?l zLmvj%3YV?_Q~i*Mmf+}}oPUSv01`C-$`GkvQxJ0j;NRi?r@VPk_t1Z?v+(~)?8LzT z9m9VWWZgi1<|-`OmxJ4sw24l|G|?*BM602RqSKb;F-^3ZA~-?_yk~{jyS6xRzVtAX z^Y1utcB3*8OC+$Gi+rb75;#iz`o19Ki_+md@lzKn&lKUMK>F1E;41L^AoQ$&G=2Y1FgIEz z49ihwBk@0Ob7t0FD2a$s#!6{R9-G&;M5;e4x;OrU75Fg$qT7S&b7H zghMW^KMf2*pZ_Y?f1*wE6(S=#LuoO-Zzf;Sgm*HR;C!Bb9e@3)=El>I4uy=zu_p4} z94)>m{Fk})J^pqR)}=DA%X;5(+x+E=mi=ZCTRrVw*685br*OS3Wj$gRZ$Qix0Gc+! zGacY0q~`%l1GwCTn6m&1$p0?%JPglmq4WlL&IqOLPeK~N0zmO8yrHk4~RD0gWuY z>eOc`vTSH*3zyg}vQ$%y2+ct0z-E}BjNXh>VZ5|%#ydpFPsJc_#<`hmVIRFr9|$lo zca&IhY0D%!<1N$kx-Ixn=F7fIuyU@3aerbxLenN9#8o2H(>^77VT)I7j3K*)YV!il z#Sie+FJM08de6jY`~sf9Yq#QuGWU5?tSL2_f$d@hr%w=8>llC|h5Ui7xFm_5Of|uY z6kR$+6j7fG2#n6fM8vI>?>210#r*tjxByPU_!qX}=rI_t+8iS%pz`c?*rj}xe{ws1 zFeK;mF>-Fl!-miE?AKpKrA=6Cga-MxuSvJcnu0Tb<8t8>Nih32B26U{to(?bxB!ph zXYIt#MkW1AP}0A|NV=19Zo&I==vf$S%CKW$zHhTee;v_rl$O;~D;`y?CxMp+7tWC-dTW zkw!0zBGHnav1mV*#lAlWcTmM-#{3JLm;Qx~3a&uFS+(DH!FQpNhAa4kfgUY^9>AP} zZ@>V)Ye(gb3=)L^pSJ^p09xSZM~YvGnos7w4dno>unJ6pnF{2a{1+7bi$}1w&~O^U zGZc0M(EG*T!P5i4K)wL)l#~gsCwTILD}=zLBi$KvTqhKU2Q7-2#D9AP-^~v@hBK9K zjsqO{Q95TKNZpDyH8TIQzA58bs~n&DT;79gur{=5b4BspQeTHifXH`1esik pVe&54r2iK<$F~hIl)i;eT}OcpNcQy(3s=T=8bY{{cVG(g6Sf diff --git a/firmware/aic_pico.uf2 b/firmware/aic_pico.uf2 deleted file mode 100644 index f81dccc80d9bea64e0038d41dfe8259c7e87fdca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113152 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 diff --git a/firmware/src/CMakeLists.txt b/firmware/src/CMakeLists.txt index 841428c..48d800c 100644 --- a/firmware/src/CMakeLists.txt +++ b/firmware/src/CMakeLists.txt @@ -4,7 +4,7 @@ set(LWIP_ROOT ${PICO_SDK_PATH}/lib/lwip) function(make_firmware board board_def) pico_sdk_init() add_executable(${board} - main.c save.c config.c commands.c rgb.c keypad.c + main.c save.c config.c commands.c light.c keypad.c aime.c cli.c pn532.c usb_descriptors.c) target_compile_definitions(${board} PUBLIC ${board_def}) diff --git a/firmware/src/board_defs.h b/firmware/src/board_defs.h index c886daa..b04b850 100644 --- a/firmware/src/board_defs.h +++ b/firmware/src/board_defs.h @@ -12,6 +12,7 @@ #define RGB_PIN 12 #define RGB_ORDER GRB // or RGB +#define LED_DEF { 25, 22, 13, 15 } #define KEYPAD_DEF { 6, 7, 8, 3, 4, 5, 0, 1, 2, 9, 10, 11 } /* HID Keycode: https://github.com/hathach/tinyusb/blob/master/src/class/hid/hid.h */ diff --git a/firmware/src/rgb.c b/firmware/src/light.c similarity index 78% rename from firmware/src/rgb.c rename to firmware/src/light.c index a856264..bf0c1fc 100644 --- a/firmware/src/rgb.c +++ b/firmware/src/light.c @@ -1,10 +1,10 @@ /* - * RGB LED (WS2812) Strip control + * Light (WS2812 + LED) control * WHowe * */ -#include "rgb.h" +#include "light.h" #include #include @@ -14,15 +14,17 @@ #include "bsp/board.h" #include "hardware/pio.h" #include "hardware/timer.h" +#include "hardware/pwm.h" #include "ws2812.pio.h" #include "board_defs.h" #include "config.h" -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) - static uint32_t rgb_buf[16]; +static uint8_t led_gpio[] = LED_DEF; +#define RGB_NUM (sizeof(rgb_buf) / sizeof(rgb_buf[0])) +#define LED_NUM (sizeof(led_gpio)) #define _MAP_LED(x) _MAKE_MAPPER(x) #define _MAKE_MAPPER(x) MAP_LED_##x @@ -132,13 +134,19 @@ static void rainbow_update() static uint32_t rotator = 0; rotator = (rotator + rainbow_speed) % COLOR_WHEEL_SIZE; - for (int i = 0; i < ARRAY_SIZE(rgb_buf); i++) { + for (int i = 0; i < RGB_NUM; i++) { uint32_t index = (rotator + RAINBOW_PITCH * i) % COLOR_WHEEL_SIZE; rgb_buf[i] = color_wheel[index]; } + + /* LED just follows rgb */ + for (int i = 0; (i < LED_NUM) && (i < RGB_NUM); i++) { + int level = rgb_buf[i] & 0xff; + pwm_set_gpio_level(led_gpio[i], level * level); + } } -void rgb_set_rainbow_speed(uint8_t speed) +void light_set_rainbow_speed(uint8_t speed) { rainbow_speed = speed / 8; } @@ -166,33 +174,33 @@ static void drive_led() } last = now; - for (int i = 0; i < ARRAY_SIZE(rgb_buf); i++) { + for (int i = 0; i < RGB_NUM; i++) { pio_sm_put_blocking(pio0, 0, rgb_buf[i] << 8u); } } -void rgb_set_color(unsigned index, uint32_t color) +void light_set_color(unsigned index, uint32_t color) { - if (index >= ARRAY_SIZE(rgb_buf)) { + if (index >= RGB_NUM) { return; } rgb_buf[index] = apply_level(color); } -void rgb_set_color_all(uint32_t color) +void light_set_color_all(uint32_t color) { - for (int i = 0; i < ARRAY_SIZE(rgb_buf); i++) { + for (int i = 0; i < RGB_NUM; i++) { rgb_buf[i] = apply_level(color); } } -void rgb_set_brg(unsigned index, const uint8_t *brg_array, size_t num) +void light_set_brg(unsigned index, const uint8_t *brg_array, size_t num) { - if (index >= ARRAY_SIZE(rgb_buf)) { + if (index >= RGB_NUM) { return; } - if (index + num > ARRAY_SIZE(rgb_buf)) { - num = ARRAY_SIZE(rgb_buf) - index; + if (index + num > RGB_NUM) { + num = RGB_NUM - index; } for (int i = 0; i < num; i++) { uint8_t b = brg_array[i * 3 + 0]; @@ -202,16 +210,28 @@ void rgb_set_brg(unsigned index, const uint8_t *brg_array, size_t num) } } -void rgb_init() +void light_init() { uint pio0_offset = pio_add_program(pio0, &ws2812_program); gpio_set_drive_strength(RGB_PIN, GPIO_DRIVE_STRENGTH_2MA); ws2812_program_init(pio0, 0, pio0_offset, RGB_PIN, 800000, false); - + + for (int i = 0; i < LED_NUM; i++) { + gpio_init(led_gpio[i]); + gpio_set_dir(led_gpio[i], GPIO_OUT); + gpio_set_function(led_gpio[i], GPIO_FUNC_PWM); + + int slice = pwm_gpio_to_slice_num(led_gpio[i]); + + pwm_config cfg = pwm_get_default_config(); + pwm_config_set_clkdiv(&cfg, 4.f); + pwm_init(slice, &cfg, true); + } + generate_color_wheel(); } -void rgb_update() +void light_update() { generate_color_wheel(); diff --git a/firmware/src/rgb.h b/firmware/src/light.h similarity index 64% rename from firmware/src/rgb.h rename to firmware/src/light.h index 307b45d..f839371 100644 --- a/firmware/src/rgb.h +++ b/firmware/src/light.h @@ -12,14 +12,14 @@ #include "config.h" -void rgb_init(); -void rgb_update(); +void light_init(); +void light_update(); uint32_t rgb32(uint32_t r, uint32_t g, uint32_t b, bool gamma_fix); uint32_t rgb32_from_hsv(uint8_t h, uint8_t s, uint8_t v); -void rgb_set_color(unsigned index, uint32_t color); -void rgb_set_color_all(uint32_t color); -void rgb_set_rainbow_speed(uint8_t speed); +void light_set_color(unsigned index, uint32_t color); +void light_set_color_all(uint32_t color); +void light_set_rainbow_speed(uint8_t speed); #endif diff --git a/firmware/src/main.c b/firmware/src/main.c index 8a645de..4d77989 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -27,7 +27,7 @@ #include "config.h" #include "cli.h" #include "commands.h" -#include "rgb.h" +#include "light.h" #include "keypad.h" #include "pn532.h" @@ -48,7 +48,7 @@ void report_hid_cardio() uint64_t now = time_us_64(); if (memcmp(hid_cardio.current, "\0\0\0\0\0\0\0\0\0", 9) != 0) { - rgb_set_rainbow_speed(255); + light_set_rainbow_speed(255); } if ((memcmp(hid_cardio.current, hid_cardio.reported, 9) != 0) && @@ -108,7 +108,7 @@ static void core1_loop() if (mutex_try_enter(&core1_io_lock, NULL)) { mutex_exit(&core1_io_lock); } - rgb_update(); + light_update(); cli_fps_count(1); sleep_ms(1); } @@ -201,7 +201,7 @@ void init() board_init(); tusb_init(); stdio_init_all(); - rgb_init(); + light_init(); keypad_init(); config_init();