From b3f36c1d1fa38934eaf5654c6aa9f602aab1e471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ebbe=20Ba=C3=9F?= Date: Tue, 26 Apr 2022 18:00:29 +0200 Subject: [PATCH] added test volumen control MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ebbe Baß --- code.py | 28 ++++++++++++++++++++- lib/adafruit_hid/__init__.mpy | Bin 441 -> 389 bytes lib/adafruit_hid/consumer_control.mpy | Bin 1041 -> 659 bytes lib/adafruit_hid/consumer_control_code.mpy | Bin 482 -> 354 bytes lib/adafruit_hid/gamepad.mpy | Bin 2561 -> 0 bytes lib/adafruit_hid/keyboard.mpy | Bin 1957 -> 1190 bytes lib/adafruit_hid/keyboard_layout_base.mpy | Bin 0 -> 1223 bytes lib/adafruit_hid/keyboard_layout_us.mpy | Bin 1305 -> 330 bytes lib/adafruit_hid/keycode.mpy | Bin 2176 -> 1764 bytes lib/adafruit_hid/mouse.mpy | Bin 1605 -> 843 bytes 10 files changed, 27 insertions(+), 1 deletion(-) delete mode 100644 lib/adafruit_hid/gamepad.mpy create mode 100644 lib/adafruit_hid/keyboard_layout_base.mpy diff --git a/code.py b/code.py index f301245..46a9d5d 100644 --- a/code.py +++ b/code.py @@ -1 +1,27 @@ -print("Hello World!") +import board +import digitalio +import time +import usb_hid +from adafruit_hid.consumer_control_code import ConsumerControlCode +from adafruit_hid.consumer_control import ConsumerControl + +clkPin = digitalio.DigitalInOut(board.GP2) +dtPin = digitalio.DigitalInOut(board.GP1) +dtPin.direction= digitalio.Direction.INPUT +clkPin.direction = digitalio.Direction.INPUT +clkPin.pull = digitalio.Pull.UP +dtPin.pull = digitalio.Pull.UP + +previousValue = True +consumer_control = ConsumerControl(usb_hid.devices) + +while True: + if previousValue != clkPin.value: + if clkPin.value == False: + if dtPin.value == False: + print('left') + consumer_control.send(ConsumerControlCode.VOLUME_DECREMENT) + else: + print('right') + consumer_control.send(ConsumerControlCode.VOLUME_INCREMENT) + previousValue = clkPin.value \ No newline at end of file diff --git a/lib/adafruit_hid/__init__.mpy b/lib/adafruit_hid/__init__.mpy index 29daa942e607fe56408fae27f4a84cccb5fee80f..601d2c38786253386bb77b8029ef556f1ad6ae25 100644 GIT binary patch delta 295 zcmdnV+{#?<%*rIM&}5+_$G~oon39-QRGL{5pOKlOA0MBY2V}d&dkq?k5^`p788h%FG?-QkB>KE6cbC!%u9(+NiEAv zP7O?+SYlV-6mqeFLxGXMLD4~5MNL6d(_586h#_)=GP4O2(Buu;j0ZNvdn+>>-YhIq zTAY}k8eae;Hr{j*YuGHz1s2(K(}lMIsAsb>3s4VJ!{%hCTlGQ==E|%lj6hqM8TcR; Y7PGPza~G!q9RPAqQ3;4MxtmcB05CdN>i_@% delta 289 zcmZo=-pOq0%giLN#>fByyygswjEM>jf@-M@4FAQH8C8@R#Tiso7!w#(R2c=MIc#$C zQ%ZAE?Ib4hNT{=#=o#vna>vJ)r4|)u=I6!7bHv9Nr55DJ$8)D;=B31^q?TnSr%s$@ zml@5?z`)4FAf(Eu$k-_5psk{&psDGt3baIK8^Z>1<`gD#mWB<1j0ZNjJ1a9B-Yl!m zxbddBSi@#n4aQA3&3PMu$~KF$0F^N{Y>qa)RWDP{AkLb?7z1<^vRxo|xwB^^7AKaJ q6mgXnC#I*y7XS%XFcU5jmY7qT>RMEkU&PG74sm5MhU&>~jP?MBd{Tt~ diff --git a/lib/adafruit_hid/consumer_control.mpy b/lib/adafruit_hid/consumer_control.mpy index ff510dceb3d45625c010d866136dd1e53b2ab1b5..02cb9dc5ebfccf39c11278e573b5f70a5ad38449 100644 GIT binary patch literal 659 zcmYjO(QXn!6unbG3?S^X%Tx;~(~=lM43Z5Y#u!5a56DxAC?RPBxI1lEVRzk`trBB0 zTg!t@KW6zFANwl~U>aZU+?jjsx#yngB=*YW=JZ7klI@u_JNE;dPcCiirRh2>SWtf= z6Yjh7y0@GXk?b`p3sS9~R2oAI#Gv?yEg42C(n|Kio6`k#_>9}Gqh+tC&txJ#{QA>X zgbL3qpuDqAy*`+>Kdg;B06h<*@T_7kO@0Y3^Y(FcD(L zkH$}8Gvc_Mu)yPszsn-6!k}$wT|PDGS+&Pd8$FX^3>V6)iOGmtmBL#(fuyasHW} zVslEpP!=8l(hR8q;CFUM#`v-9RYgnWs*zJVQSPw4;gM$3 z2lx{edNtH)xL(8Z29`C9s$YKY7NYeItU~1ntk=Lo6JMg*xQW_k?CYr2aZqgF5%v)5 z25Jq|Ne7EfG&5Qg3n%$Kmz$x(9uUJcED_oP?b+sbmwPgFnV>2N1b13~e@6D@_+7SL z-(fEE0wb`wmpf%bD!=&D^|=TRgy3S%;=(n8Jf)uDGD_!UAi{1ia@oLkSz;C~+cT-j zPVFv($;D*6vOlUv`M8|vHKNo%wm%VD5|0N&hJIWJGl}hyeOq)D)=@v`agXS&4}=Ti z@b^q?VIuZY6RY_B)}yaCmC8y*tqMvXtqvW~)}Vvh1r$!EZ@f~jOYj9sQ;8{^{>c)h z??S^#1yToWPsvZSl6fX%tUN*nps=P!VNmLHB5#c1YANIq++DHPTCUtZd^zeIBO|b})LZ24H;cl|+*bSqP=^ zno(bw*(AIkPf9v6X)otr^#f)IVf1rUu(%xwSMK?7G9F3qXQjiKpYnooj+ILf%i}!6 z@XHr5d^=jvTdkOU6Dz-=cpr!57Dne*Rv(tPu%ahxg%-7wL?gBXWhZlmljNQ&DMtf3 n?;G8>sv!Z->>Z8?{()SKTQ$NPZ<_Z1bqG@YYnLK+xyk+le11or diff --git a/lib/adafruit_hid/consumer_control_code.mpy b/lib/adafruit_hid/consumer_control_code.mpy index b6fc457ae0220da0543a11e6c4a742bdb31aff26..618edcabf0c692818004173ef8d3b000ce4f4d09 100644 GIT binary patch literal 354 zcmZ{gu}i~16o)S@Vi1KW@)QRRHxws@TCMAOxoT>2iFcP)r)zC0M%0wp4sHoJ`bT>a zTXc{&ydU51d&{FMwF7tPY@yZeC>cHE^K_;k)8u%Zy}r#~Cb>3YmS@jqCzGS;`_L_H zq?*WS&>zF>N}#51)xf$LBkKbp&#HfJ6n4Y?XV50v0R&DR&>k+Eur3%4g@?-%*zFLh zbSD%8Qh`?04Sa6mDeOy1xaRCuX(b4~#^o6_zF8z#-w$KC;BBy_3L{*e!y4-{s&E;= zcGM$xIwG-TxV#5Dh?NOX;P%5_95C%MDp%lFmv!3uEjYUGij3)dVzXnneN%uTxD=+ayg$*hegz>v DO4NtP diff --git a/lib/adafruit_hid/gamepad.mpy b/lib/adafruit_hid/gamepad.mpy deleted file mode 100644 index 54f4a2502644a1cbc210898a73343fb047e8e416..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2561 zcmcImTTdHD6rKaVVgq$RhJtYxSWFTE*ydtxZ36@)sniCk7geRw?81)0WPR!Gn#8=Y zu0o|st<;A;^;eiAzaT%MeT%BLYAf}zQvX1DW-k~!*(QDHSUZ<90M ze(;vPkJ}Qc`7FpI6EF(jTr$I_lT5OHH@;4shQI1Rl<)+@V?-R~AjK4sh&V(f5a&Va z5SKyf6jwm zXesTY)aHaz_diieKd;KFJ&y|uCFF^AS2U*Ubhm04<&xg3F_p1KP^>@yG(0Y zG}v6^?#eAyM!M>;5ReW+hKEoq^@JqpX7Err6eh4RVf@2uNP9wrv-nli%QZMv9zr8^ z1riU*mkRc#&U@FvY^0`nHN&e}UZr`Jfp;RLk<3D#WN$89Hq!}}{E~~C*~B;`=b)a4 ztTVf{0OmSM&*jm}BNvs_Rn_HvMk`qPt!^)MH0o$DyjwGvtZ8yBNHta|Yev%&rK+qO zj=9IBpK^X#fIEObu$!9Q9EU8UMvt353Eur+OVi4lC4RrIGFE9$65`XDnh)CHps#cj z079bkDDwKIkXk}=&u(qLNuD;+BhyfCBy;d65B0zQ`gIPuT=?UpkzC@u#dcaX<;6_f z8N9^Nw#=55gLT!xxXdx$5mL)G#-SH6{_vXx^7kglcB%i5Fa=C;NM&S&!@PTA0#TyY zrs15hmxbAD;%VU{6|j63S>-SKNVtkGY9#03Y;d2TZkO#2`lls=yc#6>)jQ zH{eqK3m#O>K=nF!TcrGZQm`=wWc9vW(;a83QG)3e`j$Ar6Y0*Dh-E+hJ~}fo2FX83 zd=nZYQiCz+U;E|ZeILPXKhKH?hfs_H^Q$gC%w9B+_q%{hb)J>S^O5@ zv7O_beV64SS8t@}pDp{%Z=Wr6m~+|1u$j0|20($&pt0kX=DdjL`k3E+R@Md*aIWd` z4ePoV?CVn~R&_%tlmtyK?K2@G7-b=|IOhOc=fJ*S~jIT1K_ diff --git a/lib/adafruit_hid/keyboard.mpy b/lib/adafruit_hid/keyboard.mpy index 6fe3aceda112f8b8b7c8dc867ff1dbbeb6fba1f7..12b45b99044d0a575fc68652b343e132af012536 100644 GIT binary patch literal 1190 zcmYjR&u6rRDR81tjc?lPgqwKsK2Vmoy#gls9TQVK++hSX4uDXOYv&5q-3fu*~P zTTTp)iCnAa{sTQ!y)E`%(DamRE>TXYqV~{J)c>Gw7m`#ft>(RN-n{R7@6BYro@MEj zyLk=yHWgJlGJhgwIKReG#79Tee34E}r^F^;Ry?|QW3`h!-# zt99T zYe=Kz(ZYzMjnUjFItqT1MiF#{Ai~WMv@j&G;@zD5dG(%L+|3qF$bw^LKPgpQ`;;s> zb|w48Zn5Zk&IoaL?A|NwR_-PdL6IaT^Ie0QX3|5#25nKrq{$gVrb}6AwUV<0ohQBI zrmU!{Jgtgs>9Rq)x?v^XB3rO*>&NspcxdSDDIDRthTf%y)ld3Tn20T^%BH1QJu^8+ zf{vwkK)U}lcqf4(akkcInCCu2GNhHt8sb;RoY*s!`&912Z^+HN#>3Ppwquf$&#m9I zFFZ=0r2q&{nDJs8Xc_%ujec(nGbzl58=k5iTbjUfTUWJ1jT*ey7Q88ZQg%_0?#Ob^ zHuLky7T?`M^_?YDd8!h#uME`xg+D`FCIoS43h`7^z7*TZjTMIb#~T8emNp_+RYm>)3!8u!X>z zfc&Z`1ehr$HWAANSnYQPipKlHziVetvo8mATkwm1aJ`9`{SD}e=-kKPcC3QR$hfkN zKu!SUOlUkfx}Avl*ic%_b)-b0kXXN7K>UYd>{Z?51I-$5;YSy_Fyy<+zN}vS`PF{r zQ^qn8R{O&imM^R0XE_fmH-X8+r`dl7b(V>_5WcLkXE{F`+XBAaf3@Mopw6T16;BG& zauY*2KQ`C*j6Pf_$JBBbnL{lG7zgu_PU?-^R&Dw-??Cv7dpl4t3*0 zVrateZQvJj_&s?61g`=?;<5<21bqx(U@;;2*I=qYl=pKVgxD_M>{k{=Jh}swX4Ub_6m}ubnQ!M2`43-ZYl8p) literal 1957 zcmcJPTW=ai6vyY_3j}Cw9!xA7%ODG%Xcu4kEZe&>JA7gMp- zTT@8<=Buaxy2Rq|?C-ZfLFjLmX{>>~1}uAu_M!1BGEb3wij;m<2EM-lrVO$Sd|woM zKxPr-A}ErEvSl!0av3s*i4R-0(P@&87Ij0f(~jxlhG|^6L%K({PL0iWciJ^u#2aR6 zw&l2~mRX~AyX!V=%RlkQ_#WxjY=gx4x85A?gE>_hJo++WUy;vO4>Gcm-*bXPssSDPVH83hvNNo0#FR0g(aT({<5Yy-^Zy$ zr3(k^Jnmc(M%fMMXD`8h;~or4>yW#L9vFOe8FE)(xN;c`VEwORg<)y)-;-}M-bn>M zPN89b3+hO@s;;t1u8DrDW|@*(gS-O$Iw-;IH5J&W99tM_B(}*!COeLPOmLeIGv0Du z#OS3q(7?H)u1j=E_3o?>BiZ6CX!pbkH|<7$j$4mp|ok9Pj-DNJ1)-?7Klb8O_< zl|z%KJtcP+osSuCi#M(aMMVY^cI0$eKlsRWU#uw}>tqG}?>c!?Z+3`RP!Lp3(8`>R z1KKsMW68B8uLDZFgo)%fbW3u~ZzNHdlI}{jRU?}>eS~wn0^xTYq3tPp65iYx-Y-u% jy#l9~9TVd8;*1+`l0sY@;qN_Ohp*D}n_&~Sj{w3y%dB}Q diff --git a/lib/adafruit_hid/keyboard_layout_base.mpy b/lib/adafruit_hid/keyboard_layout_base.mpy new file mode 100644 index 0000000000000000000000000000000000000000..cccbe78b9da5e68e491b88218287e7e463ce32b9 GIT binary patch literal 1223 zcmbtS&2Ac36uuWizy@0bL&g?P(-8y=*aBxtX=PQafw2v-i*1Y*(H~s~7#n2bLBn7N zMOH4Bks7J1K0=jUHv{+uYWE4UN*7k8z5wbQ^b9{zlx;POGw1KS-*?VQSxlevSB=#t z$eNZa(y`jAX{1`KL{H^*Ns-hFsY`98rIC`7QW)2rR46`$7hYT}?8s(nPp%+dR_*;BH3(qn7iJAQ}B18m^Bjj9Gn>FQ( z5Fg?gLR7h-5Rw-#^K^=~JK~ZADlrp>56T!f*Q=V=Xs$=2CpE3wDn-i5%ji@{G%;0_ zs;OmAw%^vO@IX2vMxgxKVM}A@FN?)ufFFPUqJJZ>;iq$5$6KcB?fSd($cYv>;A7^H z$J;@i`!Jo^%9E|##P-Nd?B=&~6IYsMQ+wj3w{y%r&SkdKc>*=W2!#>HCk|7Y49V}2 zoy~#~TSeSr8mcyPWRzkM=G@uMP0{Gu&OzFf+WRh<$wCBL4h6&^=YAL;et|g$xln7G zESNa-PB3%Epvy`{ZVC^$H6oRibNQL@b-603L{rElDOfn3d=fh-qlama3ptnQw{!;e z^hG~}5PFNRs=wnWb_?Ap7N2HA!N>~gi}O@xE$-QdDmR-tyAa2Pp3Z(Y6gdhOzyIeC zowd5HI=ciJqtenF{g~aHD%WM$9g*twI4X>vn4j>PmFn7w+7+*uFnZ^tKT!KtFmRAv z-G7$e^#xIn?EH#ub@!uw9N!J-2hmBv8T8@h`?#r)RHzGG^kdlY#RM?KWB=$+-EFz~ z`QICz^$nrWg~S_g=grVyI*egJoG}ogXs~bK@PPA`&*VmV#!;6wO;%m#3UHZ+XRViG z$oMsiVL5sF2JR1LQbpL^T&$H8`GA`0L8x^LtgU1*8q1J zU3+EN^)=zuWhipJ_YWHq#m#td~fbT2w4ivh+*W#d}zMXM3&9hK?m;H;gz;CTeG;>L0$IPJadyU?l5 YuEg*M(FS|B!$8WQqknWa7`4s(2Tp@-TL1t6 literal 0 HcmV?d00001 diff --git a/lib/adafruit_hid/keyboard_layout_us.mpy b/lib/adafruit_hid/keyboard_layout_us.mpy index 89f085645635af1e96f7743ff5600b8d981bfc0f..7b3398c97002fdb745dab2ddc33b92b19814a973 100644 GIT binary patch delta 180 zcmbQqb&83{nUzUip)o*0f`Q#-G9#l>eS$&*dqLlHhDHGu@6^hq{KTRZpTx@i(h{e{ z;#4h0X^m{CXnYP>I6es|F2gLw7#U*3AfSM%Cp1`)*@Rh)S&&go23007nSrr}L4=vJ yhrdBcfkBW#T#P|XfLTn6K}wlHOu;eO+0!#V#6RBKHPYGN#WgUQkzw*2#%2HtHZX|* literal 1305 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 diff --git a/lib/adafruit_hid/mouse.mpy b/lib/adafruit_hid/mouse.mpy index 6289bd4697bdcf041d3f88a41d86869d8d0cdea3..9e09cc3223993797839d18171a1925197bf8f651 100644 GIT binary patch literal 843 zcmY*WOHUe66uy^-JSs2)<5j^ZqEQ56&6E&V4N+{-Xj=ubq-h3(t4=#S$_!Rl+(B40 zZPHDXF1qTf+rihq&ve~&6PqsF_9wJ=fG*5U&htCxJLlXbvti7CY?>VfmQb#c+pX3_ zMc5Y$H;d((jOQvxS${U0crY=aDgd(KvnpZ{Bd9WHS1c8T0zMG)I0StFjz9!62_GN~ zlf=(zxYUXFD@PTvv^Qd;Nm}l#$vb*?1Xmqkn*~#saTCd`Lhv}n1IE6tb4CmZZsY+x zo@ExG;}wcc`ss_chFWaPhGQ-F%c+(HuwW1Y#269qstBzu-$@CJTdCCjdkr+SxpFu0 z-)$oA`bs>$w%kke00EYV$X=;pS>_GMS;Z30$(T1H)H8*gB=II>&r4$dDIp|eOx`jh zYq5NQ`99%?OS5S8=6WRT6ffajq!Htd4?hH<-VS50H#| zhO^5O#uYURGa6^s)AWdx9e@|k?ytxy2ytTrWPv!sK=U}r!>#tOM`?|-QFITvQ&W_3 zNmflEZrnyzvawl;wCTtnzpq1W(y*ICHvQ9p=#XoD4g=h{g=`aNP@lEknW>|?G_I!U zdkap{a*+&A1cSkFI6OBw2^Nz?=Uodn(ic7J zIIVen9O`^Q_duG*ObOd(S07K#uRfh#TzzhnpGzO=Cse+#pHlg*-krm6XgIPz-^W-| z6T`^IlGpy}>CQek)HL0S(&$pBaB;3~-)^Ne<792*EpYc0#ZrLOsm>h+{z5Hch#2V6 Jtp!n5{sC&e^*R6m literal 1605 zcmbVLNmCO+80{}B5MmicN-@Ncv`mU<#7Lx|Tu{NK3S9BTp=Zo=%;-!KXC?@z%pf^f zmIu$CJb6t(xx4-V&z4#qIQkc~XNe|MJm{pVznYkoB(q$3D=w_b*ugb4CQJ!zzYh1fK4m!EyGRsqe2x>b-QP zzURqkJ;-PtOdvdBF~XzB#D`%GkHR|UfJb-;@qovH_uwq>UVH+0AD#fiFs^&|3x1pf zK7ccDuow8C2zZ*waiF_v=^>;fD3p*sLLAYAIQ#nvc~BK(XEiiGcX5%NzrDD4?P~wc zE0->}Ucw7kW@qQ;+$DCJRASvC{)$R9EvQnN3K|W$l?bxz&&yK&zE3GH(=gE}YhS6% zke6w{rVF~1SEybrivc1_iln2SLJuGhLVJgpiRKW`Ykd4(Jh?c=dK67Ub1==EJOXRt zIy6SdAi9p$MK(JMXG5qF%Rm8TXLE;)@u-ZxP7WH`XaZu#z$`%4U7gE;agI6OBHq1A z?RNH6HQ_EL6*lrny|b!QK~;s-fJ!T6Rqs?8ymo6&Rm-X!AHOD3TIt+? zkWZs>A?Sok;{wRi-#^acVrGqSnh9?V9|hz1Nb}nS=c-^H+YRr|zAKRy&Yh~RmrGj8 z#mQPY7xz98?uoOOQQIFL-GQt5O$gE0fj-7*@nX$#}M zRW}Oo!K#}D`1oqTto^W*n%wKwbdB3;O&@WM;W3Dv25SqW+I+SBX5;nt+s&=*cTMB- z$(OYaHomBBvhjH>vSi<(?)=^Bv!gh9bkp!V6z$;+*%z{7pDP|#VAcPyNU1#K*cZ-N z>L15B?ze#^XZyJ3l$~-SOPxXg3-b=}e-NC(zRPrjq3ezk~n*Ixy