From 71147fe6dfd7ea6541455d6a147aba42ad761fbc Mon Sep 17 00:00:00 2001 From: Nicholas G Date: Wed, 21 Jul 2021 17:03:32 -0400 Subject: [PATCH] Added Encoder Reversing --- README.md | 1 + build_uf2/Pico_Game_Controller.uf2 | Bin 71168 -> 71168 bytes src/pico_game_controller.c | 8 +++++--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f087570..67f334d 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Currently working/fixed: - HID LEDs with Reactive LED fallback - sdvx/iidx spoof - untested on EAC - 1000hz polling +- Reversable Encoders - Switch and LED pins are now staggered for easier wiring - Fix 0-~71% encoder rollover in gamepad mode, uint32 max val isn't divisible evenly by ppr\*4 for joystick - thanks friends diff --git a/build_uf2/Pico_Game_Controller.uf2 b/build_uf2/Pico_Game_Controller.uf2 index 7fee644f2f57b871556acb1e462cea327afb5762..8f48ba2b64c673a01c8b4ccf4e99d76646fd8db4 100644 GIT binary patch delta 6839 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 delta 6798 zcmb_gdstLQmal5M5n7sDXhK>vFI0jA8qiE@(BLbgK^L=*w$BhXp`*t5 zN{02Q?E@WjjN^lu5F@Uel?h+gn`X>d0lcjYq{_C0IEP;(WqTOyhKW&)EY8<{k}FO!~|!dNJq z9b{SCW-#~_z>MPwO?#Iuy>1_^^^=4xIFh(dDAAktWVXoEqc#rNZ@EGHPlgg ztAp8>G><5XuVCr1EyIg?SFp6FT3C8{^X#@s>>mo6X6VLkJ)T+6RLn=Qw4W~yEsApw zEMm4e*Y$Q|BD39U@7M+hL35=i)ZAG)J6sGfOSpQ^L}2UE0L#MdzJ-Fz;_^ z-ON%7t4oqFQl0bdSKr2Q+m1nUHeZ{=zn+vcJ*SW3O*U;@T1j=@oZM9B*X_)DwcRqo zULNAz`heMb6@_?xon+;g=zfosESm*-uLn`%L%jd~pvF}WueI=sg4Nr}Y!X`IgAi~1 zgEp7JpRPVJw2)hw9P0f&Ee=bhonc9%_jf*7v^Qs7bC1Mbc?EegW8UKXFU0Re--7-# z_nD1bg>|;Smz~GFGww?^W(_;6_pYM5Vb)OB-H|MI2+2l^k{OS-7_i2iF#}_4Gh~Wy z^VJCW&!W-B(R?MXGLESH#>ecVnxFRpP zJkyvS+d8?Z&rCMp$L3;;>5ok-cEtCzhIseiomkXo@&t|lv$O5&zuK8SvRQwO*+TsD zjqVuduRy*(-hh@KhPsRfmZ&7$Gr2P07t--V`%^_Zg`=%G4(_e(yl36WLcG;?^~}^Z zswfNgEZA#Qd)3{VoQM{KH}?Ve-tJ)izrXZT^F7;E#u7ukXYP92nQZX7FwdSX+9+B0Y%8e<8@bEv`<L4v~IK_avA!86h&q= z(6`Yp`!GI{TI`A8XP}phOzD9=k>pf0tNtiSDl$mdWRPx75E=B?dAnUi6%j<#u54&w z`f-v6S}fXt*AYNcT>~o<|Aey8PiPi8Kp8<(2d?5)`eI-a$r)<+K}aXVuDh|ER%YxA zdlT^CrG{*hhXm6z_fjZ(X(-7#q)wJrFljX;6XL$Y+J3kxZCP@%XHoBRmUh4SgPSC0 zsw6`ZBojO6$;1dTfrAywRtO|5_f{hG) zYG91y;pzep!vYUq5FT`&V~^Gxt$q_0hy4=g87NhhM^M5U>ty5RD|f&@J@Y z$Y)8;Ql~Qt)5&uAcXePYSwNPl=v?|LE1%>s!3tXN`WLU5zM7bCmp;UiF?r0M@H)U6 zA=PwuOuum7ohF|b8l(Q%{ggdB7E{V@Hf_V{pnn-*AQl>s)Aev$6?&_No}4+Tcdk+t z|C5j#LlbjHg)ako-6{xe&mHF1O8nXvx!4qWYRXSzf_e7vCivF)M_Z{NTR<2h$noRnS?3&!@vx2y-dyrz~~>mN7PVIhi%;vT^y!W?o1m z%RUXV>eVB56E&2vK+{A*j`j^^WpO%^ab{?Mlk4K zVNzGo7nr$|CNB67k{1Rk%)^vo4C_{mg`jY$K8rx;s)Ba z`VEp_?IIql5RdIf{OSSzCf$5>0LgCEvl1-sOg@)hcPEB>U&V4&GRaBrx)+hWCb&V( zPbq9qbz@tDG}jHGME;fXl3RymTnF3wt}MnWxN+TZ>*2FO^?3vFH=vB01}TROH=CbU zFi&^GYyxJBn$Ko?2xI?BlehetG?w%?Jwqbt=S1zFS$xdX_ZnsV+mN8!+MHX>zt4PF3f$J6Yc??~>~aE4$c0um-x zOWv(g??S-c8;pnHkm-lemEB`Vt`0^fQ#BT;I-8%Mf3AMX(gep&h~Sp$eRsw^^xbK} zn~darDr7Gh_hlF_z)4aVH|-`1!gct6=B9-QjvI2Z@{N>yFfFhH$#f7! zI(XL92Ih{nSS!d3>VHUmdAyC99LhAThV?LQJd_rG7QL&&j~WiWK=NTtxetTsu*@B_ z_%N=7N7a!dU^t59u8pxs*qzckyz4`m{44D1S_6~U;pOF@K?WY|P98<3S~Dmn*5c6n zqb%9sj-A6kfqMt~f%?Wgr);a|G}}s|iGKvDP7VA{vf!zM<#;ej^Hc>kRRbgEahKsb zxF!1N_;iv_sNU}(@e@e=WDsqiuArxD&_~+cwsY+Jb}=U(l04%lntO7y;k>{1^T{-l zPpPk@e*xvGI{AbcfmGUz*?$h7#6k)-T0XJJgB>q7_Go;}g^SGl!InB;sP zd7W0D&VR#QHm|5L0e}Ye=n#c!8q_HL=NnH^5v2r9NCL#J_Q5+Z(3v?5^ zC!_xLI_7QbB>BUxAhVSqv*EuPBL2ja^FstV6Z9d|8SIHOH5pYP7sTSHB~Jl)mL>@? z-cfJB^d=j!Ad zc;67QH1l)SucFe|3Nd8jw`vSyYBG3g* z@C(3QfbC+C%l>Pn_`gQI0>#hHx!#TsVeeGn(wYh4Q;<@cdvOszNMBqW8*vc2x86{j zTrnQ?ZB@B0AzmxEF9*5J_#-B+&WkkMp%e8quV%-$<_plsQBtxlCNb3)-x8@et}%7LC!B@+sE>L^y;+(Bwx>@ zWd5JzKPB3esQ5bI-v!}j{3jFe*U_#$Y?-)w=z_9zds$B@dgn%Y3-v<4dN-hY8zP@HO@YxaNrO-G5!Pp|V)*|HZpJXFU2QBV%^^^7#vw zxt4ikT>#CaJtiGDdrEY?$s_BvX1y@$g*g;veCqMsGw_t{+1%z?8OjfN&*Lf!SyRfSx70RPv}%6{+Cs=Rj9-AH;+?d9 z4wGUb>2pxxF)(Zr0>kp9bINATEpsiKRWWbw5}Xy#J+e_r+;cyiCwoea+!3{L9(*C& zh5RFvKJvV4bh z#s3Me0?y(SoK&wX$5*A-mYg)>n^GsfDb4zgl1-GzCYrnETHso&a%Z7+6FSGb zJbt<~pM79@0(VZ0{&Ze3qyGFaI8wvKk?JwU zh&je^2M_n`kKu`N1%-GX@M}<8@oco>YTCBeb2)|&j5&foLi_Pt{b4MVUPcbzquBn6 NW$+RDj79Gn{|B2_e#8I( diff --git a/src/pico_game_controller.c b/src/pico_game_controller.c index 38e5df8..16b9600 100644 --- a/src/pico_game_controller.c +++ b/src/pico_game_controller.c @@ -36,7 +36,8 @@ const uint8_t SW_GPIO[] = { const uint8_t LED_GPIO[] = { 5, 7, 9, 11, 13, 15, 17, 19, 21, 26, 28, }; -const uint8_t ENC_GPIO[] = {0, 2}; // L_ENC(0, 1); R_ENC(2, 3) +const uint8_t ENC_GPIO[] = {0, 2}; // L_ENC(0, 1); R_ENC(2, 3) +const bool ENC_REV[] = {false, false}; // Reverse Encoders PIO pio; uint32_t enc_val[ENC_GPIO_SIZE]; @@ -129,7 +130,8 @@ void joy_mode() { // overflowed / underflowed by } - cur_enc_val[i] = cur_enc_val[i] + (delta * changeType); + cur_enc_val[i] = + cur_enc_val[i] + ((ENC_REV[i] ? 1 : -1) * delta * changeType); while (cur_enc_val[i] < 0) { cur_enc_val[i] = ENC_PULSE - cur_enc_val[i]; } @@ -209,7 +211,7 @@ void key_mode() { UINT32_MAX - delta[i] + 1; // this should give us how much we // overflowed / underflowed by } - delta[i] *= changeType; // set direction + delta[i] *= changeType * (ENC_REV[i] ? 1 : -1); // set direction prev_enc_val[i] = enc_val[i]; } tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, delta[0], delta[1], 0, 0);