From 5745a4ae17aa227727dabf7dc6012872d2dca610 Mon Sep 17 00:00:00 2001 From: CrazyRedMachine Date: Fri, 24 Sep 2021 23:44:33 +0200 Subject: [PATCH] Pocket SDVX Pico Configuration --- README.md | 2 +- build_uf2/Pico_Game_Controller.uf2 | Bin 74240 -> 74240 bytes build_uf2/README.md | 4 ++- src/controller_config.h | 19 ++++++----- src/pico_game_controller.c | 16 ++++++++- src/usb_descriptors.c | 52 ++++++++++++----------------- src/usb_descriptors.h | 12 +++---- 7 files changed, 56 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index a209486e..36153367 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Pico-Game-Controller -Code for a keyboard or game controller using a Raspberry Pi Pico. Capable of handling 11 buttons, 10 LEDs, 1 WS2812B RGB strip, and 2 encoders. Developed with SDVX and IIDX in mind - see branches release/pocket-sdvx-pico and release/pocket-iidx for preconfigured versions. +This branch was developed with SDVX in mind. Capable of handling 7 LEDs, 1 WS2812B RGB strip, and 2 encoders. Demo of this firmware running on Pocket SDVX Pico, purchasable at https://discord.gg/MmuKd73XbY diff --git a/build_uf2/Pico_Game_Controller.uf2 b/build_uf2/Pico_Game_Controller.uf2 index c97b943cda61dde7dafe9341061fa1750157c790..1bdb7119462b87ad0922448e4dc3dfe4da5493a8 100644 GIT binary patch delta 8680 zcmcgydsI}{x!-$U%pijY26T9Ocnl6QDk>_CsEEpIP!Z7(qlFPLL&9UkArhkj6O*7Z zxtgsRe5AF}q$V}F#!8l}HzYLm_F}4bNN6sJ#A2?A)}_s)u@wQs{p~qtVCe0=>#qC9 zowYvq>-&D+^X#+t!RB+S=5wl3{R(x#i$rkz^1k9h+T=jDgAg%MMa1sCL?A>Za`N^C z^f}?@$QhTb^z6M)a=!gu-Q027kwb{~HtEBX+YDLDcp|<%nFx77M5sdh;2J_Sq^R&0 zzbspIz(zF@0ZDQjei^8aq?&CQ z=Qgk@ngw&+K}2-45mDnw8YJfJZfznlDf(*2+ox#;u_RocXN_I&PKeSxZ2vy4@ zsi%MND>9cI*32kOvBor$#IQaZmzNdQSC)E=nDbi;kCCMO))Hd=+vQkN7N_(m?#EjX zu8g<-wUDM!OK9&g5}SXhWRf*%JxRIhrg6teOm0j`WUjG<#nH=bFu>Ggj$E|3$T%@? zZDH^A@MUJZ(&HH>@e{2|&w8{I&~6zHE>L;m`j0y7SiOqb@t9qXHW;maSmiPF_c>Gv z@r1^4=PnI6+B>qZH4q^cz7N6aGA$8rpzXojN%RRR$wWdjg|?SsPjQhK2Z;GGH%ZX2 z=y(zra6;ut93qJ!ee>AAY7;WGmbl)T)<`)vpCUGQ5Sx6&W}5Y|G1C69y*cvWB9h$G zb)#z_A&RzUUHkNt>vvPG_R#p9yxHfK`Vez=)FRp8$ zR|UP-2T6jqkH!~ek?hYTLka{8qLjB|}b}72XL+*S}koE8r zBxPKe&x}L1^VdiFiN6^cthKdY7utIfO&%3rgm|=BNpL*XvL}P5>iE!uq)PdC@5ckh#FVhb#a> zIx}d>z0V0Y1%=gE_E6ca>)v3qO~#4pvMoe#vKP^7L9dthv_|wYK$58urT}b@X1!Zr zzc;SbT~iS89T<6%B}e{r)R|}mHgZY$BYI>3+jk|}-bNzygZ8qx=sId<`=X=N(N7Q| zjlCN!r!fZMk48FT_eB3Sln9xGr1ik1Kor%t-wQkH-!s@r%8+|hjR-Zd(Nx90j-AIu zFD|@qTu7%5=e^B%%tn7AFuvXwz7kXff*fq!TQ5;1sZ>mS;vhnkZQ}ag22q zSU0WN%&p;?xi$V)_P41>7SHLkJf|gD64-ROJ`IAY6-)drYlT`t2Jr#Dk2z1<^QSaq zJo({n`w%ft>e3`uWPLsHc*OQa?OBQ*W!H#>5t4-wV=PRCqM7#a4gmRE_T6|qt?bpA zDL!eYPeYN-H0wsV*u9yPnV4p$-?3e33njkUFg-0dE*W9df)eqp3vHAr@|C&6cYE&% zc-P*73rTFo9M>pvI*{jB^yedqkY1+FbUFJ!GR1fxYo^4_u}P*nlj959 ziLecn#=cIUr{k-9C7C5Z@In|5-TtRWi@F*8QI#16wXecgF)^c9H^R=gXILe^`EVwq zBwS%t=2yijbBRYYG|Dx50UJfjgaZpoVq0NKHPjqMJHiPw`Y_f$#TI1l_K6tcq+G;} z$wg*Kvd$WiUlSL=l?`GGYxjq-0J>O)Ph)vmO%mE-n3O8$BKV&g&<|Vu&TE`iSIU`%TWVCz}B!d#h7_>yxodfp~FZXv#rZX`+lWt_T zYP!-Xf%@88MK}n2Z#4V7v!o(mp)=5_pC%cA)HOl4kK#>-Uk< zQ_Ma0@3#Ly%qea>2z%<^OU7PKQU={0em@c|lVqG}jB&Y8oS!+BD^5h_xpKb8s-P@g zHo$`RA|(Phgd1RCFXqpaP^~aM9|#34)X3f}m^7jbr)hrfnmk5V0d}V4Il8mJ>jVw4 zP0JtjNicmO(!YEToydll$1$NQX+d$q{#sVs)>B5)NK(sZ_|crN~Zvsm_K zH4uuiwq{S%9Y}UR1I?gf&{5D?P;oESYEW>fi!1H6wm5s<5W=K(;F(#^I;MpMalmll2#ucM7vm}{W zV`M78v++%@eS?oAvGW^oJFrW-2WhBbwj?uqjEo)GdsKd}JO(|F0;76FPsUtHX0D%% z7$3QsrgdB&9{v_N{I;p`;>AUvU*AH=JfLf!K2Q()t{P88?FbmtJK%gR6gcF$O;G5- zxZW>7PVm%Y&gsAK6L%*<=hEHs?)d_&*bQg*j0Px2(wXC@lXdO^&r2gb zOurY&cnNcR<+**p*^BYZemwiZ^D^f4M=MhD*@FG@8{`03_ow5)M-SjF`AS*{3C50+ za3q^rAAZybwJKKmO1UqjOy3HaSBiBia7q4|T2n%XULeA&1w^<7{~Y*GATnF)tXZ7L zS3#$E1F?^t9jhbz1iN}M9USjsy7n6qkhbo*?~7^NjN`8X}z%|{PiNdAb42alyDh~S0?VnDzD59ugvxn z)1&!X42Mjy-*>>fwlEwyW1Q zICNdXq3izLxBEM?)1kaxdn}6yB zN#b27I0Xf#{cJvCh9fd;cnWP8PGA_k<*dQ;jytd^1ca1a<3+1jE%|dXkUe|LZ)0M zzPH!N7di7;4H1jc_96@=Xh&T?YtVD;+*NMu3HFEgtW0%&0-JO8WgnMey_B}~VDx>0 zVx4CZf?u_G;W=ckY`ddvCvG8nlx`60pmL1<1u^>-1l~Wc;`aEEqe~^^Qa|L65Qsz$ z#=72L!Nd>J)oI?*`VStH#6ASp2cnwe6tmkOpawcJ^?VeF+=h91YdWH^G4JYF=u;GC zlN8zf6cKj5V_^&zY>E%e{GG0dDD!q1&l^)`bT&47BTbm;qhk`pZ=m!eIB-rra^R6J zmmtgiAX(=*@ch=VFgj6Mzr|cH?rX#@q$}7+y4)c=SCSPyYGi%~cR`#2b>^7Z9jRW_2sHbg*TY=F(R7?4`xN05QEA z@Rv%ada${1o*vm+p)Cw~RN&P(XMk^$d=0f{8iUgZp06A>b2Pj7)hZ@li`GYDTRs7F z%ZoVEv%G6{vh}Tk_=nb1C4V%YkxR#0=&%JB7yMHrc3)9~~^uB@a8}i(r zOzN^6^5Ltj{l+AA>qZ(AZ|;r_Cn}9LFeo@GGz^ddI(@K4P^n|lFSpxjeF0+nTLyOF zW~w6narVQ_cqZNoYjWUgplX{#_U3GP3J()3cR@&@2gk%*@UBvm&X2~r-B=YeR-e#9fEs)zH-mY@m z>N#*h<;Do7h$(cOB91ZM77#^MkJu%nZ<~yqgHLb{sm&rf>`6@gb798sqoZ+%qzWY^ zBoyB>fST!>Q(;a`b*i7yXQ^5jL6ddi#6%D18t4wi0ooA2PX0M&p}s*IPLhU+I&hcj zpa3TQKE9~kq3nPxfvn=d|G+aET93g9fdB|78|VS8Iv}Di`8rp)L%~GP4T&okDYU*m&IjYL*N*kP2)$6Ki z%c~ohcxQw$1z(5w8Tv{1?R$_KouyS37?<0st2fxnA48Wo>guYQ_%~VZuE{7?Z4{rV zYY>rUZ;EZzw)&b(eli1Xu%f1k$;DZH+Yx09Dt=e2#x1|;kRTZU=+p4Q7%r(x&sSB9+!-yFN z^weNP6<2@@)m&9uy0N~pvUGEGowL+_K%`zq*C3^cEuew8*>0<^tSGIj-&9&}+fr(` zxkQD;#&8vN=~V!%bvm5&rOxE)sS7qcfLUE9Mam_r{8=^BFg__s+_<5l>Txk+zBp@U zDw}?Do~uYh-_c&d1@$Em_s}&MKut}2bVHuy{eMK=^8Cks>mBGfrxW1~&&uhntbZx=Mmwn2Z+F1-`xMT{S5B?Z)Cx@ zMyQ8EF7WpT{C6OH{+wUzZpsGx^MB_0GLWXSB>I_aa2!o`1&yOdS7H#o=Bsp%Z^n}TSJ%N$J4nvdf?!T5Sj5?aGttCPhs2=nVh>tma4B~UX@jq&du^x#t*qseT za90rFlHATg`;pu)Li;FaP9-iTpsk>r8?i4)KW3)guEB6PzY&wqfnEZ`7ob0*->`W@ zg-e`3_lC4TN`yB-=Rp@ABf@&uuP4wPW}^SjQmL8^(GZv3NDWhG*5dM3jgM+LZ*+k8 z`0t5e-U;e+%{J0Hy4Ur(k(NtYh=3v99T@vb#TM)-rH-mPY{zxe$`RT~ni=j!_Vz09 zEgS6((0;uAkGdKnDf1o??$I!pJ{nQ)Z@ZM8liiHZs}o6Uwi35o(arxj=Mtl-U3UZD zjx(`4o^b7prjG^j5BVh+@;{eIhQz=ST)D^mk?F(lOaDog@S8O*F_xNjLx4#0LadCX zhShnI_%?7xk-IaSzRyn!ZTVxzHBn>7nJP{pa#L zU(We{&-eHFp6`3!cUli=S`TS@E~&Hy&k(8l50_O-XiGJweT1+A4Pi$*iA0Eo2?)(4 z%mv`jQ##S54y?FLO8@?&wzY4sr<9P`Z^;0b{C3DzBog+ktBCadL?R_&T(X#u7_zYP z-~Uj%Xv33467wg_YSr_~yvp+O&exwLagr7br&pe@JHkKHWXEmQ5(bqd(D;WqZ90wF z0X)#iua3EKRv?}*kB_jJ!0<4!O*`u8y^s8MFD)c_Q%~OL&b-~9oe^_e-H(ow6Mi^O z10RljNv`KF#muORvyz-ohOTi>ZY5UJ0L>~Znli8@JA>|U))wz3w(_l&yUEn@t<}W# zBv(aABmkT zheVUPKF-kcML)G{bi}+mvBofeV%4WZvCyZ1zCVtT?AQTnSy)s)e;d)f9=9N)yuFgn zqPY`KZ6|4EmDQ8V7F5qmpH%))4Y~TPpIXiirMNSiNp8HKWyidx4h3c&mdXvyG|TNU zcoKS~Ud;=)?bU8yxR+$9o}RxKMJEuP^H< zq7EeSqj7G{-$vT^%5h9|)3v-bJ~w9LgNGl~J;a;iZ7p`>ac)r}=|>?El3ywLh?N#F z61;dYsAV*;^QVhLf|fXtIWA3>;~BtdHh1_f$uWzT(E?qb?Gz1U4X3)(>u#%SP2V<; zOdC9^I%;rlEgI-g4wXsbQGJvYU-nlzG?wB7gIzan_2iH?3SYGB*pSrQ=M+(I07QGv zdlD=(jvq_7hKXef2@wSn@O|RE#p!hR`8s;i5KKZQL(8 zL9so0HTs5?REm;a&%a8YUQ&nEZh#2oys`ntwU7t~UkW~k|G^9I5~9i{*7N1zn8M+U zjXndJ$N89=Kza?PY>QX8oapevf7dyjA_!m zMBDHQVo?ultm>m+cM1q+WfQDq#`wjf6^aZkGX*s$<$b1N0M|fNMOPraDjfr~rie{0`8sn0E#TjnGt8QGM5;m>|Nf)Yy5>z08_6Bxopr|HS@iF3fm+0z77kw9Y7-6#*8i#W?ygr_4T`74T}y=;Y< zO8}uHtZ)zTfbYqk7?Mb?T>NH~*rptfv92ikYSNyxhv)ScsruDNIhz^f(M)(Wvo56@ zg3+FAL%>#kVP-C81vXt|g)b<$O3uM7I8;zaxA89u=5jXMl~{%}*#O0;Xvs%IT&NPR zpKVA|m8)IBi>H1Po$ol}cJilYdpWb`>F-ZR(0>W?D;_42ncr}Iq~5vydV@}I3a&EVcKy?#x?catSY6j)9muNOnjA|G3c2*^NrpZpcYdxz*+OWT{;w5HmW)^~{Z&Ge;!1GjPKa=YvJ* zZH41iaHJh$L=a{U0}njRw>UO(R-|Z{morW0o=|>Y)&yZ^1SQ=YEnAIk^2QbLr zzj+B~m9y!5zNAvQF5Z$;=0U0A&g^*SFC$k-fH2A2uwc$TB|~90Z%LNN27QiHS%?jBCQ)DG((Y`jG}SL*ih$~UV@9pzDYRRqfW|W zd&%e5f%3f5P`;^QQ>^Zzm)XEl)O#bWdl#az(y;S@7#z+*%677>pNhe1E!xT-!9)nBH zglk+TI>EC^;du@+n}9z*CQ~lUl#i2n-mE%S#IH~)#Ri;uxth{&2U7T&L(pa$~N8`=W%7H(;H8*+iX(E+W5a~Dquf{uk?2~-e z#+e0zJ6tGzqEK!?;b7B*PJu&zWG?yCB$gzhb!?AB!1deV(DpofivMQ&TtmFKf z?RK8EV^Wd{T~G3>x_wfN+hyp_IUHk%KpCv|`~DKk>#aqnH_?)PsByYr?=?BqNQp zp2$NYzgpH^9i`il&n&^L;KjMap5A?U^C}j5i@#13E#sSep5|=9Iu+!OSR=-B$U!qkp;yErJnQ7w>{s3_ zkl-5GqZ%-TUw(P>er(HIQAg`7RN!0fAOP#`7;hT_l1(f_!oV1(KE9SivPZnf1bA&W%zC|fP&BB`P{L}HJr2wKty zQF;3S%07UyBN3Y6ZaLp~Lv}3RNA`q*6uIq>s)T6ebD(@fC|M;RD(U$P-2c#~-4D|P z{5K!Yq5Jt~AI|5@AF;;qMWHN!E+lyRln^AJ5xb>wUAZ`WSTsYihKgDyDoV`pHbpcQ zu@;6`y4+!sy}S0WZM)l~-u?VtKf23D%4PK^tbbIHBqX%x3*CzL0p9!3EyfDeU%>ZR z&jeHl-IPf>EJbkac$8zuk(%RXTERCTpO611j+b)wiL(ANRDV*NRM8>tw@_xn9R2(g zJJ0H0GS-Oup`{-?_^GmkCm{JL5`L;!5>jX2RDq%;w8i;U%SUMv*PnvmsU7ix$r@&0 zrGAw6i;7oz!gLbnm$(+}`ngAEeF3?IjTCsxG6fwQmkDd7vg zR^E+qiXV{8JTT78*Kp;G;>r+|p8G*IT6B`$wASD}9 zGspy;J|RZZXftEu$X#{IR&#bPUp3go7oM}oTk*H4Eyu{Tt_1)isUq)ovDPoT2r=Wc zoF+&}*7EEmVl3LT$g^_giglF@jmsKEI!Wa{cQvrmW%sRQ^BYz-u4$;RU%5umXUv>c z@C)3Ji<%l68&6(=*h5e%Xrj>#q=)wb;K2xTHpwoo5@F!|C;8UK+>aW2SIo~zkrSS#d%`sj1 zK;s~ks?=aerUWM%FK(dmuJ2OrotQ#$=;nz{v`w{{Hfh_`TAD(p28k|TH)FG^DYi}3 zr=>cwi$1Q}EH%Z3*0ga?X|_pebei;>5Q=S6|5H4i1x#ZdFJR#Iz!}bdP-x%haQhEu zc;^oZ{Mz$zV|?eqcOHEIQ1~u@?;pS~Md`W(o=cz&E3}`$GYot*if0r&qo7?;XqUlr z<;-SABRre+)Uer3&v=QT(5AhiIS+p+=iF0n*nz#W2`a? z+Rs7p|3Y5_`pbnx+CK&@(a8VH{DbR>v=Jc2{e`Nr8=qGnM-44ezWtxwc?9wOGxCBj z{g*@%<9K(-jUnRCDG|)|V~LYCL4n|lHu{M7LLANa=ET!UqGr4!6X`T>VLTo5vV`bb zNf6bQK>KVR$`6ZQJlfvUsLYQAnu_W%*T)fJvo+nby3y0X~QF+kt~)&K-8jQ`v?3b}*Jaa{&9uOQM| zWjwu%NUN0jFy_gapT@c$U|C6|O}Kz00It28BuTSDcoeV&gr*0UuaJ*Giijqab|$S{ zMWh9Q`vFb&5=rYlkxENVpWa8Lyn5W&G1dVDE+E`0ym}Kgq=czr>;|_PW4rez6K$Z) z-d+>Ei?PXp-Ja?+_B^9F|upSS?cJDLklzZ{JL!?P~ z^=6SrGp*D4@mWmX;%S9A0Ne|&I%|1Q~;^~wSam+GhhRt6R=|~ zeyQ%pWFMf4h5*Kw0MEnBYj_16Xi@&W=b1!2wmFH2v_&LO@XZV-LXkl!d zRoo8<@zyhHojmUr8S^Qlcp5o2;%6AZdhc%;ouyw_L8QrezrLoJNM(QgmeE9tRvN3x JZ}@%O{{SD!_f-G@ diff --git a/build_uf2/README.md b/build_uf2/README.md index 8544e75f..94532614 100644 --- a/build_uf2/README.md +++ b/build_uf2/README.md @@ -4,7 +4,9 @@ Manually copied built uf2 file for quick flashing. Quick how-to flash: -1. Hold down Pi Pico button when plugging it in. +If you haven't already, download Pico_Game_Controller.uf2 first by clicking it above and then clicking the Download button near the top right. + +1. Hold down Pi Pico button when plugging it in. (This is the button on the bottom of the controller) 2. Drag Pico_Game_Controller.uf2 into the 'drive' RPI-RP2 3. Done! diff --git a/src/controller_config.h b/src/controller_config.h index 03f5e23e..47dfbc6e 100644 --- a/src/controller_config.h +++ b/src/controller_config.h @@ -1,11 +1,11 @@ #ifndef CONTROLLER_CONFIG_H #define CONTROLLER_CONFIG_H -#define SW_GPIO_SIZE 11 // Number of switches -#define LED_GPIO_SIZE 10 // Number of switch LEDs +#define SW_GPIO_SIZE 9 // Number of switches +#define LED_GPIO_SIZE 7 // Number of switch LEDs #define ENC_GPIO_SIZE 2 // Number of encoders -#define ENC_PPR 600 // Encoder PPR -#define MOUSE_SENS 1 // Mouse sensitivity multiplier +#define ENC_PPR 24 // Encoder PPR +#define MOUSE_SENS 5 // Mouse sensitivity multiplier #define ENC_DEBOUNCE true // Encoder Debouncing #define SW_DEBOUNCE_TIME_US 4000 // Switch debounce delay in us #define ENC_PULSE (ENC_PPR * 4) // 4 pulses per PPR @@ -18,14 +18,15 @@ #ifdef PICO_GAME_CONTROLLER_C // MODIFY KEYBINDS HERE, MAKE SURE LENGTHS MATCH SW_GPIO_SIZE -const uint8_t SW_KEYCODE[] = {HID_KEY_D, HID_KEY_F, HID_KEY_J, HID_KEY_K, - HID_KEY_C, HID_KEY_M, HID_KEY_A, HID_KEY_B, - HID_KEY_1, HID_KEY_E, HID_KEY_G}; +const uint8_t SW_KEYCODE[] = { + HID_KEY_D, HID_KEY_F, HID_KEY_J, HID_KEY_K, HID_KEY_C, + HID_KEY_M, HID_KEY_A, HID_KEY_B, HID_KEY_1, +}; const uint8_t SW_GPIO[] = { - 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 27, + 4, 6, 8, 10, 12, 14, 27, 18, 20, }; const uint8_t LED_GPIO[] = { - 5, 7, 9, 11, 13, 15, 17, 19, 21, 26, + 5, 7, 9, 11, 13, 15, 21, }; const uint8_t ENC_GPIO[] = {0, 2}; // L_ENC(0, 1); R_ENC(2, 3) const bool ENC_REV[] = {false, false}; // Reverse Encoders diff --git a/src/pico_game_controller.c b/src/pico_game_controller.c index 84d9b323..11d7e16c 100644 --- a/src/pico_game_controller.c +++ b/src/pico_game_controller.c @@ -111,7 +111,7 @@ void ws2812b_update(uint32_t counter) { * HID/Reactive Lights **/ void update_lights() { - for (int i = 0; i < LED_GPIO_SIZE; i++) { + for (int i = 0; i < LED_GPIO_SIZE - 1; i++) { if (time_us_64() - reactive_timeout_timestamp >= REACTIVE_TIMEOUT_MAX) { if (!gpio_get(SW_GPIO[i])) { gpio_put(LED_GPIO[i], 1); @@ -125,6 +125,20 @@ void update_lights() { gpio_put(LED_GPIO[i], 1); } } + /* start button sw_val index is offset by two with respect to LED_GPIO */ + if (time_us_64() - reactive_timeout_timestamp >= REACTIVE_TIMEOUT_MAX) { + if (!gpio_get(SW_GPIO[LED_GPIO_SIZE + 1])) { + gpio_put(LED_GPIO[LED_GPIO_SIZE - 1], 1); + } else { + gpio_put(LED_GPIO[LED_GPIO_SIZE - 1], 0); + } + } else { + if (lights_report.lights.buttons[LED_GPIO_SIZE - 1] == 0) { + gpio_put(LED_GPIO[LED_GPIO_SIZE - 1], 0); + } else { + gpio_put(LED_GPIO[LED_GPIO_SIZE - 1], 1); + } + } } } diff --git a/src/usb_descriptors.c b/src/usb_descriptors.c index 3ce32767..0c0aaaa7 100644 --- a/src/usb_descriptors.c +++ b/src/usb_descriptors.c @@ -34,10 +34,6 @@ * Auto ProductID layout's Bitmap: * [MSB] HID | MSC | CDC [LSB] */ -#define _PID_MAP(itf, n) ((CFG_TUD_##itf) << (n)) -#define USB_PID \ - (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \ - _PID_MAP(MIDI, 3) | _PID_MAP(VENDOR, 4)) //--------------------------------------------------------------------+ // Device Descriptors @@ -51,8 +47,8 @@ tusb_desc_device_t const desc_device_joy = { .bDeviceProtocol = 0x00, .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, + .idVendor = 0x1ccf, + .idProduct = 0x101c, .bcdDevice = 0x0100, .iManufacturer = 0x01, @@ -70,8 +66,8 @@ tusb_desc_device_t const desc_device_key = { .bDeviceProtocol = 0x00, .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, - .idVendor = 0xCafe, - .idProduct = USB_PID, + .idVendor = 0x1ccf, + .idProduct = 0x101c, .bcdDevice = 0x0100, .iManufacturer = 0x01, @@ -92,14 +88,12 @@ uint8_t const* tud_descriptor_device_cb(void) { uint8_t const desc_hid_report_joy[] = { GAMECON_REPORT_DESC_JOYSTICK(HID_REPORT_ID(REPORT_ID_JOYSTICK)), - GAMECON_REPORT_DESC_LIGHTS(HID_REPORT_ID(REPORT_ID_LIGHTS)) -}; + GAMECON_REPORT_DESC_LIGHTS(HID_REPORT_ID(REPORT_ID_LIGHTS))}; uint8_t const desc_hid_report_key[] = { GAMECON_REPORT_DESC_LIGHTS(HID_REPORT_ID(REPORT_ID_LIGHTS)), GAMECON_REPORT_DESC_NKRO(HID_REPORT_ID(REPORT_ID_KEYBOARD)), - TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE)) -}; + TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(REPORT_ID_MOUSE))}; // Invoked when received GET HID REPORT DESCRIPTOR // Application return pointer to descriptor @@ -131,7 +125,6 @@ uint8_t const desc_configuration_joy[] = { sizeof(desc_hid_report_joy), EPNUM_HID, CFG_TUD_HID_EP_BUFSIZE, 1)}; - uint8_t const desc_configuration_key[] = { // Config number, interface count, string index, total length, attribute, // power in mA @@ -159,25 +152,22 @@ uint8_t const* tud_descriptor_configuration_cb(uint8_t index) { // array of pointer to string descriptors char const* string_desc_arr[] = { (const char[]){0x09, 0x04}, // 0: is supported language is English (0x0409) - "SpeedyPotato", // 1: Manufacturer - "Pico Game Controller", // 2: Product + "Konami Amusement", // 1: Manufacturer + "SOUND VOLTEX controller", // 2: Product "123456", // 3: Serials, should use chip ID - "Button 1", - "Button 2", - "Button 3", - "Button 4", - "Button 5", - "Button 6", - "Button 7", - "Button 8", - "Button 9", - "Button 10", - "Red 1", - "Green 1", - "Blue 1", - "Red 2", - "Green 2", - "Blue 2", + "BT-A", + "BT-B", + "BT-C", + "BT-D", + "FX-L", + "FX-R", + "Start", + "Left R", + "Left G", + "Left B", + "Right R", + "Right G", + "Right B", }; static uint16_t _desc_str[64]; diff --git a/src/usb_descriptors.h b/src/usb_descriptors.h index 9d30995c..d9b601c7 100644 --- a/src/usb_descriptors.h +++ b/src/usb_descriptors.h @@ -2,8 +2,8 @@ #define USB_DESCRIPTORS_H_ #include "common/tusb_common.h" -#include "device/usbd.h" #include "controller_config.h" +#include "device/usbd.h" enum { REPORT_ID_JOYSTICK = 1, @@ -27,10 +27,10 @@ enum { HID_USAGE(HID_USAGE_DESKTOP_JOYSTICK), \ HID_COLLECTION(HID_COLLECTION_APPLICATION), \ __VA_ARGS__ HID_USAGE_PAGE(HID_USAGE_PAGE_BUTTON), HID_USAGE_MIN(1), \ - HID_USAGE_MAX(SW_GPIO_SIZE), \ - HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), HID_REPORT_COUNT(SW_GPIO_SIZE), \ - HID_REPORT_SIZE(1), HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \ - HID_REPORT_COUNT(1), HID_REPORT_SIZE(16 - SW_GPIO_SIZE), /*Padding*/\ + HID_USAGE_MAX(SW_GPIO_SIZE), HID_LOGICAL_MIN(0), HID_LOGICAL_MAX(1), \ + HID_REPORT_COUNT(SW_GPIO_SIZE), HID_REPORT_SIZE(1), \ + HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_REPORT_COUNT(1), \ + HID_REPORT_SIZE(16 - SW_GPIO_SIZE), /*Padding*/ \ HID_INPUT(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \ HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), HID_LOGICAL_MIN(0x00), \ HID_LOGICAL_MAX_N(0x00ff, 2), \ @@ -45,7 +45,7 @@ enum { __VA_ARGS__ HID_REPORT_COUNT(LED_GPIO_SIZE + (WS2812B_LED_ZONES * 3)), \ HID_REPORT_SIZE(8), HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0x00ff, 2), \ HID_USAGE_PAGE(HID_USAGE_PAGE_ORDINAL), HID_STRING_MINIMUM(4), \ - HID_STRING_MAXIMUM(16), HID_USAGE_MIN(1), HID_USAGE_MAX(16), \ + HID_STRING_MAXIMUM(16), HID_USAGE_MIN(1), HID_USAGE_MAX(13), \ HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), HID_REPORT_COUNT(1), \ HID_REPORT_SIZE(8), /*Padding*/ \ HID_INPUT(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \