From 732f4de4adcd28fc86d577d6b0fe09d5fa92671c Mon Sep 17 00:00:00 2001 From: whowechina Date: Mon, 15 Dec 2025 22:50:07 +0800 Subject: [PATCH] Arcade lights on both diva and diva+ --- Production/Firmware/diva_pico.uf2 | Bin 111616 -> 122368 bytes firmware/diva_pico.uf2 | Bin 121344 -> 0 bytes firmware/src/main.c | 9 ++-- firmware/src/rgb.c | 77 ++++++++++++++++++++++-------- firmware/src/rgb.h | 5 +- 5 files changed, 64 insertions(+), 27 deletions(-) delete mode 100644 firmware/diva_pico.uf2 diff --git a/Production/Firmware/diva_pico.uf2 b/Production/Firmware/diva_pico.uf2 index 6a277dfc305b85f06bb6f790657f7d0e75c727a9..a3f04d3142b75db6f915d92f5d5092bcb65e1d6e 100644 GIT binary patch delta 27186 zcma*Q30zah_BcLsvk(GE1k?~B-Xwq#5ZSa=sfGlvKoD`MRl&ZXsL@(Yae1-NmQ=09 zrG4nNy$IG?Yx}I)*3!~dTe`fizBaMT!=e_um@c-xT?r79-8pw$rvoASg%m^= z{)iL^iD?3Xv;xuu;LkRb{ELw62h9dxw=DM$@Ya|~Z#y?8hqCygQ8O2;%D z1sqbo(9E}AVp^G-%$3Xm2J3EOW-u*Gcl$l3kY*th!>{)t{T)uELt4KEsPgl?NY|}Z zXmC?Eyj8%PUyC$U6DgYkZwTH*O@4Tr7I>@Dh?{tLyUr_V!n~qaf<*k8KC~)LVtS$t zKRJ(i#4y^pz)2(O16+vsgI-DYZ!R&f?2knfg!q^Gr05aJF?l{xnjV%TorHg?FADN2 z`yC9@o1A7Q#afjmy+~<~WuXgrN~@}zNwlDxF;0}`Z^PYYW>EMBG4uci{exzH0$AYR z{Z)$fVtgK=sUMUQKCACm#Sd+hm6^z|>1abd_ReFBz#c{_BXTOsXhay?;eE{b#RbHF z;3L|3e*n`I|C{G28fhFz%!~T!-833jMlff1#gio22VIZ336uV;hSx73&A;f+;+u`- z#W=rJNjQDM-NAVEh}IV%+VA(Hs;Vl)x4*@pb}|2GpG>E$0Qqf5_vLM)%<)L3O$I$T zL&M|ylV%~k%%!)kvgV_yC_%NmcsN2?2~L?#ix6~GG+*FFda*0Vvd$tt-Nf)C&d9VH zWMHKHdCza|K3x|&VEpBykb0uk4Pl+Qfu*yBh<+1bAy^6D{sA+SakS^tcb^jTPxh{2 z=9E$=@NqHE_>o@ZnpIX=D&~*$Q7!lYY8LZP`Q-e+ysMZpvvaJ-7O`=%9UMVnOQ%82*f28&8k3?ylKp z+C3lhWBR^#59Ls_2y%agoN?B;T!MoGIp4YYG72^DFhXswAq6oJ-+LwReGGll??)&N z^6CJ{*u9CVgfZLQzU`F1=X(F&OGW&`0Wp8LccXdJtX5`|88x+l#zE_Quc|TFslh1Y zPXLR*`!V0|K{V!{^dtUuAL8?SMSMap(&=o=Y>(K!w4o8at~V-G>ts?DdUWw%w@8P^ zHV=&`Hf~tVpxNZYsC=Xs=@Xrqo4>awP%6_cn^VLp(}~R~(nOPydC8DyQpt6;r8ZS; z%CI9qp1KZC`|?~6JJGayb3zDPWtwfCXNbf_{8+yf^!~ADE~D2aSfwUsjYxx{P(!?g z-{5&4EmE18=h~2VQAq*JkL65^y~U8w_Dq!clTyZPZ#Gb-gf=vGeU#{v+01VHLx$;X zNOzDa2$a7M<)XHO33QQ94Hs^PF{}|G#U8K`GM0(m zIN(pwPL)RSr2~jooUub$E?A8MNsq^(gvMk<=|?+7z@F$-?wOeEewPY{m4yGrQs3Jkf*okbjzjb}Fh^svve7oPgOMd5 z+SZ;iE6a|uCb-foZh@!BSq;;0MW4lSBJfrNZ!`K1J5r$zt=Br2HEQiC(v*hSM3Wk+ z$`dWB^5ND*%N`Tb$HCf$(?^w$LkA48M#?$dit~nBaDg~~oAI|U+nL2citdZ4pdIhI zb&W?Ft0ns+)p3cYrHwIV=O{UJfEr1GqBKPDzwRwCmFq#@gwb4h+Hzs_hbQvLr=tW| zj#C;FDhBn^AP-J4a={csXT>_nTus`Z(5HcEznWI$QT(_**fN~apcpMF(Lza#c4QtA zT@7iuHam|9J`yIFpqjFQlPGga<2Ix0Jl1V9NXivfrNNZiT-?zHdk)$Qcnx7TLBCd_ zU&69DP)T%NWOksAg+Ww;N5oLHJII1xD&hME6lXdZlILm9H;XdVjd`=^qGiUK;w*ce zvCtqZL|Mts@v|4xQ>~wEKCqeM6TMTd5{(KiTCkYbAz41fSB~hPYF$hxZ;sN*qhk#D zhMmzApU^j`9yV^|klB!~RyoI1R?`I`f`9ZE1PIFV7cHm;k_pKap9^`_0gAh%F@}Bd zgyL_##4u8vidi*uR;X@gf0nftsep~SN{Ob1UbH}mD1JEP)Yg?-gl=!K&nfXFNRr(@Rz`lJi9%Me;88E`}+#(jQwv+o~Z|=C{~t;5oy8 z*yit9>wm<)IF&74Y*gqH4dQY|L83!(#@Z@Hmc(FtvIIHUPF9Q)=i%ItUPh@E;nf=F zmzfNvxh9rY=7`1o4L)|RG8+=Y4k28d2x zfR+l!5?hdf{g3X9540999~o+Gl)+~DyQvcDi}`;AXif$?M?y4n8{p;OfXMs=5WPA` zv>6o6x05~TC0OOU+jlV|(6&=(oWVIpKeLl5Pq2=Jel2rtMSB^O8I3(qLhDjgnDy&g z8ELl|W_a8xns~Y7Wn->$jXlerMx}_=rfTMx-LIidX>zqeWLR%Pu{M*unGy3fz?Voo zsF#Le!Ld0^Fg6VgV#WM|0o1wy)_`UP=m6)H111JhN|Twv*C{P8&2YLz{G|b;8(U5$ z_YAYrvdAJjRTS6|9AQqtreGVYHf||6z=ZitDMw>lnY|@Zz;(4T$all#l8206IgC)RKTYd6jK(Dk&N^jCKlq7BA)WC(2WK4oUZmdvm1Xy0bu zekwtX_JI;dz~0`UmO@ecL~MhZvZq+1&=Pw{J)?(~InnrY1&Rl{c{(J5XRz@DP`Xjj__~P3t)a%L)|c$b@>8VcSb@AlCZh){-1nJ7VwoH!BlU9<6YCzq90B9*?p7dTV`ss}$eb{!9yU%pG}DBw&(@wAhdF5_>`@Z>usRpAf9SnO^DZEX`XqcVJ3&37CYtZ- z$6B2=(WJ9TPub3Nz_f-CT?L1;hmZ_rVkEVpwBO2MxwMhx@+A;cxC_7gl!*8D$H4Jo zG)h8q%7$5ITaTukDMsUwYfudh2|+7K5Ln6XZn?#5nN^0;MemByF(%f8oLjmbG}4vL zE~_lBFi=JYWg?fYyJb-VRcnny5(75&xx@w9+N3PrWi*@0Q|$YgQHWv}8|Q^q6h%QR z60tX!{d6lsbawzo`E?ZyC}+BpYDHN&&MDT-R=h7URvt?k_A?^GvXW{=iWugfmPEN+ zP8ph*rI2ePxm2PFw_pQhn5&$tNHnETWz15m+}Q8Z)rwlh6J^&uXgueVM9gyYnCeB> zz#CzF#r2)L`cH)+^`xsU;l(XX_LS>_`?E#&x^db8W7PS>%pGpn3E}NV^wC=PhwcNg zZ9{2?nR<7Vu@6eux=UeBBl8-uJz|5T14&1bIgczU?3?OIB_e);kDNS3u*6}lQ+M2u zB5hfUHAqYHE)PUyf9V>UvB@%L1(Gz7aRwJvKBk|YmYOrztBFa$UQH78D!V52S(c_} zaoS_JE9ipBjFE-qW7p7!En%w7QxJL{xIyn zk;`+&p&f_jLY{=L^~7t`v$WPMtGW~yBpb$Aq&(+SRjSHzts(xh)FZ>q%K3BP8W`o2 z(<1)5UiNmas#ebb=)LDxMPsg2&bz!Hy5mZv{PzRzyB(U?(lRXPd%Sw<*RWkYL$nAR zT4g@$%o7mZ397Kb`{5lJ@nc|9PlgL56zw87JV^Pw{GzjDmzd4|uFYmOY34y~v2i&< zMWoGD9rru5b7tj%NMwic2>6>at(CyXr2)1xEpxS$zhS_konASkEEiD3yu+VmomNp` z(ZLQN-YMdhz0=JqYqiy(I#7(pQENG_~bnFfp}dkjF%2ut${3e^dh1Vq8R<_ zutf(YZGp4{KnCwN=r{{8Npl5K!n>Rt0)T7eQk)U-yF9ExuMSiSBYD8(5@I4xEwC1S zxgJ(UUoHx|7CdK=R$K||Z0R@9HQ^S&f>t+-V=w7PHc0srFV^TyS!T%sX0Ct=M|rf?Wnl%nWT3jP^ZuSc20BAMPnaj76G6kg+S;|V##v)F ztD+N4v09Z;>KtPRb&)?#e++*@jJ`n?)T0VA!$yecl+7`>`Fq;^l)hTj7)^C*B^+|Kof?a?0(9u5L@L$A$i$R;WW~|LBU+?b^&5V?TNi{*C^~ zb|%^kIGd~6%s_W1;QZGuft;4j4ZCjZ+WbCbHu$dwHa|%qgrXf>Zatg)#5@)45_5@G zX%&}=`6wTT{MCVcvWNw7OK4HKxXj<9^@~7(q|Oh?NI}X74sqFOOHsR&Kh*E*$@XJJ zgS~0JV`kB%SynV6jT~@xN%zIazyU|fkMv43S>b_6+_IB~Rz+3mq6Jc3;Y|ht+xp4B za<9@H4}KSAWmLBe>gA%8WP;=C$A!Kg>_2RjTpVls*+pD?zxDs%meW#R1;?1UQgZ5& z^569b{C~jmLFm6@0EFe!~6#SBj6bx>nyNZ&_Sk9XDNBT1{b_hvrB{yl1 zAurlqR0t=Sy&Ah7;XJhWdYBvz^%o&<-vPx>FUYA=K`vLS2ZvvSI%qa(f!SOi@L)DU zP2PPFI6VnK#Ca2*igtg`L_Y;8`=gKa(A7X5>CHpFU@v2SBcu>`Juo;==0%{|;Z8JS!UT937{L0N^LRpm>jv#qb4u83t{>WeADS=DKM1bHp9d)Y z;!c0h^FDvib$&@V=D!)hs1RhLLMD(q8^d&ZxAE#{Q?1p>s(=G@q)lzZ6ES}d@_+66 z++C#2fL6jZ--gydIgj}_fVS&AH6hbAO`94lZwNH{{D4URZ$NlvK&*f5ym*4dWzdcs zB#>m5q&G8|KMKU#K6}cDop@r8+XN1AJh4l_zz=TB?*mGQ&xx~6NTgA_2o11Rr5 ze;($bgP?!X*)%-)cKKUOYGBOmAMzJ8qy|kURbVo{p1uLK8EzBO$S6vwlyonH{`q#X zl;6=uM$pcI;0XFPFoL%9{p3yrmD&3MKV#VJ;j^N;Y2@pnd>GaxDZeIAXWhVdqvW#; z7$F!L2@B|#>VpJ#6=z;E&u=SQA(!%5YBg|27 z$&g}IZf3i4Mixo=TLxJ;1_(|4A|%TB@%+zjBQqU8hZC&ROa-PyVB%3=VmH8316Kk( zDF4mo=jsho{*7J}Qv=JTuV?iDRTxy{i@m3fzq?AALQvo{y|N-wT0K~Ly!TlsB~#gl z9=0V{OEyq&hc$i3>ZAExzGxV9G>Yb5gaIQ8j9#DTTeq)gIxwJq3nn&zG=M^YB7ofX zSnwZE`gE6-q0lI^_I>T^ltv3ez0@a3Rdpc^8LqN^zdor`QGv#fbm^>0aMMH&ke+aQ zbk?|r(qy}ozp+du$xM+hqvPc2t1cKdyX^LDzay0rMXJ%C|l!_ zqp?MmzMd5CVdLOL$;KIn7LeGBnf3x}R_1u;_{>6QZf3lb82K>3|K)#KwnAfFCY7Q{^;Ls{PDA~;1tZVXJt)tj?dCLbF(hF z;1HE8s{hO_)21Z1ERbb7FW`I?)c#LHC~G*9<-OH~r;yAy+@oL|XH6L696uq>nLFWC z7t$`i?X+74MBZ3HTyM{H;i;nfXWSBP%K}pKNvOH_wi6)?S=M70aDk})kwCdD^C4(# z@ofh|w{RSr9{YAszsEqQFdN(hb9y%Pt5V=x)dpt+xDgxNcTgaKtf2e-?$_m35eR%9 z{Oe=7^cnG*gxNB~6szb7c1cpSroo?N7HL#gy)I1W5YQ=GlmKP@{+Hdu;d!h7c{gl}ywAF2@V3GqRUs?Y zS(EJ&{yV?UDg`zr{MY_R-9#^BB#`+#JQ_ep4GN;83ZkcWO}VBFc2T_7qbb)0Qav6m zq;!z?3#4>`)DIpVq|zYo8%U)EQeS$~Ae9bzmmrlMNS*hjLn;IEK893AAoZaq15#rl z?>$J3g%n)-{o6AZlKRq+US`Jyb6#9X)!1=7GN}_v*8IxEwiXp`o4rO3hY@=!=*_bWi&7R%hJ&co&svI-=G4HxcsuaW2(S>+&G0-1 z@D*I-RKOv8KHO*8;Sg~e@)Ye+(E36jS@N5$GJe@W9o%AU4_x$$_!`eUfMaFo9Kj6|1MKEJviy0*2$ zmTny7isq~O+0)Y|7Y#p0ls|Mad+#X;KgWNs8R?^3N?TlngG6QD3tk<$3u{%d&%Cpj z%{3&2*qAls3vco&CIQ{sFUNs2Le~-{p^#5!eP<;%YD~_3Wzek>tlICuA+J79GL4R z{KEtFZi@GL*j!_n5j=dRKBy14wHusA8{oDMX?3>g=F(D?rPNFeY3G2iXM&#?*bL~> ztpg?I836;kW1s}yc`s`>>Ki0{-9U9<11K(h(8za&g?s0?~zZH=bHh zng|kA4vcZ|ns9l?&x{VL2*gQmd7%^jK}Nr+7clvaV!Re^8m8!*kQ zA+rt}q6N&|5GO*!{K+u*^AHFdDlz?TQWt;+5Wh#PhD3gl8{#ZDWTJ7{nQ2b8WU?=p zEN5vZEyUD3_08ddm{7S7Jz147OH}Y^)$ocK%l0bCgfBWTxd{`baWX=bKse0YnKYzO z!+V&C$&h{&@`^|vz>;*peUEKnXweIPCwqoTUMu6D@6Fcv3v>?H#rqw}n~T9^-z3^g z>53V2e<>s5|JD0|t{Rc@{nsq#dUHbcw_mgTo?b3ge}iA3_XR_GzgDY%@68QSt-B`G zmA%a&s`IZ|ep7FYneaU0nx&<^tXbCp#gndCe0^_WsPT+zmXGVbJ3xHYHA_{!cLqvj zfl^9G)QRrbqGE=qGp08IZm*E8g^?FetY*?77y}DJQnG_XF>S63tAs~7MqzHbdClL z5j59s?iJ5m^Q|R>$cewec*0{22;TY^v!Hk?}`86V2&%!r86=Q$47vb)Fov0>s07&0k>L?8yl5Uhx;@m7XzB zJ_qwfe}OQ~qYMzp4wWM|IE=#mp5w6^t#C6R6|q2A*cU5GLf+$Q!OjGxbu)yg^<{{W z%7(^b{=0$aP*7_Lv&xyE-ZZetMe*N5pidXv0uqge8Z96tlH)QSdnmo!bqlkaslG#T zM+#i8MGeL+A==|6x6ouGL2d^-+8fzhD#u7L+}~>0e^!oRjsoTV1IutqN-OxJQt)CK z(oME(woHag1qWPw23yNQt94M0Z z*JyS!gj(DHJ8iCdWGqngdjDKyP#!kU60AilY!6}{~Tr~E^FJxlrht3 zon2#_1D7l@zy#(${~vln7B2bz5n|zeFJVFYo)7acd0ER`^|Xt=>9ocUSI~wk2Ag!Y zTA=pupQsrE0>NgWiSTjQw}ifn$pyT7z3fXM&>o<+B~XQ7LV-ySRE9@aty&othUi8M zI>9?`x>Vc9-2qp|C3W2Q#!Jzx?jyDp|E%pVc`=l-FN z3APBAh|p#(A}#U*XhOxsc}!PZ3sVid!>(kOUZ95t-|S~A7ATcb{F?*+X!A$=m9e@8 z#pfyMwv|BhWIwxQfl?gBpB!MD7o-CEz5VP<3siuZq(Qvsfyg;&P^gB&;D9X@3|KN_ zc-l!w;!O~=kz?*|KfsI+IFQGi#ThM3_AIbaZORgrvDoF*Iy4E=Xwlx<)~LddojQj$ zMLJj1QY(QlMa)b4v}VWHBrSrwOHEk=s%BCxG1jR@uhVSBQ&Pk!u?-zcl=-VGNkj3e zeQ+4DZ*9wTpe%_KWhXl|hy(z@fG?ybinHI0xXTMSwYc_OcbJJewWq;#F6Ni`G8?Q8(O^cZdxhh({sOC^MMur1rOGPYqn;%)b0qh0dz7FSL&& z+5vCds-ekRM5RKo!7}S!MrB`OPekLXeN2|=)$-Q1r`r-552c__%$Mh?qB7CNqRS}b z5o?-8X{Y#CdglSwJ8iR=18pW|w5crR{Za2K7a4GFsVN;K-qHJ|^{H77MhS5(uxEDu z(QRaknO{epi@y)9f4kbU8f^c70)z7?aMohKWFL+SsN@hM$>LDg_HvLfmVv>Wxty%6Hoq8gO2a83QmQMGGNP zg|Kp@yP8?V$h$`U69067mm!Op6ttL00*krD_HuyFyNCui-@IAKCwUL@`Hv8v`vQDk z=?*IFi9tS_fzQJKPd*#^J%rI_`-uRfcLW$6;`4;9AMzRJ-++}%n_D&)P$Yy`Wm;z4 z*VeiD&}I>(L@mrhbFQhY@h(u;;qF!y8XJ`*zPQ_nF7D_~5s!%_O6vq>e)P;^3`{D- z1PN3&LZGwf0<3h}zYmAhkei^jL%Uv-mE=r=j{d}xM!(x;P}xiw@b;Jo>+UfwzS!0F zy-j#M-4Dus9+dryo78zZqRt+uvu(x=P-lLi^dyv;7(&woG?ftc_7A|=VH^h-zJ@D= zKx+hnH30&npm?*Jp7p~O);RV88Gxl zIuZtGDIED7FfhsBtb+r&t$ln&{F{k1=D+H9ra5$J(iG9MrAhQ7wXpvokt6Vy5P16- z-nyt|OPAF~K{t)jsGyFmAAt{zr0xb+IC(w+PdJxDYD+_Zw|12I98R$&L%_)hi1);N z8xUy~6C(be=LX)<4X+$ND;Hud9mOTaY+HRJYur~{WwhGb8fg>y0utV zUTyr|7Gp}Z*}%O-gdj5ua*7Q^7$VrqF!P9M+f0$3>ZHtaWsPlSFko|VD6w(%L$*Sy zkn68I!2A9!#AQm#=h+qZY9ul>*&Xn&)7}AJP}pV?JqdjipOpR+g8El`Wgxrw7{x#C zgLrw398yPpADZ78+roTkCIS05GUN(S{-lvPYbJ9ya-O*i6KBKV^o>4w>T-BiZK;JT zFt{79^}lYWHG#krgtP}?ofXqci-kD@o*t30&-t<$Utet{c5qIK#{J}a!8|t_LRbQG zcofXx$mO`Kfk{WqAN6K77FcoNL1t-*_$@M@zvRNx(FA#$>m7}}8S{&WPL2&zf>R8H zQw%yQ#3z)FnAUeRFk2$bVsOWZPb_rALe92OPATLxJK`XRY6{{^hn!A_sHqjcZuque z`a}ynzwVcvlxf9}>tV=@^N|z{sWcxN3y}~0tj2wnm~GHCPEyV;KENRU1^+*dd2oaN zIyl^O2IfIfO$wL=K9}Xdta%1Le}K_B<}s@qs~cOurFDyADS4h-26@LDTLXC~97h6q zk3imcja?+&Ir8%NjxQkf!MQIT@IeZ+@t@9r8nJ7K@!igh#t9=D^EG@5=3nr^mcMP1 z>g{Bu_|^w`UKkpQC7qHRWy`phlsIA?;YC&7qro6(jj!D$lep6Du-K@TEg(L zyMWmpj_ka`5Y_v;uQdJ?peo1wM4zaYXl8IIH53I+rbu8i)0Ijwd{7X3#Zjnwwe9k# zI^|?lh2gbP22j&f^pm61u-z!SSb&I<#vt+IA8z{~AjgI_FmihfuAvH-1 z*GU6CeZJK04yHM@44+G@ndzQWk|yz95_$?d z3RgnIWjL|A5-umEB3JBX^6`$ic{|JoBax`(Ad_H44=9jGYbj}BaMQ}}8`U+*4>S1S z!!yu%@#T`_BMdrt1kzW!Q3gsIGx`PNhT@}4#pp+1TKgOGGQ5pNb<9|kEbS<>f5y?` zI%AO$xnAxbgG!hv6QrH;_HMEDDVf@WCk*PPVOr2^rU}djxej*MFlp8r3pD|`9_Wq+ zihD}xAm^Y(1UdJ1#|`FOu!tdNd-w3c9CfW^!WQR4Xi=pfktEfxnec4QwI}N&C2b@TRM|Qi}JN5_2`G0bMgB?CFKmtXac2Z(R?P!q(!nc zQ0BzP1Byv9mN_XJdl0hoSTBE=g8xX2y%XR$E5bTL@kI;wEP6bWZIXEWyRF>#Y*u(Ny||%GzHpg zRGvd=QQbKIab=_NvyYA{wW!e;e_n2%1=|1h{M_iMOv+VmzgHcVf6VyadHE_eMQ&BK z)PW(BF$7Jd@hd@ujz-Ry5iqaSVs6>orWQ*@0eLNUBfqU2wxio|)1nTgeJX^}nV&oC=|& zj&FexJ2ZX>j%5b{?1Wj^!zkbu1oOYKGixRe3d_cA6`Xmu)HKKb8^nJNfHEIsSo-Fg z5b8E{T=?XEEQNf}de_Y>sr?1)cQ;?hYAn?Pf;)r+Ek{{;X_y8co>&spZHYj)?3Sf~ zR5ygg#_bZ4s9Q5k3G-u-O=2MTI=30wKk71BdPTUxZbA6nmKBrJ_k+0m$#xBpp$`lF zegz@~ZZjgqWD5|1zS+;7Uon%VtzjBuTYsOhQR}0uX7!L%iKRilOC$JRT`DgIqQM5) z4^|r$Gkqv|6$x$Z^7pLw+s?4`ns5_)g>0_bPLo=MMM6PVZnDl<4gF(9^lqc5bKh#5 z%hGGrBleb&%Qvc=g6q(`;hr=1KX6OQ&RLrkinRcZmIpa2kKk#SlFVA9+0v zdnNdAt+ZDJ-yOc(k7*IVxOYAfYJQW=uq_bu+yg=l*q~GDv++rGR((oR9iUf?1%@?Z zv$*`#U;p+`>WxrEPAFIXLD|pVD08cI^cerwuy=sy%)ja^Yj`(}nDl_Ij4S zJ#DfB?f@lDDcH3EV&Oy<+f4Cb+5=-o+>H%l9viUEsoiEUz`mJX%GO4ghuC{aAn5$t zPpLnK8>XTrWGFg}z~Mlg4aCLS-QLJZ5KC_<9F!_?PLR(zLO$njIf*}J@f~AW`pzL# zHtwiE0rT%{iX*LH81&>DuaDWE@0`HWjxheCLXI5!f!?={>sWegxSZ(yn2_Gqvn;)R zs5J4$AY(U1Ft#0#b_kFb1d$d*Ann*8?(22@hrP5zEB&eiZjL)3IWl2+vg~a0%##ps z4p+aBeW8QRY0L;|;t3(UjWyWJKHa#ErFRM1S{Q6=VMJTIYNRL;(Y-ga&+W>^ue0u5 z*AG{$gWd~V!y&rEB;_Au^Y-WlHO|Jh3B}&?7)AH9-aTn7eP6h-XVkjzeCBtP|88G5 zdEH6|j&N|b7gdTO{!7YVVb|UFG)p&yD-nf0C#2j2y4p8XnphL$zb1nJeSoyTFf?Lc z6e?l=rJI8- z-5k-<15H#@0ej_vDJy!woNt?Ho7uq-zhxy%BjC4eXX#^M3I8LM@EAyVJX`|m zvj!QoMlg6BkWLOEv2o{w@}Gp#C&Q&535h=mC8xqA#M(a<);k5IZ9}DrYl2O$iD%x0i~~pOWnfeUx$)6!xI6i_nolbo7oBHZ-a9qxPK-CV_N{;`GDQ`=6x*v zR+t=UZBvk=O%WWu1(e?zLSo~76jFW%O5Y2Y{v_n+Jt#RFE+HKKBCL1TPMul7esFd! zOMftglz4lPgWDrG_y8z5!$`ji+i*h3xuG6S+!Cz5MOgi~b27W<+=z$v)q2>hh!CEt zXqTZR2;r1=k}wzzgnOU#u=J-xEsVc2$jY4pRz{~hA;S}&K;!?kl3nd!*M53LVFmLc zAt13R8hq3UMrmi5-hg^WnA;P^-{A9kxS6#2d;aMkzY2~2$wfYr>w;Z|4dRhr01zIe z?>;pO!8hsi2p4W^{GDw5XSWY~+I!ATvdFgcg-o{Zv#|x^yiSFsFOUl# zTfldDiZj6<6A>c^gy4I7ws*LeGclWXDJ}MA-|rxu1myU@ z9gvapitx}f9TqGs6vUS{kiaexej@x3TYbYbe^sUhOW_C}G_sY%1ElJyC!>EQFlc6<0wHf)m-|FA@bj$Z*WuFb{u+ zpx57B1nUYoi?LP&{J2BBgz0($A#4u#oI4hT{R~_;lR_;l?kWTw?*bi1`Pf5WOv6vH z7r!t`F1x%vyV>-wG{fo#PJocnK=iOXbO*|Lqp^BwxP9;s2R=ip0vgK)4!Mc?NxN0# z3%iG-5RuCXOJ#~wZT0r-_jr5s>^)!U;uk_Mb}*Aaf^7|8)9j01r6g>CB^E}b7MJ;Y z?uBE_2H2#0l`E$PM!+eaMypC#`idIg%HD8glt3G?5!Q7j8-LB-bwx*6vf0P3q~=@( zQw5U+S2#Hw4eKRAppID2`*;%{H5MzvS4sv{bV{kfY z6ig@YMmw|yWKc@W4A`Jd!0^jU{PkYN8A>NAe>b{X#jg0#4FcW%U8Xd}`!h)%|IV6q z6=EKP637A)5G$xBaga{XF@I1984Gb_Tw;!gP|6HBN(m$pt=EKH>)Nla209`jI7Z;a= zW3*wrP-npU1gJDTp93@y7V%&cO)hrrkI%3gUJ#?XJE)M|fD*3G&gWr0_$9a=aNbc7 zJpTekzlG;hSnKW$*1tER{%`sW!YXP18<>p=%Y+ZY17W+#g%m$SPsF;|BfmAUnm>m4 z;o{UdX7FbjY^fb>{XI#&Y|S5Uvb1NYSuQR$!ZbXTVI+p#~HzAn1zZj2>X$iz3lfHZh-h*=x z=S|1z(cz8)hpH03qf^3nCj#76c&3K%LTEN<-;b6X#AS2QP9@w>p_^Lh$AwZw26x$_iG0g}H{ zIE$mj5hODsNQ&_uNq{8xwHQz3XekbxT9%;axcO47#~$tuDINol2c>u$N6WAh($~vy z%AhtAxu6Ad0t@8k%Wxeaz9_@f;n6F@W8tBZLvV8N0~kD*?lN<#}s}7xnc#&GpK$PT~O@`i;}X3SynPxcmrmv6zMyH^$>cOo;jLDFN&L_GFuCc`5GaInu;3F`U@s^v2>2z_M)OanlvZJ5-MvW(PbgF%tBM@ju$Q!36#f64bHEU~tBaHMO*sLTkTYx3XtboT0~ zOYta6+(q7xab2l+21nBZ;)#z0Wqu?=W*XPWulCWa$mdyDQ)YyqC+-s(kI7DfOq@pi zA($TlF6+=YZfU*HIQS}e7Vq5J_()r0+a6=oM;xskRL9H+3((?8l+4HN(c-1}5ciW7 ze!FQW(*%)shsFb&tk?ZDe+#|2 zd0wGT$j>NtTbJFXyDO-W*gz>!O_UeY9G!_rrshY~$nrL5zTEr+PBwH~$C)nQCXlZR z#}tJ7I7sfBe$p5r_a%5}Z7}}{Vwl>=$)K;tz%^vz+d$l(Gx3Dsb;d8<(P?$YZs-j- z&_0#MaC1OP&U+(P$A%?50Fj^^or{P3yjq_Y~sMiT4i(!*L`~zK46h5HE^dNEYmnI3WqD1riVm zIeHRK!*6plCgGX*5$@hecpN^?JwFLA7j*2+0w_Ces;QZsYQQWNvj z(i2O6sQo?s(J`6NmkQWOGV2jX7r`|BDtCPm9+OZD^!L7u6yr|A&mh2a;AL)g5uSv1 za}O8cdAOGQy$EK0G8j4UGOW%IccVB}Z~4U)t1Ga4=O%n&I06JdY${V)5r1D`(I)x8 zD>Dt}2jp1-Z4Kd+1aOF)i=O5ln1*)@YA*Ykpk|&CXa;LyO!F+CxDSs)^iS~!`2jj$ zscYsY8n9ci)>;M97ADJzINFFWj3L#I0lIiL>CdxwB&v6C42LR?xytjh)mVi_6^0Zmf)?F<#_@0oVZ_Wl=-x+Wg^ zVPEJN#C0r$&CHs`SixObh=+bSk&AQSAy<`UCVF+eg!3)L+6NZlSgvR>{3zTOQt9Ag zoMy$(Ql;A&e43z*9){?PaK93L6H?p=cOUnHBe@qm`vc37;tt452bck{2;k{rq^O1G z9Wwx+&hQGrqu`^*yTNqeZ{Fth87$!eItEK>Fx9~j;_Jm zxwAK8Wzor4q&N-m9>9G7hX6zrL~j7qcV2_fp5WI^HA{8FQIhd!Y>YfQ4n~x`s(#(d z`r2DL+5)Rzc;!xfJ!r7`x_T035=h(1w#7VS(KNbfb|v|TVWt7+kTZqO%gF&*L5kUxftP|w*>v5i^&4u}E?Z8oSXWQi zF59rNcEhT5Yjfn)fWMhGR z0|JOn-&(r?q+eNk>vDS2^7{3l;PnCd1Cufr*CgBE#L$9$ zy*>vm3+IER^OkR*!@VBv#r1)1goXh(REFlSTe))0@{j?ovytwFQiK8)Md;LST23!p zw|2#YKt6D;0$2#Z zRLz^h(Q86Gw%|E%zfj&6)?jNx$?|1%-b6Y-Hy{4VpHg`Jlsxz#1R+yJ8Ctex73o++ zh8Gz?f&7pjz}{$(mYzGKVn*@286`P6IVh~Va9P#d8S_F#sA|pfTIf+5Snzt9XqKpo zu1j9`_qEydS{S-(moI~&+WJ*%Hq+}@-MVqmG#Vh%1;LE;J~SUTkTo!Jmap5me$D2b zz$i$sqr)8pN~TxTu3EFaE{CoTkNqVuX3U{^0`lnb(`a}E1`-M)gT!IUfI#~CVA=YO z%a#pazPxUE9W+j+Ok;X(ejT@JEiO}4%pgH7C95{o(p9ULt)oF>bk(~04G2BA4##0G zt{KA*y>rPnoEE(dMM-vu3`oo|HvHfX=wW<6-YC0Ebhr5a+>NpkD8r8=@?<HXr3ve4>y0De6$td1~&+HrL|tp{!a%ovG08U?a9%I=^3 zG}QsD!dRi}@yYDMACW?e=2p$u9(k|>u2M*Phgw8E8%n?IFM94|C_U5*a9c%s;R7HO zZuZ18mU%}*h?loEHtY|jKjJqU_dt5Z+EoZ3i!{Bqb}dPdC+Q<_>9!yQErN77Px#yy zDsR{&K->!Hj15Tf5lv)~^5mMMOdHUWZ1>^UnFAU`DWP4fwPu4Y};D^T7kjP-@6YY#YKS20KXGB1h@|e%X1%s=^Xr2 zH2@_502g-@#|#dCG809^AchtxbPh8`a5g^0z3;%|#Jk~t zWFV05xPUp%;{cL?tmGzd#Z}2Kf;YY}BVYq0c+QLqn&JP#0YCP`J-ij)Bp`A!g2-0F z*LGTouvZG>3P?mTWmBR(R) zZ4-1(gVz9GA$a;f4Y+ZJSE1bDRpf@LS@%vk-~P!$hb{-TQi?Q=-i6PTooL`EDic2o zh=)ECm^kOzMcCSdM~?o*i}mRI)yo~=QK#W|f)T%{p9cL_^&|c(Zr&ce64d(g9y}U9 z%$?r@Ui!fed{>ZeR|MTXgzkL;aT6~D(Jn-w-G|3kRY&G>BW26APt+qTJ6E2S+t z;yptxe;KUxWkjumSU=qBB$1gW_@wPXtp>XLelG72z7enH?l}b4980->!6SdJ=M^xu z4X)tL8M#FZ-__+Ozc z_@5H~lHkw!9!ymL+W``Az%&hU@%;#4Oo=eKQ{RVjfJT5p@pWGZ#s69${$W5k25=hS zEC87(aR(RoFid_KM_}~ttmGCS!I`RbxLN*W8yx2WiUEKIv<4Aplej}iaLx!axd!s! zpPG?~eiI;@yL<$HNoM23E5W9(KxueMgQoUBzvU<{#Q_X=5W_9Ncpk<<7iRl$LgF{U z(r>O^`fafE+iRD87cBiwP)fw)yvMOZOdMGpeNs4@z7OJmFTm$KCy7-*DMY&(M7tV+ z_9Q_&B}Drni1tGS8vIfhN4E*kuKO{F_M-sJ4pA_U5H!M*KvM{s;Yom~=mjj!UH7#7 F{{a~xl>Pt! delta 21350 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 XnZ}~yBUX479iZ$gl~e_*Ux@pEf=)^6 diff --git a/firmware/diva_pico.uf2 b/firmware/diva_pico.uf2 deleted file mode 100644 index 0918b9b1398484c6ea760e52ff0275b15d95bcb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121344 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 z 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 fNPhall.cali_up, diva_cfg->hall.cali_down, diva_cfg->hall.trig_on, diva_cfg->hall.trig_off); @@ -276,14 +278,13 @@ void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const *buffer, uint16_t bufsize) { - if (report_type == HID_REPORT_TYPE_OUTPUT) { static uint8_t obuf[48]; memcpy(obuf, buffer, bufsize); if (report_id == REPORT_ID_LED_SLIDER_1) { - rgb_set_hid_slider(0, 16, obuf); + rgb_set_hid_slider(0, 16, obuf, true); } else if (report_id == REPORT_ID_LED_SLIDER_2) { - rgb_set_hid_slider(16, 16, obuf); + rgb_set_hid_slider(16, 16, obuf, true); } else if (report_id == REPORT_ID_LED_BUTTON) { rgb_set_hid_button(obuf); } @@ -299,7 +300,7 @@ void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, if (olen < 96) { return; } - rgb_set_hid_slider(0, 32, decomp); + rgb_set_hid_slider(0, 32, decomp, false); } } } diff --git a/firmware/src/rgb.c b/firmware/src/rgb.c index bca7fce..9a869e9 100644 --- a/firmware/src/rgb.c +++ b/firmware/src/rgb.c @@ -22,12 +22,17 @@ #define HID_LIGHT_TIMEOUT_MS 1000 -static uint32_t main_buf[37]; // 4(Main buttons) + 1(Start button) + 32(Max Slider) -static uint32_t hid_buf[37]; +static uint32_t button_buf[5]; // 4 buttons + 1 start button +static uint32_t slider_buf[32]; // 32 slider (max) + +static uint32_t hid_button_buf[5]; +static uint32_t hid_slider_buf[32]; // 32 slider (always) static uint64_t hid_timeout = 0; static int8_t button_rgb_map[] = RGB_BUTTON_MAP; +static bool half_mode = false; + #define _MAP_LED(x) _MAKE_MAPPER(x) #define _MAKE_MAPPER(x) MAP_LED_##x #define MAP_LED_RGB { c1 = r; c2 = g; c3 = b; } @@ -87,6 +92,28 @@ uint32_t rgb32_from_hsv(uint8_t h, uint8_t s, uint8_t v) } } +static inline uint32_t mix_color(uint32_t a, uint32_t b) +{ + uint8_t ar = (a >> 16) & 0xff; + uint8_t ag = (a >> 8) & 0xff; + uint8_t ab = a & 0xff; + + uint8_t br = (b >> 16) & 0xff; + uint8_t bg = (b >> 8) & 0xff; + uint8_t bb = b & 0xff; + + uint8_t mr = (ar + br) / 2; + uint8_t mg = (ag + bg) / 2; + uint8_t mb = (ab + bb) / 2; + + return mr << 16 | mg << 8 | mb; +} + +static inline void pio_send_rgb(uint32_t rgb) +{ + pio_sm_put_blocking(pio0, 0, rgb << 8u); +} + static void drive_led() { static uint64_t last = 0; @@ -97,22 +124,25 @@ static void drive_led() last = now; bool use_hid = (hid_timeout > 0) && (now < hid_timeout); - const uint32_t *buf = use_hid ? hid_buf : main_buf; - for (int i = 0; i < count_of(main_buf); i++) { - pio_sm_put_blocking(pio0, 0, buf[i] << 8u); + // button + for (int i = 0; i < count_of(button_buf); i++) { + pio_send_rgb(use_hid ? hid_button_buf[i] : button_buf[i]); } -} -void rgb_set_colors(const uint32_t *colors, unsigned index, size_t num) -{ - if (index >= count_of(main_buf)) { - return; + // slider, half or full + for (int i = 0; i < (half_mode ? 16 : 32); i++) { + if (use_hid) { + if (half_mode) { + uint32_t rgb = mix_color(hid_slider_buf[i * 2], hid_slider_buf[i * 2 + 1]); + pio_send_rgb(rgb); + } else { + pio_send_rgb(hid_slider_buf[i]); + } + } else { + pio_send_rgb(slider_buf[i]); + } } - if (index + num > count_of(main_buf)) { - num = count_of(main_buf) - index; - } - memcpy(&main_buf[index], colors, num * sizeof(*colors)); } static inline uint32_t apply_level(uint32_t color, uint8_t level) @@ -131,7 +161,7 @@ static inline uint32_t apply_level(uint32_t color, uint8_t level) void rgb_button_color(unsigned index, uint32_t color) { if (index < count_of(button_rgb_map)) { - main_buf[button_rgb_map[index]] = apply_level(color, diva_cfg->light.level.button); + button_buf[button_rgb_map[index]] = apply_level(color, diva_cfg->light.level.button); } } @@ -140,7 +170,7 @@ void rgb_slider_color(unsigned index, uint32_t color) if (index > 32) { return; } - main_buf[5 + index] = apply_level(color, diva_cfg->light.level.slider); + slider_buf[index] = apply_level(color, diva_cfg->light.level.slider); } static inline void update_hid_timeout() @@ -154,15 +184,16 @@ static inline uint32_t led_rgb(const uint8_t *grb, int index) return rgb32(src[1], src[0], src[2], false); } -void rgb_set_hid_slider(unsigned index, unsigned num, const uint8_t *grb) +void rgb_set_hid_slider(unsigned index, unsigned num, const uint8_t *grb, bool flip) { for (int i = 0; i < num; i++) { if (index + i >= 32) { return; } - uint32_t *dest = &hid_buf[5 + index + i]; + int target = flip ? (31 - (index + i)) : (index + i); + uint32_t *dest = &hid_slider_buf[target]; *dest = apply_level(led_rgb(grb, i), diva_cfg->light.level.slider); - } + } update_hid_timeout(); } @@ -179,10 +210,10 @@ void rgb_set_hid_button(const uint8_t *scale) for (int i = 0; i < 4; i++) { int button_led = button_rgb_map[i]; uint32_t color = apply_level(button_colors[i], scale[i]); - hid_buf[button_led] = apply_level(color, diva_cfg->light.level.button); + hid_button_buf[button_led] = apply_level(color, diva_cfg->light.level.button); } - hid_buf[4] = main_buf[4]; // HID doesn't have start button light + hid_button_buf[4] = button_buf[4]; // HID doesn't have start button light update_hid_timeout(); } @@ -195,6 +226,10 @@ void rgb_init() ws2812_program_init(pio0, 0, pio0_offset, RGB_PIN, 800000, false); } +void rgb_set_half_mode(bool half) +{ + half_mode = half; +} void rgb_update() { diff --git a/firmware/src/rgb.h b/firmware/src/rgb.h index 2056448..caaf53a 100644 --- a/firmware/src/rgb.h +++ b/firmware/src/rgb.h @@ -18,11 +18,12 @@ void rgb_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_colors(const uint32_t *colors, unsigned index, size_t num); void rgb_button_color(unsigned index, uint32_t color); void rgb_slider_color(unsigned index, uint32_t color); -void rgb_set_hid_slider(unsigned index, unsigned num, const uint8_t *grb); +void rgb_set_hid_slider(unsigned index, unsigned num, const uint8_t *grb, bool flip); void rgb_set_hid_button(const uint8_t *scale); +void rgb_set_half_mode(bool half); + #endif