From c3604616119e2a61b43950c1625c0eb56d6dc868 Mon Sep 17 00:00:00 2001 From: Graham Pye Date: Sat, 9 Jul 2022 17:13:44 +0100 Subject: [PATCH 1/2] Update libs --- src/lib/adafruit_display_shapes/__init__.py | 0 src/lib/adafruit_display_shapes/circle.mpy | Bin 651 -> 576 bytes src/lib/adafruit_display_shapes/line.mpy | Bin 548 -> 447 bytes src/lib/adafruit_display_shapes/polygon.mpy | Bin 1714 -> 1104 bytes src/lib/adafruit_display_shapes/rect.mpy | Bin 1642 -> 932 bytes src/lib/adafruit_display_shapes/roundrect.mpy | Bin 2770 -> 1664 bytes src/lib/adafruit_display_shapes/sparkline.mpy | Bin 2342 -> 1344 bytes src/lib/adafruit_display_shapes/triangle.mpy | Bin 1674 -> 1113 bytes src/lib/adafruit_display_text/__init__.mpy | Bin 6582 -> 4836 bytes .../adafruit_display_text/bitmap_label.mpy | Bin 6916 -> 4094 bytes src/lib/adafruit_display_text/label.mpy | Bin 6012 -> 3848 bytes .../adafruit_display_text/scrolling_label.mpy | Bin 0 -> 1026 bytes src/lib/adafruit_dotstar.mpy | Bin 2473 -> 1443 bytes src/lib/adafruit_ds3231.mpy | Bin 2257 -> 1228 bytes src/lib/adafruit_hashlib/__init__.mpy | Bin 888 -> 591 bytes src/lib/adafruit_hashlib/_md5.mpy | Bin 345 -> 3346 bytes src/lib/adafruit_hashlib/_sha1.mpy | Bin 2782 -> 1675 bytes src/lib/adafruit_hashlib/_sha224.mpy | Bin 109 -> 72 bytes src/lib/adafruit_hashlib/_sha256.mpy | Bin 8448 -> 6058 bytes src/lib/adafruit_hashlib/_sha384.mpy | Bin 109 -> 72 bytes src/lib/adafruit_hashlib/_sha512.mpy | Bin 10806 -> 8350 bytes src/lib/adafruit_hid/__init__.mpy | Bin 441 -> 389 bytes src/lib/adafruit_hid/consumer_control.mpy | Bin 1041 -> 659 bytes .../adafruit_hid/consumer_control_code.mpy | Bin 482 -> 354 bytes src/lib/adafruit_hid/gamepad.mpy | Bin 2561 -> 0 bytes src/lib/adafruit_hid/keyboard.mpy | Bin 1957 -> 1190 bytes src/lib/adafruit_hid/keyboard_layout.py | 106 ---------- src/lib/adafruit_hid/keyboard_layout_base.mpy | Bin 0 -> 1223 bytes src/lib/adafruit_hid/keyboard_layout_fr.py | 194 ------------------ src/lib/adafruit_hid/keyboard_layout_us.mpy | Bin 0 -> 330 bytes src/lib/adafruit_hid/keyboard_layout_us.py | 164 --------------- src/lib/adafruit_hid/keycode.mpy | Bin 2176 -> 1764 bytes src/lib/adafruit_hid/mouse.mpy | Bin 1605 -> 843 bytes src/lib/adafruit_progressbar.mpy | Bin 2391 -> 0 bytes src/lib/adafruit_progressbar/__init__.mpy | Bin 0 -> 4534 bytes .../horizontalprogressbar.mpy | Bin 0 -> 1008 bytes src/lib/adafruit_progressbar/progressbar.mpy | Bin 0 -> 607 bytes .../verticalprogressbar.mpy | Bin 0 -> 800 bytes src/lib/adafruit_register/i2c_bcd_alarm.mpy | Bin 2709 -> 1466 bytes .../adafruit_register/i2c_bcd_datetime.mpy | Bin 2017 -> 939 bytes src/lib/adafruit_register/i2c_bit.mpy | Bin 1320 -> 650 bytes src/lib/adafruit_register/i2c_bits.mpy | Bin 1727 -> 905 bytes src/lib/adafruit_register/i2c_struct.mpy | Bin 2175 -> 889 bytes .../adafruit_register/i2c_struct_array.mpy | Bin 1988 -> 881 bytes src/lib/adafruit_st7789.mpy | Bin 511 -> 300 bytes src/lib/hmac.py | 14 +- src/lib/pico_dio.py | 31 ++- src/params.sample.json | 37 ---- 48 files changed, 27 insertions(+), 519 deletions(-) create mode 100644 src/lib/adafruit_display_shapes/__init__.py create mode 100644 src/lib/adafruit_display_text/scrolling_label.mpy delete mode 100644 src/lib/adafruit_hid/gamepad.mpy delete mode 100644 src/lib/adafruit_hid/keyboard_layout.py create mode 100644 src/lib/adafruit_hid/keyboard_layout_base.mpy delete mode 100644 src/lib/adafruit_hid/keyboard_layout_fr.py create mode 100644 src/lib/adafruit_hid/keyboard_layout_us.mpy delete mode 100644 src/lib/adafruit_hid/keyboard_layout_us.py delete mode 100644 src/lib/adafruit_progressbar.mpy create mode 100644 src/lib/adafruit_progressbar/__init__.mpy create mode 100644 src/lib/adafruit_progressbar/horizontalprogressbar.mpy create mode 100644 src/lib/adafruit_progressbar/progressbar.mpy create mode 100644 src/lib/adafruit_progressbar/verticalprogressbar.mpy delete mode 100644 src/params.sample.json diff --git a/src/lib/adafruit_display_shapes/__init__.py b/src/lib/adafruit_display_shapes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/adafruit_display_shapes/circle.mpy b/src/lib/adafruit_display_shapes/circle.mpy index 1371d3dec376c9c2d87f68f2eaf89d7e4f9c4b76..d5cd7cfd2fe288f051ca2a8c7ab2c20f27d59524 100644 GIT binary patch delta 466 zcmYk!K~K~`6bJCv?M~{_md?;Hkkx3(x>9>cZHb>`?z)7I&lC9%u)HOQmF1NLmS_C5rkp4ji;m2Bn*12dx?#H z!lPHLn=ODsfe;+?C}uoKU1dd~k+1fwduTC%Nn%IL;W}|U7uTP?ensmJ) K4hpXP$A19|FMAOH literal 651 zcmaix%}(1u6ov0iVn|CtLDvm zap&D(l!o3RcayiYmK-RgR!p>$l~K29*3JykC6`J>AyJ-4@;D-zIv74O(T)xf)i*y$ zVzq1AXCm>_Q_GFo_88UvGG-psYxYJb@pa>`BL_!A2bQkfHHJCORI!ZLrS7cWJua^T zD}zphRp8?h6wGaG7EBA9J=4bKjSI+%aC1CDdCT)8AMGY|+MMV;(Q~LT#y${Tq)zaB zook68n2ypU5FwvZiHy#yha9qTRFvpR_3af>C{lZCVB#; Cea>zG diff --git a/src/lib/adafruit_display_shapes/line.mpy b/src/lib/adafruit_display_shapes/line.mpy index fbc0bf1409880c97ef511aae3d804a179fed1e76..2bc0580b79b4389603e137f040b3dc7405083514 100644 GIT binary patch delta 333 zcmW-aT}#4H9EbmBFXY6Ha~d5(B?Ze13(=uM5G5p05~vV_P|O%ZjIlH33I{>cn-C)K zw(CB??CrJ>(PbBXm6o?Zp6B_!2w!~SP~@_?>D|r-tnAO**`t0gQ1chfPQip@6#|Ug zjyGiXl~qLPgy%a$dywHN>a}DzCs6op3PG=h;4;8UhgtrB*%26(lJloneM#cDR;rcC zl5ih9uIGVbU3X1~>H3+5aO`wwn?$Pel-ie0A{sZC#ax2a#K`nK)77|W13 M0W89GajDG2KZ5#C)&Kwi literal 548 zcmaixO-sW-5Qb;gmevnM5h|oYtgN*PCT%Z*h$!k!A>y%zF>SX^AkD^nh`CjNfWM`F z{=K?wjkn@nmSNtRd1l_51*V_nVDeUvpn~@HaKow!fbp=z(L$$=E=SI>S*jx6#ZBOQ zxP6bM8kRYB7kCZVTg8)s>?WQ#)$Oj`3lle{t{VlOol@l3frw1c^@S0n1xtEqU;6WO zMlj1~y6n$4jk{Y4+XNN!mt74$KVA zJkJ;}+_0lqtu%I2%gbNlyD71uDr;GlCYSv$xhzgEw7+_YaGG zep&36l}!BZyIMmE^gfJ>rBU`E@ zckB~SVcH2Z{W$c}$zNf~CO{n0DWOS-NiIE*T+$Og^@I<-_Q?*19<Jk7ER1cvN)qjD=9bQ%@!ck zr;CQ6>L17BtCCTyEXN8;DSkRr{L1NYQ<7G|LuP755i4+SM!nG;HHI^9PlSfxzz<>M z`#JVq^6Mo4Nboj;`*1Vh-5V1iOY|!hLzc?oa{YY(89*i>Atw zl92AxMZ*xaq#I**y#PFSmfF7}beRR@IW##u6&<@ivYN$tVfx&i(bY z+Y0vc%U#&WzW$TTpoSHsDM~C?N}?thqMd^LwJRXuY9HFI-18O%ZsCyGdBypVjdCy8 zGste4C%G3^U~m`ZwmQ3JZoBi)@g6#!nfB({2Wu3#8v)h;AT8QQ1XZaj%FZFKh?+%{ zgsZwmxN6(!?_oY$004NwMxUxkWkVLRFAO0e8jXy8R>pti|6SHOv#s;XlEAxMlyJ{}ZCXrKa7%n+KN~7XH6{y3P5KjWhR}jm1a%P9=Y@ zQdb_64o-8P?cDyiZ8wjwlzGUy(Ar^FY!WRz-{#IEN6_BIf~>#m?>geG`+v7v=!iRu z><7ntt)1g`ul)nues@P3o@&BVOL(f2p4z0ppva2Gkpy`G{dgJF>37VWv&aoo{eba$ v(J#@F&qsijea#IZRHwb>O{^IhHl35BkX5JMy$I927)2Gnsff;FPwCu$a=?Yw literal 1714 zcmbVN+fUn87(ZV^E~OVWyJQH$CBbn-P(uhyE!t{YOA+e>TY8bEi3ekd1Ku3lwVjDb zn>eQ09=rcxe*tzvfu?jCWo;?6FP%gyO}w$E?E$1ccgJ=N-S&bO$^LHVcfPwb?)PC8j)f)haWA}mKQ!Aj|S$dOt0s(Or;1vy3G zrDBu#%Yx)S+}zvrXmmpbPPBUwW|e<2XUp7IJgcjmq$!-rOZpKgctz05oDyQET-xmZ z30|s{d6m<7zsO7O2n4hWnSjF#Jjf|UnBzrz6^pjD=^N&tiV&n*G+rzP6XK<kS*Lv;j{Xz_RsE zz+D`xqPlfJ2C0f_CZVsMt}w0GBGC1EZRpX4eO0S_l@kCtwCQ1ac+9uD!kX>AasT(N2Hs)9*m|(H-dNq+ax>T@8AK-Bf*)f> zye4?m&rNCG7M3t8cASIEDSQyjM-e*^Y~RwV!c diff --git a/src/lib/adafruit_display_shapes/rect.mpy b/src/lib/adafruit_display_shapes/rect.mpy index 972fbe35b41de7c981269078dbc458fa00e0838d..ae631334b965abfee1d1f02389946436b47f3268 100644 GIT binary patch literal 932 zcmZva-%ry}6vyvfsbg$HyRrg~u;C(05H_>mVoWr+%}7X8CNP{oQo8Lz3uUeCoics! zju-<*{{iEZf5ECCf`5S;pM3BQpZp8>2fXcuzhaa2p7T9DpYuIUv#ci)-B8AcfcK(Y zk(bPxilvHb8Jb*|EJZeul{8TqCye@HlnAjqxv3EZrUXDZ?z(|hy((*?FdV>jL#-|k zG9oNa9|sFO82O&-AjN42?vi{s*e0sF2)V9Q;%wrKC`!_OWLlIUNiiUDl4K%7m!!EA z5Ps;{&|e_)XC7w;tQX1Kl1{>gFcaZVMK6Zb`0dX&LvgTN_nnZ zuVGECqEdqkSlHB8QK>l$pa^)LGfdq;Ca$O81QfkI6ap5)7?~*#%^99eG4%9N-J9xY zD=a;`9;g+p@J#9$O#%v1mlfPB1MlX!*RM9oyM`YI)V56{2GUH_7<9m`B zBnzJ!w&2~{AN3Sy0QYtphx><4^5f>MZ`p&##bPV^LZcnG@AL0Ixc{Nux9zmK$$$FZ zIm1Kboh>k=K!@~-Yw{|RbVI&ZLnIB0nIIv*iczZ}?bN_JZXUhx58&>$DU9GSYG$(gz4y1j@7oz)+sJi4V&CZuih?rgoO>82 z2<UA4q|;oRTwL7(XMXrRo)oLl~RH&@uKup=k$^p?Os!4@|Yd z?Eu!jl5HE-wPbQpwM*3nIj@(K9)jd;56ZM^<|(Avnq8vR?>2$WabPmdTnX@-_r@U# zZ-$*SHK%te_qt;#N6q_@7!sq1URaEy{y8Ls6EH7?WtexvNtj>HBM=8rwa!?v*dE%UO8-kBP7QlH)WPzpZm%(h7lY17@?*<;#|iOKJmcVDK{4e2YDHhJck!a61&GG5`v!5$bu^%440Y~icG0>T&JZFn5s6<?=qfAA1nY*fQaz?#5BJ)p zQn3uhBo#YgRq2GZF5{ikZK$h6W3RWsyiHiJ3N?ga+;0)B$dtfywP2TmC892t?BhnU z-$&yS>P*nL<=($Vr(~V+AIAnUV0+Bf*Vky$ANMJn(|qqdd4C Y4{l?=IS)-^2AEO!`?Fj3{2wZQ0RY+$L;wH) diff --git a/src/lib/adafruit_display_shapes/roundrect.mpy b/src/lib/adafruit_display_shapes/roundrect.mpy index 12272edb0ff4260ca4668ec8d04697a44f4c95d3..c0aa9dfcec7c194719b8144309badd4c56e916e4 100644 GIT binary patch literal 1664 zcmZ8gOH(6N7`;u186M(oI6Lv0m&0-c)mQ}clWvNwE!TbR4%@asf(%(J#&iT%{eeZ~| zqP0y6UwZ+V#{41wv^*~;Tu6vX5r3SEh5ZsAv&-UqG$ivurC*9qwV^7@NA58z55^dP zAbd|!1TpH5^ia*UN?a16Ggk~O<-7GP@Y2Bgr@IpQZc*T4hU_5J~t z<+#syIffND&H`A-aWXH79Cz12!TJd@cLL9)s~C7!i14Gb5E?SDMo*BUVsC^MMT*_9 z+h+tNJRj%}igWg20{iR5C?kR##F571N*K>@7lPf%1?$JmuNvD1Df-*X2*%NHt9Ij) zsfShM`;7?z8a&TpPX-oTzH<$D;H7CH5(#)4<+O78r*$fkBF`rJkOur?7K1UpN;H zzBSL$V|N2u(-}saB$n8mB~kK!I?rp^jjJB%jKSPMYEo&F>xA+PTF2e$WRjTaL*D%j z~31k9&BmZz0Ixc?)u`fdkJm0-$i=n zWc5VPoZ>C^K1wE-rk&;VN$RAuUw@O=m?k~xQV+GWoVnQJ8b)i#)r-7Vh*c=8*a1(9 zQaL1jnqzgq^2>OH#n;tiw~DR2Rki~2R`8f~x%Z#5M#>$T^Bt}sV#9XP25BmpAkIqp z9uo^+9=l&AJbQ^p5}&b~kAyMoz8ETh%=ZXiJ9b})pXV1QooAN~llbY(laV*?=Z?Tq z<-$N^e1NuCEX-h&n}$>a`uQeEFc$57azvI?shu?%(XUq9Z5z-%NBGX51Y^`D@rIji z#fy?4_k$qa1j#EiSgo}NC5T#;dQL5MK~2qZYt+KE!)gVjtX4Bt1uZpbX9}yeGRB-Y N0-4Zn1Tqz%{{hdCcJlxL literal 2770 zcmcIl&2JM&6rUI8!+{jpNHKwsgqZDaNEF*~Fir!dl+e|*Klm76PQx+8ybY%&!N)?UAG$b*xfm9_ z6YdK$N-QIb7a1WY#MO+X@i8f#l7%dvP6#P69aNP}GNy{tS|F8ewaz5Pk($DRP#}7k z=RXtGw4@|?-p%u>m{NGY^(M8wNo*Z;_qZgBS5+zI90H_2NN8FrJsJ$&mb64>Dlo0g z1Z_aU_ibcjk~&Qg-pFbR66cDA^Ok`#KrHq4CWDD%EcC)R?bwsWgFU&?JCk3x-kBsP zuRHyS=|zMChD9B>kk=Q0aj!23d`$l0L`_5Yj-}=U2+(VTGU`C+x z4>Z{j1112S0q6plbeRjX-AJS$bOw#>CSx%_;beLsk_mlDVMgTnLp*O@PA!vdJby1E z$fibPT$1G$C8NnwQfy9Zs&ZE(=2DVeBk!K&m3TZYYVNEhSQ>59ikcKvJ}wKl)20hP zA<8LHb*EH?ytJ&bYdo5X15H#7xq57ewBMGJy+qA(ecj02;zE5VNKNYO;6RW&b5Wh_ zzsqsg2d;8g&v5-cr|DyiY<@y+=A<9G!!Q?zJUayWt|90i1{{Yl-H$+FX)f-{vuB}z zBfU7Zu~ghGMvmanW-i}#7S`5pG;n%lX!yms-@gclP3b2h<-13qSSy28uem(Qc^c$tRHaYpb9kR!n(N3jKkt_(THtx)Ypc!i$mT!A7P z#GxmvIC2t)wsZ>Uaft#lq@@xGSB3Yo3U7-@Mi#{OX{~LkY}*#7sj)Ir+iUBjMoV|~ zuTnedffFd-L;eJo?~=i+?+h&X`e8BtC4|WUu*>B@wdwS6%MC%MmEq=7`vlL7a989t zRY;~&f+{9!n!ow7q|FGa7Jh2q+bqAPX+>77QmZT8`ap+`KuSuumvLa!MX$H35C3;? z?6#@{)RfN9ma+M>y|$&KSy86bGe%D>c3>8=2tj{iT9o5-(e$|#(-O@IQM#Sbz)afi zA1mYoR|j%8HlyGO8E5(w<7fPrPqU2iW0}E`!HK@%cZqOr@YBAb^K4(_J+^O{^pd`~ zyPYY^#TP`|KUql!j9I#kmjfdna0~ z(R`rxv}^GHdLv}iZ^LY;AsYhK?AL$ro#}9q9zf_&fEM(3mq@M7)0x{lVSHW=lw!4` zEG%Q>liz^QTZYT;S?)SVyym?x$w0@3bB;dA*Tf#^HJj#?_r6K=DvSfno7y>Lp*ESb r=?GFfez57#dnfEc@UIv#ygsUDM7J5ytxp_f#M-nOc{2e22`PU95hd&+ diff --git a/src/lib/adafruit_display_shapes/sparkline.mpy b/src/lib/adafruit_display_shapes/sparkline.mpy index aa0c67fef96dd1e2a5bfb6331ac0820d1176d37e..dc0a7a9b965b8ce79c4a2349e8d392f3ceb233aa 100644 GIT binary patch literal 1344 zcmZ`&O-$Qn82-MPB&2}m*ui!ADUgvYkdzK%Wj$~}iAzzbv}SCAu&tgKTw>MvQDU}a zhxQ8;O`sii*kRfQsXcZF8}hrKL$|eEOM94hfYOPb*mZ{>A#I25b5f>C(=7kIe%|kU z-p9}TI&8J{^{?~?P6PXtv>;v0EGe3}pk&jklozvcDJ^HuX46vUnyMt_k#rupQ0J?C zlY_oAnCbzDB;QPHN-8O-Wa}j*s|{Pa+qHaJNiOzS8E9V7iydIr3B11xEhu^sg7;CR zn|e_|Nih(a8^}ED^+(LoJp`tDn*$^@bF9W`r%znSq?Xb=!B`_P09RUkXQ1=5 zG1Q(#J*)OL*LvqFx%wUePH>U|3`sDcD-uD-{ps`PH-@b<`T&3oaB`4gW2!7=#E&F( zNzT4C3}?nH3?(frG!ZBGf+KjyFk((gYH}tfr!}sHp~SSB(oAujl>r-^jRCjy7_hIf ze-&=RLEvmdmpu6JdOWi1IS)1s_Qc1^f)?L0*!H-rEXK7OhGHo-l_?smOH4>PQPJc? z)(;Gp5gWFPDt5Jmm*vHTk}Nj^DTfgR^U|Ymo)x75^@RbJ`oxn+2 zauw2&uLf^|C^iWID_A>qiu$)!XJ}bU|83^@Hf-R%Isn?J0872L&e!qmC z3a!W}{w7#ZBvvffOGghVaHYb-m`P#FiKDhWzH%ampBx)cWt2}+NljA4{4%@ZqRw`p zFF6i>-W8qpl#BJla;bjALz4sxD{meHKVxCz)Eh>1tD@7rycNrBYNTDNl+~IeL4#Xk zW1j~elGnk86K#Ajba`s%ay;Ol9`Pmukx_4WX!_ioFWJv!!oCZ>Mek(H?RJN}Ubn~V zo@(6B$0r6Cflm7)`vQq58}2SP47Y;6Vn=9iyziJ*SMjc)<}M;=#VsOUPz0?H ztC9V%4b`wyc;Or>KdNk(9v7b!E4xB3s+OPOS*t$6rM7FOJsj5_WAZ1VE>vrzYB&YA stBq8(kzsK8gOGz>RA&f2Os60D9}j+yDRo literal 2342 zcma)7?{5-!82>&{5ZZ2vbHpHEC2+Rd*7gd;CW~`5RukQ#S(dqw<;$&i$YlrI;Ml;# zd2H#H?8W|wz21vE3x)1SvR~@vk5^lwQ`2|8*sCR&zV4pyLE-E)fxz+n`aZwDpXa$Z zosNUA4-xixDM=1NZJ++ixJt;D?#o6X8UfuOgA0&72XYLeG2qA2#LvNj2!sxU=!|mU zOL<<)6~wY4ornsekSUgBjf!$fRfH-nWd&6#9V@9q@k2$$ zo@NIv3+v&1d)rz6yz5M{P*(dI0`I%6nlRNv@b#2FTGGQSFMqXr#k2A*Dz*+pNc0dZ zB+3z=PuKT-xwUoef@{CAOduK{X^0+&171iwM2Idx+8JGh^iVVaX;(B1Myelappre5 z=7pR@=`f|8R#Dn_F-qx2WkKm!psAe422!seiu7YaDNCazP0-}!oTOz7;s~wCc}*%V zORDCjs#4Hccid%F6g0_g*_Vi0+e^qWalIN~H@XzV4;PC`Qtb33)_&dOCScX%j=;Lf z%|PAcX5k_+IUX7&HwkMdH^rzqM#Z6NatUae+&l#LK!BJB1H_*MGc*gewtpI${$tR} zd_j1G!FK8c^~CjwENWSIR+2AgHP>=MDHMlkPN+~>lX9gIYC(o7a!GSlX->|wr%>@! z=?4W(E98*X3aW!v9JJ~xl~t+O3-4iGO7a!S<_{`RB?OKPl_VweOlWT}raca`? zix3APdyXTJYN_fcB}a6|h5sRX26&6SN=!zE z1CU`&>R;Wmc@w9!jq5qxq=w|(K(xLlO^|f|m^H%UD(i9=(OW7efSP_U=LYx&k z>#X9hLV5h>N3(^Ze5H`r1cg@5`v}=Z$jBngs><`25ymq@M_{eqe!A9ZZ;HS&uq4;F zCBGZtt0Wi$v$fhZLNg$`u+`Y(-dqfvUKfW>%(P2(TWGDE4idU;WOWQHLP_gPCo9Kg zb#@0fKUV^XI6_VYSWS9*;=)<{PII}*i?iIRiF3y4s-RX2sbRE)<*KC5t@VMO#I;j%P$TO6Apcj$1!2@`v2s9-3TwjTC-7SdUhb= z<`duQc$sl{ko4*(M`C_2lgz>Wrc8>Q{&-M1g h*xl*$woJeCh!0N diff --git a/src/lib/adafruit_display_shapes/triangle.mpy b/src/lib/adafruit_display_shapes/triangle.mpy index 069264e7203c2cd4f4d41f20e794498e4d75c655..13c5a261c1693a9972d1fbb85c07e5c8c3908dc1 100644 GIT binary patch literal 1113 zcmbVK-EZ4e9KAPj+O@2e?Idpb5bL_e)zXr5Y3KtFV{=`oHUW*gY)b_4+{A0m(%3i- z)DqIJBY{?F4?F`;`~~q>k|xzA!A83AF(e+gy=+hX1N9_cv7Pk=i5IS}bnoxnbI-ZI zqq`glotSETIsYaYevdEn*Oj`ca%Hh5S9p!9ZSk^DORI{=S2rs{O4hDTq3EfP*)>`K zt5JY({3BTvr7B-Z!q<%83qB!nzL8*Br9Cr#(IL9f1EOFeW48-wEFJDHCWW!WASAwv%vZbnW z?VWUbQ&hL=8>y1Coj&qQpFiqwSyW11r)!$JDq8v~ z{pmFT2rxl;{$UEdwmuJX__6C^rLvL3$ECVj5v#&R^CW;2ATp4e=;WUL$)=DI8!^eDZL!+TLKoR2^jF7nTZ3KOa+ih*9b+R=%-zUKh57OPI>@ez~{3B)v z_4f6{{39ba%K5R~L3wh-x4NU}E%&Zh1;%&%N?(c;81rVX1OSMDU2JCo(-yFuGnjS; z+sR;BCLX^fe-~pXUPUTBJxwQQFF86f&(JI7(~FCA;_}?$I-LM!>nVE{8GYlxYCmQp z$m%n%AglAl-ySdkIRWbUs1u-$k2YfyZL?!Gyhr3pwkHum_5%h(w(dUI(+^GNJi79b z1YaAL;dV{;g>AZjA7)|ShnxY_8bAl_K(*5@_79pd*zR_^zN-G$)#Bsjy_YnI|TrGtDfL_$;PDAkbAP^MN02$ExJr!hFT=Qz+@ z?IeO5F8C4rg8C~-lWLR3M!NB_3y`+m^o~m|nu!ap#<3HJ4XIK!%RYY3bKdiu*Uxi~ zuXu>aiWk_|$vlWc<{WydKyd&(K|vB0U}XjJBqT|g2~v=Z!B+tphv!N#xClceWIf~} z3>5trs}frmxaHRvmMJTBUZq*SCJRi1u2mSBt0h&1XT&XmOURAsf+RGyBr$SCZbBZ7 zyLs;0mr0}&`B|F&ic@O5B+|5>rWH<>aIi6^cXKBIgtfJbs>-#ulgTY!t<*nHY)aLn zyL9rBTkk5bY~s2L4Yh))-y2uI?o^+^Ge7n@8l7H*QTTlXomA2JZ{uH-F!&_20LUo7 zf{+wAvkn5m6x;{|({N*F6F_nflpuKlhW-L2f`w!XhEnh>ge8yD*(pv+J&tzxi$$i& z(ew;Wk0gKU<4@4^wK^k=61-(z5T>QND)1tQr|}{-g+4*E3iCB>k8!MDRwS8I)P|Gm zG*dNBRXN3pfwvV70l%LB)EwRz%_J3Db8e23uEfd6>icW)Sb}`>GDR-Mmaqt=x=-BKWwNue3YL?eH6W)n?n7)=3(@{HlK$#P;^XuqZu`ZHz(bj zcDGsfWpes;yy;z0k7Jy#R>x9Lraa?=r^<`&^Pd&2cQ0^ay~-(!%6SA%^wGATZZ-gL z$y?)uGO?W^8YyBsO*GQPc7|wV93q#aweT_k(*WRoh>iS=T3DcB6gHEJz40!!#=f4- zQn8QDXVebRXK`ehwhZK`k4#9MrPW9V}c&@9Hfq zPoQXG4j(e_=Df&k4)5+Z5B1z7l)4xG2WW;i?CHbDrat`pkc9&qvPMvQ1nqYm+HNO1 z*mr1q-JVU`{4@Ye42Os3sD#FQ?hfww}>96oNF&(9brK4ZzTEOo5#DNKbxo@4Pz6{o7qmmIAsj98Nyg%j1u$RwC`QY4wV NR(Ff`ZAyZq{0jxPW1|27 diff --git a/src/lib/adafruit_display_text/__init__.mpy b/src/lib/adafruit_display_text/__init__.mpy index 8673b5fcb4fec586543c5863f8a7995082118703..e326f58051b193047544641d388e7df91b6ac0e0 100644 GIT binary patch literal 4836 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 D6f%U| literal 6916 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 diff --git a/src/lib/adafruit_display_text/label.mpy b/src/lib/adafruit_display_text/label.mpy index 68bd0ca126f0615887b3e79762a42ea640fdfdb2..812a36d603afbcc01c356ffc94ab6eac6afc862e 100644 GIT binary patch literal 3848 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 literal 6012 zcmc&&-BTOa72hKvjQFroKIDWTMS!#-CV-J65O6slA>!#aZxbj1*119 z&dA9gZP8tzDr%`#8|mrm@7doV2p8nEuBa(Ns1t;=tf_+FK1CCci@N-D)rCv_rJ9S) z+1dus2NQ;&>4$oI=M*E6ndzBT=X;B*_8u$BJ*cE-QU1wABY~m}6?Sn3chQ6M1P4=D zODD9!FWbz{4+gI6yK?Z##1;1yw;YhM^U-tdT(FHp^#pk?H^V`&g`0-p1WY@EXJOhI zJO$G=!9|#M1>b?`+TcZ)-WANkbY1Wg19Amfi)yn%F1^Z)L=! z)r-TF6pAc(h1s+$8nQ4W&Yqu3tC^G}%%}^`2pLVsT)15Cw`VIu= z0x$evJQNCb_e}Km3@3Y5hUPqf!s@PPl8so62G$t08jY-R(rPrZ#u#gO$AL*S4y&H~e~C4jdH*SBZ3NU> zL5#h-kty~0Om+@?3eDZD={-&7m*=sV+BDT2EZ?PPG&#LF+Bqj1_4DF_Fqd4^5;`?& z$O5^>*E15auUX-sb_wwSi`%H5TVls)$}$05LXOki}(UYQPzgu~(Xb7OscpyNR3M0k9xbM(cr z@c94&dd_zk0r+OlcLZWBCbcfLtyA${+b#1pRkCe&qG!#V|A&Z-Z#X`?YmLeIPQpgc zHwGIx`Xt=DeeL>2>mRs$_F>L90N>_(ufn$yjToWNC~Vxy`NkpEU|zdNw1;=1^;lhE z10LRK{X1u_NRD+XS0%?S!qy+b%4#<5{G94W zbLbHhu(XU95J!YbhSYbtO(H~|U^2f^#&w_?SH2oo&*u8X&kRQ^_2HS?_U5>Q`Byv7 ziYW3J1I;8Cs210}EKHCcc%CtM!-pqZP+kAg)a#@GBbBV_3s`1=Kg#obNF* z(DlFy<^Ppu+CzDnA8mC&THme`d%adk>2liG2BykJT6d9cM*bhSw~a)0+3ocm45EM; z?v(ttz|Qvaa0m!422T-OeAC_@9>(A3DgHR$+1K8&KiF}Q=SREv{zzXqGRR{n3x_kT zKqwjO3Wn$S;~fV>6Z;TK%o`?i_L$4eu16iFxxQk>ojTLZ@iIgk(XA{{pr*P1_WnDc zdG6*%2Gj8QM~EL^$Gqk;#xV+Fg&6kWrg?QXQeY`xE2r@G|0yNumlB3xZVPWRS) zDZs!f<5UL)!)wcS%4gUbfQKd0pO6=_`7?1ug!(OV7@*2;%p+0GikEA?G_a6)6udgD z`3&%8u!w^90u}?{eH%Xc7;~|o!IwkPqvrnB4EK*%%#3`;*)PK<7=u5K{{p@oMj4K+ zGHfM`{9CNv{FE?jHH=$kVEHchDPs6)_Q5TtsRuV!vJcjyKmRFd2hZp(UIo~=Z@4%Y z*<5J#tNwppM0k(E^{XFVe|YWc!^xT)CSf_>0#Gu8i~G-FYlzYu&s5nBaR>Z+j5BQs zrf#7a)$CYPqC&lMyO?by1#Y??u(ZgjrX`BLyYz$-H-rT%(Qrr$_}@9NqzXkL{yU__ z5*M0QMyNIj=UYn_I;#Zr+8Gw^%VK*mt7w$uxR^=e0|VXw>gj{87LvSRRjs6meH&Px zmD&_o)fMmE?lX&;mF)cwxzkPLaS&_=r$WM4JOg_d;nvn=sznX^-JSv1wo$k;jupVK zj=+y{i*xl3g1+602z|eb9_R>lf1lmS*-J>i^b+#NBhMiuod&$pu-rb+a{HwmChbGf zcJy8qz4ux3=FujOo?ILfEWha(8uoZ@b~=xde|o0u??*eh$2M7ZW!h2ZbCi`;8Df6{ zD0>b7>+-m%3*CPPH4?yBI%gyT^1`evOFE@xg;#~w>e#Jv&pV{6!=X?()Z5LJ6+^Y4 zZf@e!6QKn{MnA&B=37n<-*O6STe6-+NNt{}(j(dq>adKUa%-H`QG6<(ymGrIfbXCv zyJ^r;0eloj)2P2l+Z_qvPH|(e;>Kc-Im7?-mJF4bQ!ci_0KJ67C0 F{sRdZ7-#?h diff --git a/src/lib/adafruit_display_text/scrolling_label.mpy b/src/lib/adafruit_display_text/scrolling_label.mpy new file mode 100644 index 0000000000000000000000000000000000000000..373db2a951a9828ca96540964b0b4580ea1b0bcd GIT binary patch literal 1026 zcmZuvZBNrs7`>ORY~!_Ep%x)Jfgu*%bS~2v6A^|X#>7o92BW!@u9L>CZMr*UA;jxT zOh)7n_=WfnT15S-qQAj}n3!n%1AOwMPdo7?@k?*-bDn$dbI!TbT-)KqWBd3piWJn6 zT6XFNB_*R~SJVcf`U*|gG{>q`4D$}Ds7rb!Wj7WRtbc4~yfAX|RtfQ4nN%i|IwMJh z+|!+!VVQ)CAc-f$(QS(mRve5{qpC}o@$!;EtE$~%Qt+Vi-z$eg5?+`cL5%0G+7t-Y z3iNi-h7D5$ATV9BOj>X(YH3!0mSJyL0eZO`-4M{&mwcElT*m13d zu_O4&h9s`2VO*PDrqr&TOQ-J`bh*Bi(yVHFf4cO=eP^Z(M+1in4Y~|E^S^wW2cJ@K z?(x~g1Ri*Hl=YM*H-zT+dUPYQ9z#e#2PAMLB%y=rJi?$%3D3DlFqV)|Q1IO8HVJJC zyzN-F?$Aail*Q6Pt?oFwNr_>W^c4Y%T{WFj-N}Rj3<+F@gEd~RS1LhF&=ASA`;e>Q z_HyWC>hz=1wdk=Kuet+_X6@WLxkmQ~ZJs#GU_NUuG4 zi2QT&15X}>ylRyE-S-mus_F{SmQ_d9V658qgX=sBf6jL>zI}Bq(TC=@bNIuyC-;%x zLwbE^Glv$68bXLe&8VMQBpc-i%2Frf{oWmda=;~U~vi&O8 zw)4`JyWJaN?BVyDGKM?5i&~(u*-^F}O`nX#xdW`em_V+0*w@~CI6EBYIJTCWMP4vg zZx(;bN15l!k*QwRs=+Jx;mV;FQ{2?=x1NH}7GX~oC;zY&h9zLzP?RKO`zMDZAi>Mw ScRnlgNBqnFChrsa*8c<@1~N(j literal 0 HcmV?d00001 diff --git a/src/lib/adafruit_dotstar.mpy b/src/lib/adafruit_dotstar.mpy index 696e977bb9ca8db3544dc81ddff7d8e265113a69..f2419d694fd2cb7dfc118ee7409977f4221d3002 100644 GIT binary patch literal 1443 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 literal 2257 zcmb7FU2hsk6rBr(*x4pAh3sRw8dv~oAM zDt^a#iqJpZG=^hnJOKj(#-Mc5d5P!2$OFzxT<~xKa6#e)4=(^-ka*FG`za;+hU6N1r z`RnrXQ~E+}sxQ>biFXO1o6Hvo&mmD?oJW~FWLMzoZ9RgE;DX;JScS|YWEJSv0hb`N z0NHhTE5>WSQ&%``c;HHc`<~aY>91j`egXJ_?|Lq*-}tT)JcLXEvX9`GKf34X2&C#4 zV|de>d-vy?^kcY4e+yHN=}i=GIkDStbs=KQKI^3bJD?(b2W9?3D(HasA+rxN0BXbq zVmc~D2cVAOLy%rE0goVam^%sm}UyvUV{d_HrufZnVTTN5C4%|cxL<-`5NDK&Lkw`>nhYhp zTes{QC7~II-@O+45uyDhLt`&RcnaN^jUg04XyT6e9-RLu+W9Vq_qVzYJ<`kPYC9Mre#tvmO;QX+aDKCHBQ_a;}yId2gl!m0*t}D2KJ_@#V&xbtWCI z`uw~gd*92KV5*m2m5-uatADB=MLeQ?LapYdjh$*{hkhjlHf5BMaMma!vZYdZyZE~%CVdxmsg)_R52cFv@1#CCL?5; z<^PK$L4P0%G_n3q#s=w#xk`jk{zlN&4}hKor);jF>Z-vx;-%#WjypxH0%wT6<++HY zJj)j7m00O*iu3Ny=BHik9(1>Ns*)n@wq%}~T2}?;`L1XA;jEd^C0-NbbJur5dlI0y z6wX)-$5!8z<=}%IhFz%Kb(uy4%iD?cJ>|eLw5>?`nzDc;UVY Vkcs7GMj{j)VA*uk9zZcq`Cpc0pmhKM literal 888 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 qT7xjKQm@h4a(PoSp#XT4wxVk2xS zQYm8GfRw0F6{(eaYpPzFTXzkC0BI|eG!6OTR4HnD=GNfWaLBRGhDud$Rad)D^X8lR z=FRGTU$2g8w_lqwyOExYC*xz&GwFOZ70;z6(}~m3Tq^E4HFYHxB⩔DQB{?vr}GZ zSTHX1AQEadK#Fp0Xn;Wj5eEq}N5cc> zqT*Y_y+h%_OXt5}+Nycq;Dz(yi`5AhG1?(Fiy?Yg3L?j9Ao84+X^M`^`NYf^r(Y^c^QPz(-9T5a0s@p}ATx0@3JF!p-` z-Q8Y3z^9Fz;C2Tfb^Fsso)35hU!dF16^^$s`c`r*7Ch-fG>R)U`ck0!j6|`T+ z4TMJRY@L8*asp=F*?UC9b~5@i-Dx$=WTxWM1glq8=J(*8ubiSrd=wd3UU{#uJ$ma! z?{9OFTVh9bb>s5NwOs(N?~d#&uY6XEw;&b-YJW9Qzv%sCE}}jzZZ1AqdV2R65x;|- zWM%Y&m;E~O`Ad-^mm+;lWPNpQeW$$hoHcBTN%F-3{_O#7BCBgV>wwm8iT&hG4Xq=N zGY2pYaCvpT{Avxp=d5u{JVqQnwN-lJAjAJ=Y1k4Gq4B*1f%?93zw$$6d1a)+n#%WR zy!w?ut*yIsZr$U}Cr_Wjjca!pgge};u#M$XakauWl{XgGD(s>1gQfKfYc4;$d%wb3 z%0H>a#ihG0on%5rDK(Rs(5Bqllt-K5v?*Sj5^`<5)meKk{jqG%rLr@VNqa)J`-HAU zI-g5WX9xdlll`+B{?GW60fUo0d~-VJboSq%7mh5nEa;I19bph-)-dR(rHf&b>2W!i zk5-Gfco=J9GAm8gGIKp+$iy$pAr}twh(Q((Gi_06S_W-J_jhp=gKl#g#&nQs89F7; z?k6D$=?b$&+=eX81biZIA3NWHSc=uKT1TOJXNs@ZjR@8Uhs5-aJ@c` z_wyb%2g2q2ULF+9xf5vKFxYXZfqWY5oRsbPjtt-BKuU9c2|mz}D&We7%Hr*k%2E!0 zu}}d?z22>cz3o!*`rZST?y?$cBGN4SsO=K%Q9}TOj+ACg*ozbswjc0s9+s53c4t;7CoW= z_RuN{XQ@_n6_~5SZ^i=N^+DyLlhE}=rMUr)QfycmZMMLY?MpU%u-b<=U_q(p}rP|0lQJjKnbuTNXW%3QTV-Cx696J-DZ literal 2782 zcmbtWZ%iBK8GoPiAA%t?t~`zs2W)b_WF(>XoeyITRR$6WVpT}!+GgH#{&Q!1i?Nx{ zp2DPwvl_Hk(O?@FFco2l9^&zE6LfUp3P~g=Vd*c3=J(VIrUPp zoGvwg+Qyeksy=;z(F*&I`@fEKA+MJ@7PNG+u((vp7V?dr#{KZz`7wF?yB8*A=BB@Y zu8X$LPEVbidx6CM7rX&{&rDREUTgQ^qg@wg3wzWdu zPLJ2P*)>;43XMp?pb(DY^N19UL?kgPYAzuh3`VgT9MN2&7?r}q(a4ApvJ(P?96kkp zsQ44H(}PI1_YN_=ok&c?Wte@xCEaHr199)qiK#$*|4^-Ia%sAT@RRwpYD31HYCc_1 zR7X-zYnmfPNh8FrBumMDCm{?W9Yb{U(}@^vZC3wn{;scsa}Wt9*ZM0IzZW(n((6dGRza@sqyq{VZ_;uPKWA zV~P+Z^!MR*!#hS;rvg6!<05v=KDuK_{YLPw-T~;_jq8UDwzuqttMM(x&sl*tf5a}|uH@CJQ)*jwt58am(W4!(&`{e3g#-5;5@jw^kJ9kM(!z zf2!Zy@YmVS+AZwd{EfnFZO=L`JKn$h!G|9qXbZ(OqPSIO57&0qHtTFx?e_JpI{QrR z-SzD{d!+W>jd$v-yY`pr+V%AtvyS+aB5wWn+Hz{XYfRVGA{G0&VzE%%PsDP5F`2${ zKqgOV5Jx&&&R=1&K_(kwvI3J8nQU11PS9STuKiT?>DfX#r}$E;Z#aA=rIqv)^TPDk z&8e>{@tZtf#@xW`TVp8VUlwCLKl#S9E9}a1D{ZLNqXUHV6SOamCr5eU#^GoHxCx*= zXTd!SJxRj#k_2$mkYKo8NZ7bb)Bxwu>nyWq&G;c%&Lea>*ahyfi41puPSR^V-iCD>(ImaOrEW_GZyQfmQ`}R**$E?HTCxLaE{1g}_e;%rl zLug{XP|bjVF2BERYxInq?UYej#X?#|)hUPN1$|zozJ)fNZ=TOV?7EuEST=_Gh=_tT z5)M(H4F?5L5XEpPf}Sf43*v|v3JU1C!iXfI84JM_skFN++x1LSfBHo%kW+mnE-#)L zpcZ&+3U)jn$1F>2-5QeZEG3`)F#xYwGLP=T01BpAo-ic}(vIT^T()7F|5;NJ2Y z)sPu){^PBg*{_ISse6qw*G@%~EEbbX`!5CuNVKEw6-vv2-X}Ri^6+y|h6h{!dnK&0 zUuraf)e!4^$0f?@cEU&V2KxR+5{%h54H+`7&=TLwy4FzbKPqVX$0P$_ZIdE{E@H<$ z+D9=#-}p1`&|~)WOt{HTQ=*uH%nt?W!LmEvK02@F)vJre|NpjSDGE#cAhqIs7;_ZH zZ3{*>5Q+oLzDtP1g7IJ1XpMweP?~^A1Hy5X9t9Ak0PY}wi^QCo=pZ}YFG2OQS3J_* Ya@;kV)ASO3`+CaJ?SUcTDy}v71;Yn=$^ZZW diff --git a/src/lib/adafruit_hashlib/_sha224.mpy b/src/lib/adafruit_hashlib/_sha224.mpy index bdd80b28162c9592b939e2fb2d5c8e23efd4d417..7d5829ae59bc7a7469d25b1d20f9253c526dd879 100644 GIT binary patch literal 72 zcmZ=}Ws+AY;SgeAH%m-OOe-qQEQ!xZEY8TuOwx}p&PX&eGSMrjOmJvmXJ{1Qfe2_Z TO7nr`OwDAN#TX+4lNlHQ&zBOv delta 89 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 literal 8448 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 Id(+AKAG;aZ?EnA( diff --git a/src/lib/adafruit_hashlib/_sha384.mpy b/src/lib/adafruit_hashlib/_sha384.mpy index 10d071858af1fa478c00c2499875ef8c9fe3f0cd..52b2b56cf9722cf29f4779cbef7aa1d3338735ce 100644 GIT binary patch literal 72 zcmZ=}Ws+AY;SgeAH%m-OOe-qQEQ!xZEY8TuOwx}p&PX)2FwrZhOmJvmXJ{1Qfe2_Z UO7nr_Obv}>n8g?)1CtpT0MQf@$N&HU delta 89 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 literal 10806 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 HwAOzEYTre^ diff --git a/src/lib/adafruit_hid/__init__.mpy b/src/lib/adafruit_hid/__init__.mpy index d955aedd136d77e0708f1f928a26033f7fbd5efd..1aa298b3920f70424a6400a5b9f98cf8cc5515d9 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;4MxtmcB05PCf?EnA( delta 289 zcmZo=-pOq0%giLN#>fByyygswjEM>jf@-M@4FAQH8C8@R#Tiso7!w#(R2c=MIc#$C zQ%ZAE?Ib4hNT{=#=o#vnbH~S*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?MDI8uiI diff --git a/src/lib/adafruit_hid/consumer_control.mpy b/src/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/src/lib/adafruit_hid/consumer_control_code.mpy b/src/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/src/lib/adafruit_hid/gamepad.mpy b/src/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/src/lib/adafruit_hid/keyboard.mpy b/src/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/src/lib/adafruit_hid/keyboard_layout.py b/src/lib/adafruit_hid/keyboard_layout.py deleted file mode 100644 index f419adc..0000000 --- a/src/lib/adafruit_hid/keyboard_layout.py +++ /dev/null @@ -1,106 +0,0 @@ -# SPDX-FileCopyrightText: 2017 Dan Halbert for Adafruit Industries -# -# SPDX-License-Identifier: MIT - -""" -`adafruit_hid.keyboard_layout_us.KeyboardLayoutUS` -======================================================= - -* Author(s): Dan Halbert, AngainorDev -""" - -from .keycode import Keycode - - -class KeyboardLayout: - """Map ASCII characters to appropriate keypresses on a standard US PC keyboard. - - Non-ASCII characters and most control characters will raise an exception. - """ - # We use the top bit of each byte (0x80) to indicate - # that the shift key should be pressed, and an extra 9th bit 0x100 for AltGr - SHIFT_FLAG = 0x80 - ALTGR_FLAG = 0x100 - ASCII_TO_KEYCODE = () - NEED_ALTGR = "" - - def __init__(self, keyboard): - """Specify the layout for the given keyboard. - - :param keyboard: a Keyboard object. Write characters to this keyboard when requested. - - Example:: - - kbd = Keyboard(usb_hid.devices) - layout = KeyboardLayoutUS(kbd) - """ - - self.keyboard = keyboard - - def write(self, string): - """Type the string by pressing and releasing keys on my keyboard. - - :param string: A string of ASCII characters. - :raises ValueError: if any of the characters are not ASCII or have no keycode - (such as some control characters). - - Example:: - - # Write abc followed by Enter to the keyboard - layout.write('abc\\n') - """ - for char in string: - keycode = self._char_to_keycode(char) - if char in self.NEED_ALTGR: - # Add altgr modifier - self.keyboard.press(Keycode.RIGHT_ALT) - # If this is a shifted char, clear the SHIFT flag and press the SHIFT key. - if keycode & self.SHIFT_FLAG: - keycode &= ~self.SHIFT_FLAG - self.keyboard.press(Keycode.SHIFT) - self.keyboard.press(keycode) - self.keyboard.release_all() - - def keycodes(self, char): - """Return a tuple of keycodes needed to type the given character. - - :param char: A single ASCII character in a string. - :type char: str of length one. - :returns: tuple of Keycode keycodes. - :raises ValueError: if ``char`` is not ASCII or there is no keycode for it. - - Examples:: - - # Returns (Keycode.TAB,) - keycodes('\t') - # Returns (Keycode.A,) - keycodes('a') - # Returns (Keycode.SHIFT, Keycode.A) - keycodes('A') - # Raises ValueError because it's a accented e and is not ASCII - keycodes('é') - """ - keycode = self._char_to_keycode(char) - if keycode & self.SHIFT_FLAG: - return (Keycode.SHIFT, keycode & ~self.SHIFT_FLAG) - if char in self.NEED_ALTGR: - return (Keycode.RIGHT_ALT, keycode) - - return (keycode,) - - def _above128charval_to_keycode(self, char_val): - raise ValueError("Not an ASCII character.") - - def _char_to_keycode(self, char): - """Return the HID keycode for the given ASCII character, with the SHIFT_FLAG possibly set. - - If the character requires pressing the Shift key, the SHIFT_FLAG bit is set. - You must clear this bit before passing the keycode in a USB report. - """ - char_val = ord(char) - if char_val > 128: - return self._above128charval_to_keycode(char) - keycode = self.ASCII_TO_KEYCODE[char_val] - if keycode == 0: - raise ValueError("No keycode available for character.") - return keycode diff --git a/src/lib/adafruit_hid/keyboard_layout_base.mpy b/src/lib/adafruit_hid/keyboard_layout_base.mpy new file mode 100644 index 0000000000000000000000000000000000000000..61147d7b3958e101dd7927bf32fd5b2ca48fc152 GIT binary patch literal 1223 zcmbtS&2Ac36uuWizy@0bGZ|YrO-B$gU<({dX=PQafw2v-i*1Y*(H~s~7#n2bLBn7N zMOH4Bks7J1K0=jUHv{+uYWE4UN*7k8z5wbQ^b9{zlx;POGw1KS-*?VQSxlb`SB=#t z$eNZa(y`jAX{1`KL{8;)Ns-hFsY`98rIC`7QW*!$h46`$7hYT}?8s(nPp%+f%|66=O3(qn7iJAQ}91X{Ko{)1{ZPt`C zLcEA)2vOyRLP$P}nWs~<-4T~0P>Gp%d{D-?xn9+@Msqz9IjL#YRw-OoUPh)uB8jP@ zR81{|vi-JJg$L3ZF%0F`4qF;Ke_1RR{lfV36@4524IiEBI^Hr}PuJI-M^3cB10OSw z+@22Nxx;j3D^Ip|6Wb#YU}~ z=YMZ>);okk7ZPtgoi{^+=`e-?amGM|qQSm_BLL1ub?hm%;G$;`bpROE0M_;P(bvf;YGle33>vHwOc}?bE-+kI319Ru5=_y#PDr zw1Vzn1?;_Orvnas1Cn9#Fe2|zTreUz_yyPeei$-ACTSa$f&Ri^B*kVh{r^Hbb&q?Q zrN2>Ycs00;#td~fcrQ98ivh+*W#d}zMXM3&9hK?m;H;f|)cpuz#f{}~VA^}zccD|A YU5Vijq7C+Lhk=wqNB`(t<8 literal 0 HcmV?d00001 diff --git a/src/lib/adafruit_hid/keyboard_layout_fr.py b/src/lib/adafruit_hid/keyboard_layout_fr.py deleted file mode 100644 index 63fa6a8..0000000 --- a/src/lib/adafruit_hid/keyboard_layout_fr.py +++ /dev/null @@ -1,194 +0,0 @@ -# SPDX-FileCopyrightText: 2017 Dan Halbert for Adafruit Industries -# -# SPDX-License-Identifier: MIT - -""" -`adafruit_hid.keyboard_layout_us.KeyboardLayoutUS` -======================================================= - -* Author(s): Dan Halbert, maditnerd, AngainorDev -""" - -from .keyboard_layout import KeyboardLayout - - -class KeyboardLayoutFR(KeyboardLayout): - """Map ASCII characters to appropriate keypresses on a standard FR PC keyboard. - From https://github.com/adafruit/Adafruit_CircuitPython_HID/pull/54 - Non-ASCII characters and most control characters will raise an exception. - """ - - # The ASCII_TO_KEYCODE bytes object is used as a table to maps ASCII 0-127 - # to the corresponding # keycode on a US 104-key keyboard. - # The user should not normally need to use this table, - # but it is not marked as private. - # - # Because the table only goes to 127, we use the top bit of each byte (ox80) to indicate - # that the shift key should be pressed. So any values 0x{8,9,a,b}* are shifted characters. - # - # The Python compiler will concatenate all these bytes literals into a single bytes object. - # Micropython/CircuitPython will store the resulting bytes constant in flash memory - # if it's in a .mpy file, so it doesn't use up valuable RAM. - # - # \x00 entries have no keyboard key and so won't be sent. - ASCII_TO_KEYCODE = ( - b"\x00" # NUL - b"\x00" # SOH - b"\x00" # STX - b"\x00" # ETX - b"\x00" # EOT - b"\x00" # ENQ - b"\x00" # ACK - b"\x00" # BEL \a - b"\x2a" # BS BACKSPACE \b (called DELETE in the usb.org document) - b"\x2b" # TAB \t - b"\x28" # LF \n (called Return or ENTER in the usb.org document) - b"\x00" # VT \v - b"\x00" # FF \f - b"\x00" # CR \r - b"\x00" # SO - b"\x00" # SI - b"\x00" # DLE - b"\x00" # DC1 - b"\x00" # DC2 - b"\x00" # DC3 - b"\x00" # DC4 - b"\x00" # NAK - b"\x00" # SYN - b"\x00" # ETB - b"\x00" # CAN - b"\x00" # EM - b"\x00" # SUB - b"\x29" # ESC - b"\x00" # FS - b"\x00" # GS - b"\x00" # RS - b"\x00" # US - b"\x2c" # SPACE - b"\x38" # ! x1e|SHIFT_FLAG (shift 1) - b"\x20" # " x34|SHIFT_FLAG (shift ') - b"\xe0" # # x20|SHIFT_FLAG (shift 3) - b"\x30" # $ x21|SHIFT_FLAG (shift 4) - b"\xb4" # % x22|SHIFT_FLAG (shift 5) - b"\x1e" # & x24|SHIFT_FLAG (shift 7) - b"\x21" # ' - b"\x22" # ( x26|SHIFT_FLAG (shift 9) - b"\x2d" # ) x27|SHIFT_FLAG (shift 0) - b"\x31" # * x25|SHIFT_FLAG (shift 8) - b"\xae" # + x2e|SHIFT_FLAG (shift =) - b"\x10" # , - b"\x23" # - - b"\xb6" # . - b"\xb7" # / - b"\xa7" # 0 - b"\x9e" # 1 - b"\x9f" # 2 - b"\xa0" # 3 - b"\xa1" # 4 - b"\xa2" # 5 - b"\xa3" # 6 - b"\xa4" # 7 - b"\xa5" # 8 - b"\xa6" # 9 - b"\x37" # : x33|SHIFT_FLAG (shift ;) - b"\x36" # ; - b"\x64" # < x36|SHIFT_FLAG (shift ,) - b"\x2e" # = - b"\x03" # > x37|SHIFT_FLAG (shift .) - b"\x90" # ? x38|SHIFT_FLAG (shift /) - b"\x27" # @ x1f|SHIFT_FLAG (shift 2) - b"\x94" # A x04|SHIFT_FLAG (shift a) - b"\x85" # B x05|SHIFT_FLAG (etc.) - b"\x86" # C x06|SHIFT_FLAG - b"\x87" # D x07|SHIFT_FLAG - b"\x88" # E x08|SHIFT_FLAG - b"\x89" # F x09|SHIFT_FLAG - b"\x8a" # G x0a|SHIFT_FLAG - b"\x8b" # H x0b|SHIFT_FLAG - b"\x8c" # I x0c|SHIFT_FLAG - b"\x8d" # J x0d|SHIFT_FLAG - b"\x8e" # K x0e|SHIFT_FLAG - b"\x8f" # L x0f|SHIFT_FLAG - b"\xb3" # M x10|SHIFT_FLAG - b"\x91" # N x11|SHIFT_FLAG - b"\x92" # O x12|SHIFT_FLAG - b"\x93" # P x13|SHIFT_FLAG - b"\x84" # Q x14|SHIFT_FLAG - b"\x95" # R x15|SHIFT_FLAG - b"\x96" # S x16|SHIFT_FLAG - b"\x97" # T x17|SHIFT_FLAG - b"\x98" # U x18|SHIFT_FLAG - b"\x99" # V x19|SHIFT_FLAG - b"\x9d" # W x1a|SHIFT_FLAG - b"\x9b" # X x1b|SHIFT_FLAG - b"\x9c" # Y x1c|SHIFT_FLAG - b"\x9a" # Z x1d|SHIFT_FLAG - b"\x22" # [ - b"\x25" # \ backslash - b"\x2d" # ] - b"\x26" # ^ x23|SHIFT_FLAG (shift 6) - b"\x25" # _ x2d|SHIFT_FLAG (shift -) - b"\x24" # ` - b"\x14" # a - b"\x05" # b - b"\x06" # c - b"\x07" # d - b"\x08" # e - b"\x09" # f - b"\x0a" # g - b"\x0b" # h - b"\x0c" # i - b"\x0d" # j - b"\x0e" # k - b"\x0f" # l - b"\x33" # m - b"\x11" # n - b"\x12" # o - b"\x13" # p - b"\x04" # q - b"\x15" # r - b"\x16" # s - b"\x17" # t - b"\x18" # u - b"\x19" # v - b"\x1d" # w - b"\x1b" # x - b"\x1c" # y - b"\x1a" # z - b"\x21" # { x2f|SHIFT_FLAG (shift [) - b"\x23" # | x31|SHIFT_FLAG (shift \) - b"\x2e" # } x30|SHIFT_FLAG (shift ]) - b"\x1f" # ~ x35|SHIFT_FLAG (shift `) - b"\x4c" # DEL DELETE (called Forward Delete in usb.org document) - ) - - NEED_ALTGR = "~{[|`\\^@]}€" - - def _above128charval_to_keycode(self, char_val): - """Return keycode for above 128 ascii codes. - - Since the values are sparse, this may be more space efficient than bloating the table above - or adding a dict. - - :param char_val: ascii char value - :return: keycode, with modifiers if needed - """ - if char_val == 224: # à - keycode = 0x27 - elif char_val == 231: # ç - keycode = 0x26 - elif char_val == 232: # è - keycode = 0x24 - elif char_val == 233: # é - keycode = 0x1f - elif char_val == 249: # ù - keycode = 0x34 - elif char_val == 8364: # € - keycode = 0x08 # altgr will be added thanks to NEED_ALTGR - elif char_val == 176: # ° - keycode = 0xad - #  TODO: add missing ÀÈÉÙ - else: - raise ValueError("Not an ASCII character.") - - return keycode diff --git a/src/lib/adafruit_hid/keyboard_layout_us.mpy b/src/lib/adafruit_hid/keyboard_layout_us.mpy new file mode 100644 index 0000000000000000000000000000000000000000..7b3398c97002fdb745dab2ddc33b92b19814a973 GIT binary patch literal 330 zcmZ=}Ws+BD43LmuV0TGONlYs$%`Az}$V}1CPOVJJPb^A_&q=JzFD;2LE!HcjOi*ZG zFX)@j&?und4VCu+OFJbNr)n`uYoO~&0*cEpi!nxq7%>Papy~+?7GySI7GoA<6q7-f z2~1{StYHvg=Ir5b5K>?eWDpl)5EEb)V~|p25L0jrcJ}m)5Al!pc8zrQcX16&W@Jce zWPkxJZ4DR`Mr(o?I`g(HSh#43$+G23*O}>>Td2#)D<~={tEj4NHr}SUeaHNk*0%PJ z&aUpB-oE|`6DLicGIiSY88c_io-b`DN1ZXRAfegQ!tVG&U=aS2H& NX&Kq|8#iqA0RU^>U9SKD literal 0 HcmV?d00001 diff --git a/src/lib/adafruit_hid/keyboard_layout_us.py b/src/lib/adafruit_hid/keyboard_layout_us.py deleted file mode 100644 index 8b908e2..0000000 --- a/src/lib/adafruit_hid/keyboard_layout_us.py +++ /dev/null @@ -1,164 +0,0 @@ -# SPDX-FileCopyrightText: 2017 Dan Halbert for Adafruit Industries -# -# SPDX-License-Identifier: MIT - -""" -`adafruit_hid.keyboard_layout_us.KeyboardLayoutUS` -======================================================= - -* Author(s): Dan Halbert, AngainorDev -""" - -from .keyboard_layout import KeyboardLayout - - -class KeyboardLayoutUS(KeyboardLayout): - """Map ASCII characters to appropriate keypresses on a standard US PC keyboard. - - Non-ASCII characters and most control characters will raise an exception. - """ - - # The ASCII_TO_KEYCODE bytes object is used as a table to maps ASCII 0-127 - # to the corresponding # keycode on a US 104-key keyboard. - # The user should not normally need to use this table, - # but it is not marked as private. - # - # Because the table only goes to 127, we use the top bit of each byte (ox80) to indicate - # that the shift key should be pressed. So any values 0x{8,9,a,b}* are shifted characters. - # - # The Python compiler will concatenate all these bytes literals into a single bytes object. - # Micropython/CircuitPython will store the resulting bytes constant in flash memory - # if it's in a .mpy file, so it doesn't use up valuable RAM. - # - # \x00 entries have no keyboard key and so won't be sent. - ASCII_TO_KEYCODE = ( - b"\x00" # NUL - b"\x00" # SOH - b"\x00" # STX - b"\x00" # ETX - b"\x00" # EOT - b"\x00" # ENQ - b"\x00" # ACK - b"\x00" # BEL \a - b"\x2a" # BS BACKSPACE \b (called DELETE in the usb.org document) - b"\x2b" # TAB \t - b"\x28" # LF \n (called Return or ENTER in the usb.org document) - b"\x00" # VT \v - b"\x00" # FF \f - b"\x00" # CR \r - b"\x00" # SO - b"\x00" # SI - b"\x00" # DLE - b"\x00" # DC1 - b"\x00" # DC2 - b"\x00" # DC3 - b"\x00" # DC4 - b"\x00" # NAK - b"\x00" # SYN - b"\x00" # ETB - b"\x00" # CAN - b"\x00" # EM - b"\x00" # SUB - b"\x29" # ESC - b"\x00" # FS - b"\x00" # GS - b"\x00" # RS - b"\x00" # US - b"\x2c" # SPACE - b"\x9e" # ! x1e|SHIFT_FLAG (shift 1) - b"\xb4" # " x34|SHIFT_FLAG (shift ') - b"\xa0" # # x20|SHIFT_FLAG (shift 3) - b"\xa1" # $ x21|SHIFT_FLAG (shift 4) - b"\xa2" # % x22|SHIFT_FLAG (shift 5) - b"\xa4" # & x24|SHIFT_FLAG (shift 7) - b"\x34" # ' - b"\xa6" # ( x26|SHIFT_FLAG (shift 9) - b"\xa7" # ) x27|SHIFT_FLAG (shift 0) - b"\xa5" # * x25|SHIFT_FLAG (shift 8) - b"\xae" # + x2e|SHIFT_FLAG (shift =) - b"\x36" # , - b"\x2d" # - - b"\x37" # . - b"\x38" # / - b"\x27" # 0 - b"\x1e" # 1 - b"\x1f" # 2 - b"\x20" # 3 - b"\x21" # 4 - b"\x22" # 5 - b"\x23" # 6 - b"\x24" # 7 - b"\x25" # 8 - b"\x26" # 9 - b"\xb3" # : x33|SHIFT_FLAG (shift ;) - b"\x33" # ; - b"\xb6" # < x36|SHIFT_FLAG (shift ,) - b"\x2e" # = - b"\xb7" # > x37|SHIFT_FLAG (shift .) - b"\xb8" # ? x38|SHIFT_FLAG (shift /) - b"\x9f" # @ x1f|SHIFT_FLAG (shift 2) - b"\x84" # A x04|SHIFT_FLAG (shift a) - b"\x85" # B x05|SHIFT_FLAG (etc.) - b"\x86" # C x06|SHIFT_FLAG - b"\x87" # D x07|SHIFT_FLAG - b"\x88" # E x08|SHIFT_FLAG - b"\x89" # F x09|SHIFT_FLAG - b"\x8a" # G x0a|SHIFT_FLAG - b"\x8b" # H x0b|SHIFT_FLAG - b"\x8c" # I x0c|SHIFT_FLAG - b"\x8d" # J x0d|SHIFT_FLAG - b"\x8e" # K x0e|SHIFT_FLAG - b"\x8f" # L x0f|SHIFT_FLAG - b"\x90" # M x10|SHIFT_FLAG - b"\x91" # N x11|SHIFT_FLAG - b"\x92" # O x12|SHIFT_FLAG - b"\x93" # P x13|SHIFT_FLAG - b"\x94" # Q x14|SHIFT_FLAG - b"\x95" # R x15|SHIFT_FLAG - b"\x96" # S x16|SHIFT_FLAG - b"\x97" # T x17|SHIFT_FLAG - b"\x98" # U x18|SHIFT_FLAG - b"\x99" # V x19|SHIFT_FLAG - b"\x9a" # W x1a|SHIFT_FLAG - b"\x9b" # X x1b|SHIFT_FLAG - b"\x9c" # Y x1c|SHIFT_FLAG - b"\x9d" # Z x1d|SHIFT_FLAG - b"\x2f" # [ - b"\x31" # \ backslash - b"\x30" # ] - b"\xa3" # ^ x23|SHIFT_FLAG (shift 6) - b"\xad" # _ x2d|SHIFT_FLAG (shift -) - b"\x35" # ` - b"\x04" # a - b"\x05" # b - b"\x06" # c - b"\x07" # d - b"\x08" # e - b"\x09" # f - b"\x0a" # g - b"\x0b" # h - b"\x0c" # i - b"\x0d" # j - b"\x0e" # k - b"\x0f" # l - b"\x10" # m - b"\x11" # n - b"\x12" # o - b"\x13" # p - b"\x14" # q - b"\x15" # r - b"\x16" # s - b"\x17" # t - b"\x18" # u - b"\x19" # v - b"\x1a" # w - b"\x1b" # x - b"\x1c" # y - b"\x1d" # z - b"\xaf" # { x2f|SHIFT_FLAG (shift [) - b"\xb1" # | x31|SHIFT_FLAG (shift \) - b"\xb0" # } x30|SHIFT_FLAG (shift ]) - b"\xb5" # ~ x35|SHIFT_FLAG (shift `) - b"\x4c" # DEL DELETE (called Forward Delete in usb.org document) - ) - diff --git a/src/lib/adafruit_hid/keycode.mpy b/src/lib/adafruit_hid/keycode.mpy index 106bba147a50b5990c386ec164c90e7481672c17..4a30986abd7f6fc72f9479ae2b3a7878d32bc2d6 100644 GIT binary patch literal 1764 zcmb7_S#ujj5XV=OL{84u~e9cK5p`^~wXyY20_dPSK~?g9m}2SAy60hszCu*yrow3mTZUjfEn z1y*|vSp9WijmyCFH-OE*39R`RFyjia*4x0$cYs;%0<*6IYrhA~xdzOAADH(6F#khf z3m*aNd<<;y6JSf90$aWgNz3G)LDK73pF`SfIGle0shZ_GUy|qx{3}Sh`r_A+cKHG~ zzkxK@>kaQ)NSV6Hzk}2=cdYLzYkJ(7NI=Hnp6{4HK!&@TYV#i$`zrX-#|-4%TMyF|tK`oa`(JkgO+eEPd`6w5DUKAaGC}A7E zi()aJ5CVi^2_~Zn#3hR5I3z$(oQ|i5q@s8_t|yU2aprbR?4o!kUQZCC2;%i2%_vsl zM2Izt)wqD<8^u~2OVCktVQO@MAvvN4g(wq(9?~P$0aV*IbWQbiLQ!l;LOYz^a5FA2 zBpt>f?TRT#z-X*Ce z9MBoV@2y#;M}*O(8;@KZtVS%j4ZY@t*HJn+ScB}45kqE^YA6}Y4o@@aMx%9Km!m@& z@8~9h-$76o!55IB`hQmKja^!NU;3OS(h$g*A$OWeeMqBFS+UisHl$2_yta(w44) zvhPdScj&&t-{DVmrhkAQOI9GA@S)b6NAEpX=j!U7b0ud&!L@5cfzq$0Gq8^G^$U?e z;6?pN;Ozz~1kpgNha+33XA1LE#qICp3;FRw^OJMV#AIR9zT)ArnL=^nfx}fPPx|Ko zooooYV;&7P&^kI_x3C)Z|NH1!IihiCBwuZ)|Ig90q32akWBt<6<0_Ay*Vq2p^RCR5 zu35?VGI}KNBH9qZy3%r@F>nm)={P_quz^mZkxt=VI*s?}4Bn@+_<+vgLpqO-=mI{b zi`Yn)u!%0CiLRiTuA+q&(Ms3QM%U3!H_$;h(Mh+^MYqvScd(i6Vhi2FR=SUE^Z?uG zA$HIs^w49-^aQ>1J!13&;`Ac~{RD-6MuMUVLXv)gO1~mSzadS(BSX;)L8m`p(4Xj| zzhIKo1dF6**d(d}#;E=QxBP4A@ zo}}#_&`V@}{aa}pPrdvTGu50{uz zxXhf!73O|iCF#fr7Ad+&xW+n<>lD3CxWRf9Hz|6PaEqe12)EfYhC39!L%2)PyM%i# z@3X&v2h1WKGRN_Vxd)FadNwc;C=j0Tw)S`H>vna-arWn@i;lC(al99RYg{V;U ztXZL`{UT(k17S<_3oR_vMAEL%R83S22~!UX%@(G|N>kWbQ>zqKOg2PyuN+HRh8*J& z<=%*^dS!D-gk4WKqiR{JQuJlzv{joHitY5894PEMvveoF<&Bn>tz_8Hvs%2`5*an7 zr*$pdm(^`in=s{m;mENVPbeJIGa0$k5T>ff>lEG0$!6TKO3~FkHOoosu~blL4k|4{ zr8TIu1(o)o(h*cTgGyIW=?*E)O>E6Gy%8(Pn$r_b$kruWH37)3wit9P8#(NyuH1*sn_c=XT>T_Hf$r_$`BP9k6IqqoL zOlhK0xw-5)-Yh$1iENfJio!)9&Nma35kzv;n@iLLNmqbWT+a;^ijnZ^H zeac*L!P|JIH za(uFQ$QhlS3s74)5a4fh%@h7kUtZr+&maG%YZmEQQ`__I$imY#kLh`PaG|xOGqP~x i8NZnR`FnU_c-a`Qdw(ojqL*_C1VUp|vsLAP5B~y{x)&_~ diff --git a/src/lib/adafruit_hid/mouse.mpy b/src/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 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 Tnty{Zr{2G7ay~czCt~~qL2vbP literal 0 HcmV?d00001 diff --git a/src/lib/adafruit_register/i2c_bcd_alarm.mpy b/src/lib/adafruit_register/i2c_bcd_alarm.mpy index 991465d4976518d86cbf2727d887c8e17e15fdea..1e9a8dc414466d9ac31353ee9b95fcaf39c20f68 100644 GIT binary patch literal 1466 zcmYjR-%}G;6uwKqkcx4$iz`EQSeAr9tVA%NwhuzG6x;C!8z7a|&blO*WGl(i-HlA1 zxEsZewNC#Br|(?|(BfN1Q1P`7m5%M3ed%^v20#16m1NvmYh*EVSXp0>2$k*@eP>$ zd81(G=1M0H2;7IsQDtiMa$$6Y>ZRe-Z*ozD+FFATUar@mS|`wmomXAB|>p zJ6D|POB?xUy$sQjdOZ@lnTEQIm+Ty*SQqI7pNpN`kq&a?x`^C6?(M%{@1+q!4*)&t zA;)Xz*Z;iUt)k9Vw%zObrk5PM=f8Uf1<+9eYUL47dot-nJQJspfC5T{nK;b|epSt4 zTUDV}u(aq>Nh42L{Ar01QNT+sNJ038BH<8P+N#KnWX<_wYo$8B+*)zlgq&u9A1$B7 zq2aX{WT6lZ6#x$N=`NmbmoW3+Y|t)yBx&BU2ix2=62u{G0%6A`*A*1JK~G8q$F zme1?G-}rst>fu9Vs^>FFlETrk;3-Lp2FIoTU{aElv%$&W&9lK|xHp`Y;v!n+TWKd{ z@J&69$J)`ON^AFmsoPk!bGQJ_qGj}gZMb{@LSy|#(N=LGo~> zs#2bird7t(%1aMpq!04%>WcU@?k=qE{yUBT}KBb|0&i%m+#yI!Gnn~2sEwT+LwjX4{mb4I#@k@dqesCXW2(K%6nhEc^2o$L%R2p zhvnVvcq6&<%-QCmt%7Bn#k8%`2Pb{2IU7Izu>NpkG2$CyRwE77t2|)LeBp<`U7E-D z#t7pJFJoT<&O#??1ltK8skG)(Y?_QM?0imt5= zF^|`sUu8d}9ZKxmptR7stzhZK0gVZMyAiPqkP|?28msY3=6|e2gUW{|Af~EEDesku`H#6ruvqP@3 zgYinhesvMh423hKIxvvB?Y`{}Oabt(_Yma$a6jOANIa<)$hW{T$Oqt986Sjo2H;zv zw;g&9L+=sjJqo=Y&>Mmym3$lI#$4V`D3UxTNV= z4N2Vz6i=ePo;C!pNtNSTp1Yd`@HUKUw@S4beRr1YG=D;5W2L}DP5n?J_?1#B|Vjm zcO;Zd$eC&=>dd)MQWJFUv7DZw^Kv*lXrG1(03ZN00oV+U55_pU^o2WxTYtY^yH=d) z4%QBUib)}z#SUGN(KR}B-~RJ@mC;!X_6~F>U8X|zc2c_U+KBJ&o^K*F!vlW6Hv_uM zd;rwe8ZlSB0Qd&riNSgS^1VzXgLLz^T(cdFPPbhaG8my<2wCz$XiKj55W0~S(iWKZ zl4PncRE5wuw(c6c1J_VBT_518ZJHw5$IGudosTw4RqKY-Gl=y!MZnkRB?D$-_cp4~!fk3}7@%tdV`eqa z;^fRL@;p*cs7nPE zJCM~b=A9y*loEK~lq%^M=_xEzvlK*0)|K`8s#3B#!m{X=WTY`om1@U^ZuZKe`>ZFk zEp(e!%UQQ++#pk%*YV#?oh*Ca7+zl;??!1JAT^q<30!Iqa?>Z;ueQ<}@%;>DM3{d;_uDrG_Pa!Q z9nu)nq6m#O65dNXANX2L_0JlsLE~jt&o9USobK+PF`Ae5m(RUfp7XWA-=0R?jDR{0 z?cWBQegbnz_;A7aHL{n=t_L1}+iVtFImw41F&-?CXH?N<$U}TVI76BnKchpl1dQN< z@r)LL9ll_PXM+p*XOVqQc*qIU>}XE32%blxl#$lXK?gHT`ND8jgtUhKV$`$w)nK@O zQ?uE0lQwaLQH3a#*8yF0#$jCnG0nvTy4k%cX6BoOmZh*NFkO2GRp3fvdDm5T>)VmX01CCSlU8P`*sKBZ^}TQpA6I9bs-fzz@R6N;*1kxQx;Jog`H C?TM`b diff --git a/src/lib/adafruit_register/i2c_bcd_datetime.mpy b/src/lib/adafruit_register/i2c_bcd_datetime.mpy index b27a58bbb984466b94073acd630c15d73ac1731f..87d5ce1363a9146e2bcecf8e6adcbd87c93abbb4 100644 GIT binary patch literal 939 zcmX|9ZBN=z6uyPAVl)UXc8D|Lm}p1_vk=U-4>-}dEc+n7u$Z`9OM8*dKuLSi@QGFd zr&+T9VD6Bv;J6sW|aS`}SR3}481MYlh;mRnzk3A<3a{WLo55}3TqxQ%R?(wgx;nLJWy zxn4}jS|vFYn*2CaoKtlfly5a?88i$@643Kyp7TtaQ-={`ckI^R`@W12x(1YWo3oGT z)xZ1R0JV0#Vb=X~!3kTt^PglBye&EqWiC&1{yP zd*~cIFtNa-nOpi0i)6$VQ52&h>heLyV1=BhGT98HKexfysjgCjX_-{PLP=4pRI_;= zMEiYOonlf|EWcl^;(;(L({kk-n+B;>3*7NHsfO% z# zOdcRUs4HuAeE^-0pi}V8=BIiN%z~8ZUV$6C;hpLV91URDknI;Z_K8*-(6XHoM}tT@ k+zu#*X%~eq|7O#V_Pab2M89p`onf5Ih2IMHnM2qA0sSE-SO5S3 literal 2017 zcmcIl-%s0C6uu`RjVbHe&_OFoC@GE;O%MyWG%KS}3P^jI6iw6ifV7JfUlXs`X7)8G zPl+MGR%zP5;E%i`E;uOl&;GqiQ zB5&R@>)3U58}8>>t1Q(d7~jS?>N>{Pv3-H@Z=Sjr`LZCxVyeJdjCV=2x_m|Htt>(# zD0O#=>CdlzT@t@5Zn0xbchT<}1kwV$3-SxlDZQ@>olYQCU@6n_`T8M{=HbCeAjw>T z$qx*7h|zkB64i0k)~&jy>%@tdFAoWMqp2-y>pIKtig_p5b*bvmJErQs>B$<tzG<~i_U@Mp3L{^U2{>)n*HnOj|-F2c+Un3lrLvqF%U;jHjcgRlOooyX{D zh@NsZMoxl!1ujCk+Xo+q$Z;QX6e34`h#w+;AJXMy=OKJj_!#8p;X;FUyEdxBcGC9Y zx^tV)42>KZ4RZg`F(|>bNh~%YRL!ucJ=n6W?NLlDO)xARRyCX+V=i^P2E}}w^loe% zIM}$G?Os*HfCg?x^}nStC^B}txG>Xp{nspeXltMNO9EFL8eisW`}wIX&;9gFep=?& zt_1J%-vZN3r_Fk}0DdWiRv5(1qsV+2o5zv4%J$~rJaUP25N)i*ev!~3>{X1NM&>$~ zC{qe&KP!b&&mo1cGp|EXhfv@-E~0Q|3@4)ARJ}z_7T1WIKLDGCbrsGs@22e~1EJ^6 w@k2Hl28$aa5ANU2vAE>E`@zL2L#$+bB=VtCX=bkBth558s*HREE=%(JX`;=ju zw5h|0ou#=ZHYm&V1}}YaF2)O>ikOe}ER5?pB+k?x zmnh2%DyruMjY8YCiadgbPg#fRVxkAMI0HIZ+N_jKo#1VwLjkw?B3Gy1I-vCn)Nxs6Yi zm^(cF@&|MWG)X#w7)C)r`$G;QKIQ=D<`U-N*PtRua44BVo&!wzHT zNRkuo%JN+}laoQ*CfTP=vYCP}qvX0UA^PdJtGZMRX9#*J{$2!H*)+ZZL`BQG~lpgfL1fzvl2EyyPY dcjo`U$$_fy7pQVAj>2vkBuM9hjAtTn`Ui42!%YAH literal 1320 zcmcJP-%b-j6vpRlTWNt*3#K9zq_}M%z&0SI)l{UQHwI%vOuWEk*zHc~Xxpu`vyk3( z6E29xcPZ32@C|$d;{#|g##^1;b`=nN=O(i=JO9r7zBAuG@kzJxe&jq?vnUSgdMlJ9 zZxaapjNS%$25ul(hUs01CP0_uglJ09988EWpPYlpPB33HbgN3%Vydo|nMFBfWRIGh zurysRVU2R7(F`mpca_W##`}bs)Tm<|#A054Fz@ld_TsUTpG;*nYcr1VyaLOI^GK#Npj&Yxqrwt_!@086?M%z><^5 z9w|y=Dw4-hqzGdw$O`OA@~Xh=o~tjLAgQZ0g7F~6T`fGQVT@l}YPCBmrqQ}k2M=Jp zN4mA?)X29LL@0oy@VH2TJw3OOlDEVG?USP)U)#xfh#exkbE-o-xd6xQ$pvVo-e-qf zCr97y({^$ZGND#Se0+1-A|YO!{)ZNM!8O%<71ElVsEn!2E1Fd<6V|KzPQUv?$ZwKr z`I?tjtm--=rs)$~gnxG)P@PvoRa3)d%1r(^49JIIND-pjbF+EDb3C~O_b1SY&eR=n zD4Y^q0Xv!jyL>1uKa8vuVm9gyEke9KIS*fS*zxr0%QNWQHJ$9!5*a;UloQM=q%N+Q zs?$0*&a({|7RRKn2WcIfTxHy^8AkOic+iul2k$eqmjj~kW`i_bG!$NS(3IJn{A}5y zEB>4ABzwK(p)I*=pH@O4qfU9nA=!`mn zeYI+l1h`%s$~j)kwFdwAEa&)a7xhf#*t{>!<)(6$oimju4T78EC+0&aG31iCkcm0^5Gp z$(jX?A`|B{La`aw5*d`%D2dI?Pxf0?ZFqeM@V@TY#aMTjBq215O`;h(LM=ez5!1~W z2#qHo?;E`}z;v=lg5wDfJKk`Qeop2jE|q~Eayd`w4C#x*5*@{2(AP1Wp1C_UK3lH`W6r;7@hHu^uSZ zAe6%tp@hc`i5sRefO}T?ZW%TLzt`#@01JJTqcB18USIevbV2#%c(}y;PkBmo(s+yRP>c-=nIZdVcYM-mbDv2f)T{mbr zugv1`v|-{f%SOU9ujt1~!bE$5moBaN&je0ez0rHkJ&{OT>{@#}*b?j9$*Oo(%iy5~ z@OrzhZO+svMl_FgHbzC&bZR(afVINc7zK*3uG&1W>4;Fpq;~I;=T7SW1FIx}1pzRZ zDr9KyTZ=Nc=ZOBK*AjRWyW4@)9U1QJpy68Zrnp*W4|i{VD-C>KEIMM-4@a#3Svrgc ztE}QvR_)+Rsh9!Glv76fVGaA~{0v^6T;V%fL)O(u^aAUmtL=Jpu(LA)nA6ptUTuk? zq33Q7Ax9Kl;E>Hem+=31p(M{nxnLi1b25}YC;8w%zWTQxOU0KTN%a?EvKP8;u%%+)^-2MTG8y5tK14400C9W{L_S$Vj(i4_eGpl*CZ{GLw=Ialn zz)Qt*$o-8iqA5_{w!#XzyNb|1v6n%fh6yCgklcV+3bcTn64OAe2$SMXl8X?%9V*sM ztx+S_5~`+_X+!6jl8Vkap?Q6N6PI+(a$C)zS95RX3Zocr6Uubcz&M0O;FgK;@U2g7 zh@k%P(aARmuS@vkGI$jNCWPa#p9tRVY^$eMIXMe=17U4u(1$a&ZZ$V;Ni-r>%!QB-88 zb%OB-#$8eR#hu6ai-ub3E{izb5IW%?#ud^XnL8q>I*L#bNs-F}g`ItGE|Z!~r^GSs z{f>Qn&~cPma1yg%xAq=)ep(D$@f|b~)L%9ei!r z{Tk8O%!+ClCQnw?ZIY~;lq5w4mgH5{Ncww|O#hPDu_z!3!Nt7bZ!gTOPrsHKwW~=FoJ1BD zf>!)*bg03D!_}2B^su$pabxaJ{n;)Y?Y3N8M@}LGkJ@6MgCjw$^_4q&{Cm4~+i!uh zF^sr3Nh90(CK=zMIwzP{i6QQfs_6zdpVmBRHaI4R7SavOxJvmDRgDUfYQ#86g%bBd z60Nr~z&v2vC)b~#E<(vHeHIiCZ*CF$x~DIiSaS7!H$C%)5cn14!o_Nh`xkYfJg)!% diff --git a/src/lib/adafruit_register/i2c_struct.mpy b/src/lib/adafruit_register/i2c_struct.mpy index 59925e6f2f2d2f2dc6db492cd2b85864f293ef86..9a64c354617932ae4d03c92d2762ff2a487fcf88 100644 GIT binary patch literal 889 zcmZ{hT~E_c7{{Ns&dJNRt}X2xL6$6oNz4Ybjwp%DV8knNFhCN_v2e{6}1Lsw{ zcthY*5I#W1{08`aOuX^d)0LUU#H3A5o^#Is<##qB?0ly8D3yWebFHp5?2bW@jgJk7 zV7q9PbmS1bqmx3r`=R1ayk5ZPv*!=Mt)K@UG(%L&uwG zxEV+br?x>bB28>kmRj8~iRFtis?W!*4nf$gdpvKL^pP~1c;#>GLG|#xFeAwwv#sf$ zP{X!bK|n!j;g)50PYitOi&HA&RSWEHnH^@lYaM-z)1P$P*gM=8<`s8I&4ZATgrP|2 z3N`BNUGJ=N2YvDWW-Q1DSH8%VnZPuxn}ExJ_G0W}nbOXjMgK>8j$%#*eBWjH0Pk8Z zq}%sX@mo@%Vm8}5{LRQy6YjdYn12F8{EC$Oi~WYi8n}CXQQ4H>$9E|=81Oldej^&O z@bJJZbMEf2@Laa1?#pwE`$}D0rbUAnosyJsNrg%Z5h)wY2Hth~&am`kU;tNx@ybcK h`~t$m#KjwT@}IUrLFVOboQb#x)Fq<=4ogMh@(;jo_LTqt literal 2175 zcmbW2-EP}97>4;-iS1Z*I%Auc)^S=ViW9V$ox1*khb})|d(eYoZHE8@T8xn`D%NI8 zE=8sAj%1(*8;V^@0Vm!aboa5t9q$S@l9Co1X<%mt1kxf!eecWX6`v}xTd(7Q`0uj@ zDuBN4FKrw?Es}S+cWVg!vv&>ona(+q=bd=+8#lukf3z;^yNT_y<`Hv<>(I zX`68S2(m>mVp@@RW7)ds)_GUSHX+CVDOwXUFOv^?j^TC5?k(NWP3l<;Q*vy%jL@=G zX=9gBugyyRK|JV%jrye5cPM*IsY4Uq)X?I+QnOT3F+L&GwHzDcB<5@O9gO4O$<@L} zJ+yT?2yRXG(=WcAYXlT`uftg1{i<9(wphn&mD*0P9O)<@M1sDtXqyXrHeelI&Wli9 zi9geb3A@qtA{5}a6+cDxt$l8FZXIa_#NE@1=m=>yQRW$}=%C$&qnK9Zu7wI_dB%m? zdXHe7!Z@(`KM$^9{MysI!7!g^+1z=Y!1$O1tt(ojG?EA@2&p$Y5yOqm2CwdHRD6$C z-=g8_I;{PIM)~*1gue|K74N|5D1Qh1ExxbOlCx@zn-1;iY^gP1M5k1bHagkXyKUF{ znS>MKEzdLw4I6|OT+%f^iCDq9VNl|_=>P>BEc$#Ic=4d#<@OG@w;%B0PxB@CI)^@t z*LFbEDz5B37-lOlG~dQ5k21RlLe~vG!d2dv6ATz;zK<2m*vrVES*lWkU4xuhZSv_G zYB7RYhu9oL-LP!tOp8f49>c^ol9tVR*C~r2_w2sj{t27Z>4h$&dZg#j!HGrQOgo`C ztsfKoVuL=}Q-y4#R)y>@tJ_?*ko1?_Dj|4ywsNdgq!r7;ikehuf>fUoBIWMS5*e1c zB#V@?0^7sNCOlY_9$c(=@kH->BuYVDq~JbJ!R=oY=P9UPnu5vD&Z_leQJ8#w-aOXA<(m0P?hi{7H3dM`C`t8RrQY56{en zfPPh&Q-kr9(VyFc%Q7uOnW2ErJb5;v%2{)vgejF^3LG9?qtS!vH$m9vmqEM$PrDHlV?Q*_dEY+obDrN@3bS+b?je_kiL#<84XdLQ zWZ?tdCfF+Il8S6%byR{B%Tl`ecDKInL>?{SPs`v`uEd5#k>O&i`8)a56;VX!2wS#p z8VF@TiKb(H0jJIBj2(Uhqjl>=z@-(WV!@4iqrjj_8O28^e2V1^ZKzU@UWyA=8|fO|I*KlnfwCPR zt$k2>`|ddQgApmM-5U=Up8^lHo|lZsZ0RaR^qGD$e3rha{2Th7W$yS(i);ZK;3t!lo#lA)CWk<>@E((zMw0um>G6v&hI;CzWF>Hy819o za<)#)6>85rtitwXGfAV|IW4{WPjWiqHlj#F7KP7?KDd*t6QE1Sl*jP`iaR~ z81d7AXyfKz262~g&K`KmTvTBVe$NaOtno{dHCO}1d2gL4YXrqmRMH^I7197@3mPFM zLmFY_CTT>J0!i1;hP#+Ts6bEaGD?>y^`$*ej1;BcIarnWWxcMVuz@NG2WITGM z!-<>Ugz@peuO`FmllrV!i*fnUEIsMz?1#skTRbS^cuVWFZ1YDJfG3&*!MuupOM(DA zYRVNpTLDRx%1HUQH#Tc1zgyUXV~p6%Z$Q2bA7#kNq_6|yakc`Z>@64>&qI|*>HB+< z?_H35jAfQyCSpk*R-GM~Eq3vHj%7nd8_R?@|K28BalS$o_khP5+nYRG)L^Ay2A%(rX}8K{r-QvAk>5xsDudueG5D4Vb4V$J&xb=Fp@r?!%Q3YRrd?x4xen%iRgo#!I6tDNs2$RrJflF&9DxyaNT zzVN*PZQ+QZEz|&A;*ea56tHW6tM1BsVCq4O#TTR?7Myxto?tNU9UW@w;QPcv9$~Kp zSB*FMr=OoB2^JnK-;thC|KO4G3=^081LM!{;@wrt4|A{mPEJLy%h$ZaBr~f=^l&9N xnSLn~?TNA&Sgfttnh^XHB8HVaH*of1n5q!)`(ng!)46#;Wy-3J;VTAx_8-IDiWUF> diff --git a/src/lib/adafruit_st7789.mpy b/src/lib/adafruit_st7789.mpy index 577e7f5a18bd89a55bf5f69c753ef188f70b8a72..1a0db6021d63911cfabfe5b542a8c2526aedea46 100644 GIT binary patch delta 218 zcmey*yoRaXnUzUip|L|?pfW+BLCr(WRiTxep&?LO zC?&JFASbahGhd8RfX7hJRL{^rOe{XWEVZaOGe0jrUYS8mAU?h*wICnJW)zc&_w@4& zi4S%S40ZK$b`3FN65t6A0U0gGEzIWvGK?d!(u7%zH86SNp%~9b1`a_+{vI0#1_nU} zaWSA_%wh~u8x$BA#TW!PBr`D9oNjR7V-RF+uxAirn5D|FQItV&lMrX{W^<;^8WklzgCx4pXn+-qu|R<)Kx-c+?CQd;OTPp4 z2mCX<2uNbQtGSso=bSln;}h0$ei%F{0|`{)o_ruFV(cfUTUGAsuIn_p-jG${6P0E3-XyP|eJ+Uy7)*HLqQ{G`Ew7&v zev%PWn84TLbN=balE4zc*Jm>HDu65sz4FM)KfCj-I%-=Z5{ZTh5slEZM31i88n!u3 z@9@xwGm0Si0A`~69M5N5a%CQ)@V*v>j};l0J{!U=&wGsjM>Al%re^&j{^SXO+kRVX J)qNG${ssZPjfDUJ diff --git a/src/lib/hmac.py b/src/lib/hmac.py index 79ec923..3a2d19a 100644 --- a/src/lib/hmac.py +++ b/src/lib/hmac.py @@ -3,7 +3,7 @@ Implements the HMAC algorithm as described by RFC 2104. """ -import warnings as _warnings +#import warnings as _warnings import binascii from adafruit_hashlib import sha1 as SHA1 PendingDeprecationWarning = None @@ -47,9 +47,9 @@ def __init__(self, key, msg=None, digestmod=None): if not isinstance(key, (bytes, bytearray)): raise TypeError("key: expected bytes or bytearray, but got %r" % type(key).__name__) - if digestmod is None: - _warnings.warn("HMAC() without an explicit digestmod argument " - "is deprecated.", PendingDeprecationWarning, 2) + #if digestmod is None: + #_warnings.warn("HMAC() without an explicit digestmod argument " + # "is deprecated.", PendingDeprecationWarning, 2) # digestmod = _hashlib.md5 if callable(digestmod): @@ -62,9 +62,9 @@ def __init__(self, key, msg=None, digestmod=None): if hasattr(self.inner, 'block_size'): blocksize = self.inner.block_size if blocksize < 16: - _warnings.warn('block_size of %d seems too small; using our ' - 'default of %d.' % (blocksize, self.blocksize), - RuntimeWarning, 2) + #_warnings.warn('block_size of %d seems too small; using our ' + # 'default of %d.' % (blocksize, self.blocksize), + # RuntimeWarning, 2) blocksize = self.blocksize else: # _warnings.warn('No block_size attribute on given digest object; Assuming %d.' diff --git a/src/lib/pico_dio.py b/src/lib/pico_dio.py index 7b261ec..6d75616 100644 --- a/src/lib/pico_dio.py +++ b/src/lib/pico_dio.py @@ -4,7 +4,10 @@ import terminalio from adafruit_display_text import label # from adafruit_display_shapes import rect -from adafruit_progressbar import ProgressBar +from adafruit_progressbar.horizontalprogressbar import ( + HorizontalProgressBar, + HorizontalFillDirection, +) from adafruit_st7789 import ST7789 @@ -32,8 +35,8 @@ def get_display(): def get_splash(): - splash = displayio.Group(max_size=10) - text_group2 = displayio.Group(max_size=10, scale=3, x=40, y=20) + splash = displayio.Group() + text_group2 = displayio.Group(scale=3, x=40, y=20) text2 = "Picoth" text_area2 = label.Label(terminalio.FONT, text=text2, color=0x00FF00) text_group2.append(text_area2) @@ -43,15 +46,15 @@ def get_splash(): # OTP screen def get_otp_group(): - otp_group = displayio.Group(max_size=10, scale=1, x=0, y=0) + otp_group = displayio.Group(scale=1, x=0, y=0) # OTP Code - text_group1 = displayio.Group(max_size=10, scale=6, x=15, y=100) + text_group1 = displayio.Group(scale=6, x=15, y=100) text1 = "999999" text_area1 = label.Label(terminalio.FONT, text=text1, color=0x00FF00) text_group1.append(text_area1) # Subgroup for text scaling otp_group.append(text_group1) # OTP label - text_group2 = displayio.Group(max_size=10, scale=3, x=40, y=20) + text_group2 = displayio.Group(scale=3, x=40, y=20) text2 = "OTP Label" text_area2 = label.Label(terminalio.FONT, text=text2, color=0xFF0000) text_group2.append(text_area2) @@ -65,25 +68,31 @@ def get_otp_group(): rect2 = rect.Rect(0, 70, 120, 4, fill=0x00fa00) otp_group.append(rect2) """ - progress = ProgressBar(0, 60, 240, 9, bar_color=0x00fa00, outline_color=0x1e1e1e) + progress = HorizontalProgressBar( + (0, 60), + (249, 9), + outline_color=0x1e1e1e, + bar_color=0x00fa00, + direction=HorizontalFillDirection.LEFT_TO_RIGHT, + ) otp_group.append(progress) return otp_group, text_area1, text_area2, progress def get_page_group(): - page_group = displayio.Group(max_size=10, scale=1, x=0, y=0) + page_group = displayio.Group(scale=1, x=0, y=0) # Mode - text_group1 = displayio.Group(max_size=10, scale=4, x=5, y=20) + text_group1 = displayio.Group(scale=4, x=5, y=20) text_area1 = label.Label(terminalio.FONT, text="xx", color=0x00FF00) text_group1.append(text_area1) # Subgroup for text scaling page_group.append(text_group1) # Page number - text_group2 = displayio.Group(max_size=10, scale=3, x=70, y=70) + text_group2 = displayio.Group(scale=3, x=70, y=70) text_area2 = label.Label(terminalio.FONT, text="Page X", color=0xFF0000) text_group2.append(text_area2) # Subgroup for text scaling page_group.append(text_group2) # Label - text_group3 = displayio.Group(max_size=10, scale=3, x=10, y=110) + text_group3 = displayio.Group(scale=3, x=10, y=110) text_area3 = label.Label(terminalio.FONT, text="Label", color=0xFF0000) text_group3.append(text_area3) page_group.append(text_group3) diff --git a/src/params.sample.json b/src/params.sample.json deleted file mode 100644 index b3d87b0..0000000 --- a/src/params.sample.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "check": "ff00112233", - "layout": "fr", - "time_offset": -3600, - "pages":[ - {"type": "TOTP", - "name": " Crypto OTPs", - "keys": [ - ["","000000",""], - ["qTrade","FF7829","ftslvgd2zddprptn"], - ["Bittrex","0081EB","stflvgd2zddprptn"], - ["Nash.io","5790FF","ltfsvgd2zddprptn"], - ["Github","F34F29","vtfslgd2zddprptn"], - ["","000000",""], - ["","000000",""], - ["Discord","4285F4","fslvgd2zddprptnt"], - ["","000000",""], - ["","000000",""] - ] - }, - {"type": "TOTP", - "name": " TEST OTPs", - "keys": [ - ["TEST 0","444444","ftslvgd2zddprptn"], - ["TEST 1","FF0000","tslvgd2zddprptnf"], - ["TEST 2","00FF00","slvgd2zddprptnft"], - ["TEST 3","0000FF","lvgd2zddprptnfts"], - ["TEST 4","00FF00","vgd2zddprptnftsl"], - ["TEST 5","0000FF","gd2zddprptnftslv"], - ["TEST 6","FF0000","d2zddprptnftslvg"], - ["TEST 7","0000FF","2zddprptnftslvgd"], - ["TEST 8","FF0000","zddprptnftslvgd2"], - ["TEST 9","00FF00","ddprptnftslvgd2z"] - ] - } - ] -} From 6eaec1db1b3644c7f4ceaad57f0a9c6d8025f52c Mon Sep 17 00:00:00 2001 From: Graham Pye Date: Sat, 9 Jul 2022 19:07:37 +0100 Subject: [PATCH 2/2] fix object name --- README.md | 59 +++++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 93157ea..cd7ed42 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ # Picoth + An OTP enabled macro keyboard based upon a Raspberry Pi Pico and RGB keypad base from Pimoroni. ![Preview](https://pbs.twimg.com/media/ExEwmVaXMAUbIDw?format=png&name=small) Project log on Hackaday.io: [Picoth on HackaDay.io](https://hackaday.io/project/177593-picoth-2fa-auth-with-pi-pico) -**Warning**: In its current state, this device is not safe to use in an adversarial environment: anyone having access to it could steal your config file, hence your OTP keys. -Next versions will include encrypted keys and an option to remove the USB disk drive mount. +**Warning**: In its current state, this device is not safe to use in an adversarial environment: anyone having access to it could steal your config file, hence your OTP keys. +Next versions will include encrypted keys and an option to remove the USB disk drive mount. # Overview @@ -14,42 +15,40 @@ This is a work in progress, feel free to ask and request more info. [Twitter @Angainor15](https://twitter.com/Angainor15) [Discord](https://discord.gg/gy9xpuQK8A) - ## keypad mapping The mapping is a regular keypad instead of the Pimoroni default's one. -||||| -|---|---|---|---| -| 7 | 8 | 9 | L | -| 4 | 5 | 6 | + | -| 1 | 2 | 3 | - | -| P | 0 | N | E | +| | | | | +| --- | --- | --- | --- | +| 7 | 8 | 9 | L | +| 4 | 5 | 6 | + | +| 1 | 2 | 3 | - | +| P | 0 | N | E | L = Sleep/Lock E = Enter P = Previous Page -N = Next Page +N = Next Page # Hardware - 1× Raspberry Pi Pico -https://shop.pimoroni.com/products/raspberry-pi-pico + https://shop.pimoroni.com/products/raspberry-pi-pico - 1× Pimoroni's RGB Keypad -https://shop.pimoroni.com/products/pico-rgb-keypad-base + https://shop.pimoroni.com/products/pico-rgb-keypad-base - 1× Pimoroni's Pico display -https://shop.pimoroni.com/products/pico-display-pack + https://shop.pimoroni.com/products/pico-display-pack - 1× DS3231 Arduino module -https://s.click.aliexpress.com/e/_AZGRXo + https://s.click.aliexpress.com/e/_AZGRXo -*Note:* This is not sponsored by Pimoroni, I was not paid to build this project and bought the hardware myself. +_Note:_ This is not sponsored by Pimoroni, I was not paid to build this project and bought the hardware myself. I just like what the pirates do. # Setup See the wiring and photos on [Hackaday](https://hackaday.io/project/177593-picoth-2fa-auth-with-pi-pico/log/189173-definitive-wiring) - and [Twitter post](https://twitter.com/Angainor15/status/1359431057611882498) - +and [Twitter post](https://twitter.com/Angainor15/status/1359431057611882498) ## Circuit python @@ -61,8 +60,8 @@ I was running on 6.2.0 Beta 3, Beta 4 is now available. All needed libs are duplicated in the src/lib for convenience. Just copy the "src/lib" content on your CIRCUITPY usb drive. -For reference, here are the stock Adafruit libs that were used (they can all be found in the default [Adafruit lib pack](https://github.com/adafruit/Adafruit_CircuitPython_Bundle)) - +For reference, here are the stock Adafruit libs that were used (they can all be found in the default [Adafruit lib pack](https://github.com/adafruit/Adafruit_CircuitPython_Bundle)) + - adafruit_display_text - adafruit_hashlib - adafruit_hid @@ -78,17 +77,18 @@ https://github.com/sandyjmacdonald/keybow2040-circuitpython ## Source code -Just copy the python files from the "src/" folder on your CIRCUITPY usb drive. +Just copy the python files from the "src/" folder on your CIRCUITPY usb drive. -*Note:* Nothing is "clean" yet. It's a working but proof of concept code, iterated from several attempts and migration from MP to CP and libraries changes. -This will be improved over time. +_Note:_ Nothing is "clean" yet. It's a working but proof of concept code, iterated from several attempts and migration from MP to CP and libraries changes. +This will be improved over time. ## Time config The RTC module needs to be setup once. This will eventually be done via the GUI, but in the mean time you can do it manually from the Python repl: -Init a DS3231 instance: +Init a DS3231 instance: + ``` from adafruit_ds3231 import DS3231 import board @@ -101,10 +101,10 @@ ds = DS3231(i2c) From there you can query the current datetime: `ds.datetime` the temp -`ds.temperature` +`ds.temperature` and more importantly setup the date and time: -`rtc.datetime = time.struct_time((2021, 3, 24, 15, 3, 0, 0, -1, -1))` +`ds.datetime = time.struct_time((2021, 3, 24, 15, 3, 0, 0, -1, -1))` params are year, month, day, hour, min, sec, weekday(0-6), yearday(can be -1), isdst(-1 or 0) # Config @@ -113,6 +113,7 @@ Copy params.sample.json to params.json, edit and copy on your device. params.json is a json file. Core params are + ``` { "check": "ff00112233", @@ -122,12 +123,12 @@ Core params are } ``` -- check is reserved for future use when encrypting the keys +- check is reserved for future use when encrypting the keys - layout is the keyboard layout (currently supports "us" and "fr") - time_offset - in seconds - is your timezone: -3600 for GMT+1 - pages is a list of pages (1 page minimum has to be defined) -Every page is defined as: +Every page is defined as: ``` {"type": "TOTP", @@ -152,8 +153,7 @@ Every page is defined as: - keys: a list [0..9] of entries. See layout above, fits a numpad, that is first entry, 0, is on the lower line, and 7, 8, 9 (3 last entries in the list) are the 3 top keys. - Each key is a list as well: ["label", "hexcolor", "totp seed"] - Use ["","000000",""] for an inactive key - - + # Roadmap - Keys encryption, device lock, pincode @@ -164,7 +164,6 @@ Every page is defined as: - 3D Printed case - Alternate screens or no screen? - # Licence Custom code is released under the GNU AFFERO GENERAL PUBLIC LICENSE.