From 7e947986858c7439f18f196856888fce0f894f41 Mon Sep 17 00:00:00 2001 From: Zackarias Montell Date: Tue, 4 Jan 2022 22:20:47 +0100 Subject: [PATCH] keycodes, animation and error handling --- .gitignore | 1 + .vscode/settings.json | 5 +- boot.py | 1 - config.py | 19 +- keyboard.py | 100 +++++--- keycodes.py | 251 ++++++++++++--------- lib/adafruit_hid/__init__.mpy | Bin 389 -> 0 bytes lib/adafruit_hid/consumer_control.mpy | Bin 659 -> 0 bytes lib/adafruit_hid/consumer_control_code.mpy | Bin 354 -> 0 bytes lib/adafruit_hid/keyboard.mpy | Bin 1190 -> 0 bytes lib/adafruit_hid/keyboard_layout_base.mpy | Bin 1223 -> 0 bytes lib/adafruit_hid/keyboard_layout_us.mpy | Bin 330 -> 0 bytes lib/adafruit_hid/keycode.mpy | Bin 1764 -> 0 bytes lib/adafruit_hid/mouse.mpy | Bin 843 -> 0 bytes lib/adafruit_mcp230xx/__init__.mpy | Bin lib/adafruit_mcp230xx/digital_inout.mpy | Bin lib/adafruit_mcp230xx/mcp23008.mpy | Bin lib/adafruit_mcp230xx/mcp23016.mpy | Bin lib/adafruit_mcp230xx/mcp23017.mpy | Bin lib/adafruit_mcp230xx/mcp230xx.mpy | Bin lib/adafruit_mcp230xx/mcp23s17.mpy | Bin lib/adafruit_mcp230xx/mcp23sxx.mpy | Bin lib/adafruit_mcp230xx/mcp23xxx.mpy | Bin lib/adafruit_rgbled.mpy | Bin 1095 -> 0 bytes lib/simpleio.mpy | Bin 25 files changed, 225 insertions(+), 152 deletions(-) create mode 100755 .gitignore mode change 100644 => 100755 boot.py mode change 100644 => 100755 config.py mode change 100644 => 100755 keyboard.py mode change 100644 => 100755 keycodes.py delete mode 100755 lib/adafruit_hid/__init__.mpy delete mode 100755 lib/adafruit_hid/consumer_control.mpy delete mode 100755 lib/adafruit_hid/consumer_control_code.mpy delete mode 100755 lib/adafruit_hid/keyboard.mpy delete mode 100755 lib/adafruit_hid/keyboard_layout_base.mpy delete mode 100755 lib/adafruit_hid/keyboard_layout_us.mpy delete mode 100755 lib/adafruit_hid/keycode.mpy delete mode 100755 lib/adafruit_hid/mouse.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/__init__.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/digital_inout.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/mcp23008.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/mcp23016.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/mcp23017.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/mcp230xx.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/mcp23s17.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/mcp23sxx.mpy mode change 100755 => 100644 lib/adafruit_mcp230xx/mcp23xxx.mpy delete mode 100755 lib/adafruit_rgbled.mpy mode change 100755 => 100644 lib/simpleio.mpy diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..dc31d0e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +boot_out.txt diff --git a/.vscode/settings.json b/.vscode/settings.json index 4956f76..ee34996 100755 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,6 +7,7 @@ "python.analysis.extraPaths": [ "", "/home/wholteza/.vscode/extensions/joedevivo.vscode-circuitpython-0.1.15/stubs", - "/home/wholteza/.config/Code/User/globalStorage/joedevivo.vscode-circuitpython/bundle/20211231/adafruit-circuitpython-bundle-py-20211231/lib" - ] + "/home/wholteza/.config/Code/User/globalStorage/joedevivo.vscode-circuitpython/bundle/20220104/adafruit-circuitpython-bundle-py-20220104/lib" + ], + "circuitpython.board.version": "7.2.0-alpha.1" } \ No newline at end of file diff --git a/boot.py b/boot.py old mode 100644 new mode 100755 index 8da90ff..998283e --- a/boot.py +++ b/boot.py @@ -1,6 +1,5 @@ import usb_hid -print("setting up keyboard") bitmap_keyboard = usb_hid.Device( report_descriptor = ( b'\x05\x01\t\x06\xa1\x01\x85\x04u\x01\x95\x08\x05\x07\x19\xe0)\xe7\x15\x00%\x01\x81\x02\x95\x05u\x01\x05\x08\x19\x01)\x05\x91\x02\x95\x01u\x03\x91\x03\x95xu\x01\x15\x00%\x01\x05\x07\x19\x00)w\x81\x02\xc0'), diff --git a/config.py b/config.py old mode 100644 new mode 100755 index 4a184eb..53cb532 --- a/config.py +++ b/config.py @@ -1,24 +1,23 @@ -from adafruit_hid.keycode import Keycode - # pimodori tiny 2040 8MB import board -from keycodes import SE_1, SE_2, SE_3, SE_4, SE_A, SE_B, SE_C, SE_D, SE_E, SE_F, SE_G, SE_H, SE_I, SE_J, SE_K, SE_L +from keycodes import SE io_extenders_pinout = [(0x20, board.GP1, board.GP0)] -pinout = [ +pinout: tuple[int,int] = [ (0,7), (0,11), (0,15), (0,0), (0,8), (0,4), (0,14), (0,1), (0,6), (0,10), (0,13), (0,2), (0,9), (0,5), (0,12), (0,3) ] -keymap = [ - SE_1, SE_2, SE_3, SE_4, - SE_A, SE_B, SE_C, SE_D, - SE_E, SE_F, SE_G, SE_H, - SE_I, SE_J, SE_K, SE_L, +keymap: list[int] = [ + 121, SE.TWO, SE.THREE, SE.FOUR, + SE.A, SE.B, SE.C, SE.D, + SE.E, SE.F, SE.G, SE.H, + SE.I, SE.J, SE.K, SE.L ] -rgb_pins = (board.LED_R, board.LED_G, board.LED_B) \ No newline at end of file + +rgb_pins: tuple[int,int,int] = (board.LED_R, board.LED_G, board.LED_B) \ No newline at end of file diff --git a/keyboard.py b/keyboard.py old mode 100644 new mode 100755 index 929b14d..7f828f8 --- a/keyboard.py +++ b/keyboard.py @@ -1,12 +1,18 @@ -from adafruit_hid.keycode import Keycode from adafruit_mcp230xx.digital_inout import DigitalInOut from adafruit_mcp230xx.mcp23017 import MCP23017 import digitalio import busio import usb_hid import pwmio +import time from micropython import const +__RED = (255,0,0) +__BLUE = (0,0,255) +__GREEN = (0,255,0) +__WHITE = (255,255,255) +__OFF = (0,0,0) +__BLINK = (0.05,0,0) __INVERT_8_BIT_INTEGER_BITMASK = const(0xffff) __DUTY_CYCLE_OFF = __INVERT_8_BIT_INTEGER_BITMASK class RGBLED: @@ -26,11 +32,39 @@ class RGBLED: self.leds[i].duty_cycle = value def off(self): - self.set((0, 0, 0)) + self.set(__OFF) def __to_inverse_8_bit_value(self, value: int) -> int: return ~(value * 257) & __INVERT_8_BIT_INTEGER_BITMASK + def indicate_exception(self) -> None: + self.animate( + __RED, + __BLINK, + __OFF, + __BLINK, + __RED, + __BLINK, + __OFF, + __BLINK, + __RED, + __BLINK, + __OFF) + + def indicate_boot(self) -> None: + self.animate(__WHITE, __BLINK, __OFF) + + def animate(self,*color_sleep_cycles: tuple[int, int, int]) -> None: + """Takes arguments of tuple with three int values. + Argument tuples are in the structure of 'color to display' and 'time to wait' after each other + example: animate((255,255,255),(0.05,0,0),(0,0,0)) - will blink the led white for 0.05 seconds + """ + for i in range(len(color_sleep_cycles)): + if not i % 2: + self.set(color_sleep_cycles[i]) + else: + time.sleep(color_sleep_cycles[i][0]) + __PRESSED = False __UNPRESSED = True class Keyboard: @@ -60,8 +94,7 @@ class Keyboard: self.keymap = keymap self.led = RGBLED(rgb_pins) - self.led.off() - self.led.set((100,100,100)) + self.led.indicate_boot() def initialize_hid(self) -> tuple[usb_hid.Device, usb_hid.Device]: """Initializes keyboard and media device if availabe""" @@ -101,33 +134,40 @@ class Keyboard: return pins def start(self): - self.pressed_keys = set() - self.pressed_keys_last_cycle = set() - self.pin_states_last_cycle = [] - for pin in self.pins: self.pin_states_last_cycle.append(__UNPRESSED) - while True: - for pin in self.pins: - pin_index = self.pins.index(pin) - keycode = self.keymap[pin_index] - previously = self.pin_states_last_cycle[pin_index] - value = pin.value - currentlyPressed = value is __PRESSED - previouslyPressed = previously is __PRESSED - if currentlyPressed: - if not previouslyPressed: - self.pressed_keys.add(keycode) - else: - if previouslyPressed: - try: - self.pressed_keys.remove(keycode) - # Catch silenly if same keycode is pressed twice then released - except KeyError: - pass - self.pin_states_last_cycle[pin_index] = value + try: + self.pressed_keys = set() + self.pressed_keys_last_cycle = set() + self.pin_states_last_cycle = [] + for pin in self.pins: self.pin_states_last_cycle.append(__UNPRESSED) + while True: + for pin in self.pins: + pin_index = self.pins.index(pin) + keycode = self.keymap[pin_index] + previously = self.pin_states_last_cycle[pin_index] + value = pin.value + currentlyPressed = value is __PRESSED + previouslyPressed = previously is __PRESSED + if currentlyPressed: + if not previouslyPressed: + self.pressed_keys.add(keycode) + else: + if previouslyPressed: + try: + self.pressed_keys.remove(keycode) + # Catch silenly if same keycode is pressed twice then released + except KeyError: + pass + self.pin_states_last_cycle[pin_index] = value - if self.pressed_keys != self.pressed_keys_last_cycle: - self.send_nkro_report() - self.pressed_keys_last_cycle = set(self.pressed_keys) + if self.pressed_keys != self.pressed_keys_last_cycle: + self.send_nkro_report() + self.pressed_keys_last_cycle = set(self.pressed_keys) + except Exception as e: + print(f"Exception thrown: {e}, restarting..") + self.led.indicate_exception() + time.sleep(1) + self.led.indicate_boot() + self.start() def send_nkro_report(self): """Sends the USB HID NKRO keyboard report.""" diff --git a/keycodes.py b/keycodes.py old mode 100644 new mode 100755 index cb58622..1e4e7c8 --- a/keycodes.py +++ b/keycodes.py @@ -1,111 +1,144 @@ from micropython import const +class SE: + # Letters + A = const(4) + B = const(5) + C = const(6) + D = const(7) + E = const(8) + F = const(9) + G = const(10) + H = const(11) + I = const(12) + J = const(13) + K = const(14) + L = const(15) + M = const(16) + N = const(17) + O = const(18) + P = const(19) + Q = const(20) + R = const(21) + S = const(22) + T = const(23) + U = const(24) + V = const(25) + W = const(26) + X = const(27) + Y = const(28) + Z = const(29) + Å = const(47) + Ä = const(52) + Ö = const(51) + # Numbers + ZERO = const(39) + ONE = const(30) + TWO = const(31) + THREE = const(32) + FOUR = const(33) + FIVE = const(34) + SIX = const(35) + SEVEN = const(36) + EIGHT = const(37) + NINE = const(38) + # Signs + HYPHEN = const(56) # - and _ + DOT = const(55) # . and : + COMMA = const(54) # , and ; + PARAGRAPH = const(53) # § and ½ + QUOTE = const(49) # ' and * + UMLAUT = const(48) # ¨ and ~ + TICK = const(46) # ´ and ` + PLUS = const(45) # + and ? + EQUAL = const(103) # = + ANGLE_BRACKET = const(100) # < and > + # Function keys + F1 = const(58) + F2 = const(59) + F3 = const(60) + F4 = const(61) + F5 = const(62) + F6 = const(63) + F7 = const(64) + F8 = const(65) + F9 = const(66) + F10 = const(67) + F11 = const(68) + F12 = const(69) + PRINTSCREEN = const(70) + CAPSLOCK = const(57) + ESCAPE = const(41) + SCROLLLOCK = const(71) + PAUSEBREAK = const(72) + INSERT = const(73) + MENU = const(101) + # Function keys tested in gnome + TOUCHPAD_TOGGLE = const(112) + TOUCHPAD_ON = const(113) + TOUCHPAD_OFF = const(114) + MIC_MUTE = const(111) + POWER = const(102) + SETTINGS = const(104) + HELP = const(117) + # Spacing + TAB = const(43) + SPACE = const(44) + ENTER = const(40) + # Navigation + BACKSPACE = const(42) + DELETE = const(76) + HOME = const(74) + END = const(77) + PAGEUP = const(75) + PAGEDOWN = const(78) + RIGHT = const(79) + LEFT = const(80) + UP = const(81) + DOWN = const(82) + # Modifiers + LEFT_CTRL = const(0x0100) + LEFT_SHIFT = const(0x0200) + LEFT_ALT = const(0x0400) + LEFT_SUPER = const(0x0800) + RIGHT_CTRL = const(0x1000) + RIGHT_SHIFT = const(0x2000) + RIGHT_ALT = const(0x4000) + # Others + XF86_LAUNCH_5 = const(105) + XF86_LAUNCH_6 = const(106) + XF86_LAUNCH_7 = const(107) + XF86_LAUNCH_8 = const(108) + XF86_LAUNCH_9 = const(109) + XF86_OPEN = const(116) + SUN_FRONT = const(119) + SUN_PROPS = const(118) + # Numpad + NUM_DOT = const(99) + NUM_0 = const(98) + NUM_1 = const(89) + NUM_2 = const(90) + NUM_3 = const(91) + NUM_4 = const(92) + NUM_5 = const(93) + NUM_6 = const(94) + NUM_7 = const(95) + NUM_8 = const(96) + NUM_9 = const(97) + NUM_ENTER = const(88) + NUM_PLUS = const(87) # + + NUM_MINUS = const(86) # - + NUM_ASTERISK = const(85) # * + NUM_SLASH = const(84) # / + NUMLOCK = const(83) -SE_A = const(4) -SE_B = const(5) -SE_C = const(6) -SE_D = const(7) -SE_E = const(8) -SE_F = const(9) -SE_G = const(10) -SE_H = const(11) -SE_I = const(12) -SE_J = const(13) -SE_K = const(14) -SE_L = const(15) -SE_M = const(16) -SE_N = const(17) -SE_O = const(18) -SE_P = const(19) -SE_Q = const(20) -SE_R = const(21) -SE_S = const(22) -SE_T = const(23) -SE_U = const(24) -SE_V = const(25) -SE_W = const(26) -SE_X = const(27) -SE_Y = const(28) -SE_Z = const(29) -SE_Å = const(47) -SE_Ä = const(52) -SE_Ö = const(51) - -SE_1 = const(30) -SE_2 = const(31) -SE_3 = const(32) -SE_4 = const(33) -SE_5 = const(34) -SE_6 = const(35) -SE_7 = const(36) -SE_8 = const(37) -SE_9 = const(38) -SE_0 = const(39) - -#checked - - - -SE_HYPHEN = const(56) # - -SE_DOT = const(55) # . -SE_COMMA = const(54) # , -SE_PARAGRAPH = const(53) # §/½ -SE_QUOTE = const(49) # '/* -SE_arst = const(48) # ¨ -SE_TICK = const(46) # ´/` -SE_PLUS = const(45) # +/? - -SE_F1 = const(58) -SE_F2 = const(59) -SE_F3 = const(60) -SE_F4 = const(61) -SE_F5 = const(62) -SE_F6 = const(63) -SE_F7 = const(64) -SE_F8 = const(65) -SE_F9 = const(66) -SE_F10 = const(67) -SE_F11 = const(68) -SE_F12 = const(69) - -SE_TAB = const(43) # Tab -SE_SPACE = const(44) # Space -SE_ENTER = const(40) # Enter - -SE_PRINTSCREEN = const(70) # Print screen -SE_CAPSLOCK = const(57) # Caps Lock -SE_ESCAPE = const(41) # Esc -SE_BACKSPACE = const(42) # Backspace -SE_SCROLLLOCK = const(71) # Scroll lock -SE_PAUSEBREAK = const(72) # Pause/Break -SE_INSERT = const(73) # Insert -SE_HOME = const(74) # Home -SE_PAGEUP = const(75) # Page up -SE_DELETE = const(76) # Delete -SE_END = const(77) # End -SE_PAGEDOWN = const(78) # Page down - -SE_RIGHT = const(79) # Arrow right -SE_LEFT = const(80) # Arrow left -SE_UP = const(81) # Arrow down -SE_DOWN = const(82) # Arrow up - -SE_LEFT_CTRL = const(0x0100) -SE_LEFT_SHIFT = const(0x0200) -SE_LEFT_ALT = const(0x0400) -SE_LEFT_SUPER = const(0x0800) -SE_RIGHT_CTRL = const(0x1000) -SE_RIGHT_SHIFT = const(0x2000) -SE_RIGHT_ALT = const(0x4000) -SE_RIGHT_SUPER = const(0x800) - -# Need fix -#SE_MUTE = const(-226) # Mute -#SE_VU = const(-233) # Volume up -#SE_VD = const(-234) # Volume down -# -#SE_RR = const(-179) # Rewind -#SE_FF = const(-180) # Fast forward -#SE_NT = const(-181) # Next track -#SE_PT = const(-182) # Prev track -#SE_ST = const(-183) # Stop track -#SE_PP = const(-205) # Play/pause \ No newline at end of file + # Need fix + #SE_MUTE = const(-226) # Mute + #SE_VU = const(-233) # Volume up + #SE_VD = const(-234) # Volume down + # + #SE_RR = const(-179) # Rewind + #SE_FF = const(-180) # Fast forward + #SE_NT = const(-181) # Next track + #SE_PT = const(-182) # Prev track + #SE_ST = const(-183) # Stop track + #SE_PP = const(-205) # Play/pause \ No newline at end of file diff --git a/lib/adafruit_hid/__init__.mpy b/lib/adafruit_hid/__init__.mpy deleted file mode 100755 index 8b98beb3dc1bd8ab7780a9ca254ef4f09259c396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 zcmY+A!A`{7?Xn0m6sMlg9oLezH{4BXuq)byY{dEtxdxjV@URVvKUPX~n-Dyz>2srE zoM{@yV-hmzdl>6LQ!x%n;A32Ynl_-GgB>!aHfh@svYN|zz-p#Bq}+}AhV75c6{LB+ zqOH@=meh9>?n=|ft!2pbY3ECB(wBBF#$hV}@Hg_>A*A z5$g>J4rFA%hU+{y^4iS?A!Bt&fAe81+vg|1YgaZU+?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*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%MDp6rRDR81tjc?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) diff --git a/lib/adafruit_hid/keyboard_layout_base.mpy b/lib/adafruit_hid/keyboard_layout_base.mpy deleted file mode 100755 index 2cf77eba116748b138eb7855c8137a52f7a4dcaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1223 zcmbtST~8us6nzhJMn7p6)70O>#I89tJxx6NFfIbYBFJm;L0#q_Cg-B^8w ztZAttov5vvMyj<+$S_l=QSQYYdg(;|KgCD1@B*VBnAy+6(eOIY6LKM|&6;vf zh!^n;A*$R^2+2n=^L&c7H{y~6Dlrp}56c)gH>#S}Xl_Izr!}qGDuv6+tH@MHBr#Q# zs;OmAcF@+U@IX2vhN1k%VM}A@Pm9H(Ul@PBqHoi`>7#R9$2+F$>H50!$cYws;A7^I z+tWcjca+X-=gIb7VrS$g_VPQqi7QRBseN(F(>dXv<}y3!Jb@ZwghGfH5=W^_hUE9j z?pDEwts;Ig4OLq?GDAcr*N9Y7F68y-m*uLY5=|kKWYoe78zEr>g*C^j7m#y^ke3DRj$jhJ0jKVaa0&TF+broE7i4AwJTmTA@tr!zoYi;fd4SN zda$0}^9E3l?EZ}IbnZz%j_(Kbqv)jI4Epf$L)=tID%6E8`!Q_zVgeZAv48x#&RK4M z{QFjCy+bH;A@SDJc{?EGN(2!u`RF98FDy!*6b86=9-9kS?TJT`JXO;Y3jdW7<*~poBML$SWc62H>tD zYp)Hvu@-%O6%5}jejD9c!Mj!muaMPb1=ZWKK(=d7dbo7>H#gVmte=7 zR?t1HfPE0{bikpnKr&1oM&uoe3q~Xdzu=lb3_~W!ByFQI&|esgq}U9m|6fR_?r|@( z^cQLkuLhUVn4!)FA4JDwF~In^Y+TEOXf;B;<1!r`oVAmWx}QL-xVan-OndM8E_9}| YD>3|0w87r(Fpx6n=pWw?Mr||y07^q{S^xk5 diff --git a/lib/adafruit_hid/keyboard_layout_us.mpy b/lib/adafruit_hid/keyboard_layout_us.mpy deleted file mode 100755 index 7b3398c97002fdb745dab2ddc33b92b19814a973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/lib/adafruit_hid/keycode.mpy b/lib/adafruit_hid/keycode.mpy deleted file mode 100755 index 4a30986abd7f6fc72f9479ae2b3a7878d32bc2d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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~9hVfmQb#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 diff --git a/lib/adafruit_mcp230xx/__init__.mpy b/lib/adafruit_mcp230xx/__init__.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_mcp230xx/digital_inout.mpy b/lib/adafruit_mcp230xx/digital_inout.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_mcp230xx/mcp23008.mpy b/lib/adafruit_mcp230xx/mcp23008.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_mcp230xx/mcp23016.mpy b/lib/adafruit_mcp230xx/mcp23016.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_mcp230xx/mcp23017.mpy b/lib/adafruit_mcp230xx/mcp23017.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_mcp230xx/mcp230xx.mpy b/lib/adafruit_mcp230xx/mcp230xx.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_mcp230xx/mcp23s17.mpy b/lib/adafruit_mcp230xx/mcp23s17.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_mcp230xx/mcp23sxx.mpy b/lib/adafruit_mcp230xx/mcp23sxx.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_mcp230xx/mcp23xxx.mpy b/lib/adafruit_mcp230xx/mcp23xxx.mpy old mode 100755 new mode 100644 diff --git a/lib/adafruit_rgbled.mpy b/lib/adafruit_rgbled.mpy deleted file mode 100755 index 160447bd6aa4f0883a51f70b536128bda262c329..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1095 zcmY*YL37(g6kgd?-6VF9Wsl-Xlb}gbJ8>MRQ8j4;p%ZKa2bzfkIIdxcBFh^`)Ru*` z3KbV`+Ud~FaNq_9%7GI{DQ?INH(Clmq0=8wu1xp?@MNcSxJdi)_1qmoFF#?K8Apymtun=uv-Ox##Gp&w^E#gY&WJVa) zI<1ZsXA)5x6M`*?h0XAmhR)xcea_CJ_z2bJ#m(i#mE{fT(me8ydJADMH6FB1f!-;m zZrD7!qd%1BD=oqz;ry=0G@zc3c6l3TC z@{*G)s0OWt-3feK!zKwvg}5f3dKDh1poS-ws^Pk--8!6GO-6>OE6!(;m$<0BKZ1Vs zlPmxg{_dXLc5HyTHpGn$Q7S?m+b8+z_LnOxOYiMo%B8PnGH>S6bF*{lbb2+j@G0`W z6w4#k=g~uO=Uqw**J$-Ik9PP)|ENNz54&{w?mt}_=HUqtmm;(m#D6~F(P~d-yhQA% zlA1hxQN8=D__$ju+y`?4v>iYr)c@|Z6xeljCIoi*-<1;8CXa?<-h=SgqdOGHW|^rUyQ(kK388*_SGqxP69<3OA$GnPJOHsB_*)OGB@Vpoz*9+Hg!BKE I_l?Q_3nvy>ivR!s diff --git a/lib/simpleio.mpy b/lib/simpleio.mpy old mode 100755 new mode 100644