From 9895057dd56b3dd1389d621da592d1bb93603242 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 9 May 2025 10:16:58 -0500 Subject: [PATCH 1/2] adding some icons and metadata for fruitjam os, request display size in some metro rp2350/fruitjam apps --- Metro/Metro_RP2350_Breakout/icon.bmp | Bin 0 -> 2214 bytes Metro/Metro_RP2350_Breakout/metadata.json | 4 + Metro/Metro_RP2350_Chips_Challenge/icon.bmp | Bin 0 -> 4538 bytes .../metadata.json | 4 + .../Metro_RP2350_CircuitPython_Matrix/code.py | 3 +- .../icon.bmp | Bin 0 -> 4834 bytes .../metadata.json | 4 + Metro/Metro_RP2350_FlappyNyanCat/code.py | 28 ++----- Metro/Metro_RP2350_FlappyNyanCat/icon.bmp | Bin 0 -> 12426 bytes .../Metro_RP2350_FlappyNyanCat/metadata.json | 4 + .../Metro_RP2350_Match3/match3_game/icon.bmp | Bin 0 -> 2210 bytes .../match3_game/metadata.json | 4 + Metro/Metro_RP2350_Memory/memory_game/code.py | 77 ++++++++++-------- .../Metro_RP2350_Memory/memory_game/icon.bmp | Bin 0 -> 5254 bytes .../memory_game/metadata.json | 4 + Metro/Metro_RP2350_Snake/code.py | 27 ++---- Metro/Metro_RP2350_Snake/icon.bmp | Bin 0 -> 5254 bytes Metro/Metro_RP2350_Snake/metadata.json | 4 + 18 files changed, 82 insertions(+), 81 deletions(-) create mode 100644 Metro/Metro_RP2350_Breakout/icon.bmp create mode 100644 Metro/Metro_RP2350_Breakout/metadata.json create mode 100644 Metro/Metro_RP2350_Chips_Challenge/icon.bmp create mode 100644 Metro/Metro_RP2350_Chips_Challenge/metadata.json create mode 100644 Metro/Metro_RP2350_CircuitPython_Matrix/icon.bmp create mode 100644 Metro/Metro_RP2350_CircuitPython_Matrix/metadata.json create mode 100644 Metro/Metro_RP2350_FlappyNyanCat/icon.bmp create mode 100644 Metro/Metro_RP2350_FlappyNyanCat/metadata.json create mode 100644 Metro/Metro_RP2350_Match3/match3_game/icon.bmp create mode 100644 Metro/Metro_RP2350_Match3/match3_game/metadata.json create mode 100644 Metro/Metro_RP2350_Memory/memory_game/icon.bmp create mode 100644 Metro/Metro_RP2350_Memory/memory_game/metadata.json create mode 100644 Metro/Metro_RP2350_Snake/icon.bmp create mode 100644 Metro/Metro_RP2350_Snake/metadata.json diff --git a/Metro/Metro_RP2350_Breakout/icon.bmp b/Metro/Metro_RP2350_Breakout/icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d78c04e66f286ee76f5f042d54c72ff17269c44e GIT binary patch literal 2214 zcmeH@O$x#=5Jso9{w&Q6BrXLJa)D9;t^_G$@5&3f6>rmC$a8pxIMx{`OhcpSE<=+q z$$Lp*szbYgu3DV0I7%8B6u81dzTUpa9Jj9l;Q8xz)xN%Tiw~xJ(DiVy5i}cs8~)?r z!F$Xf)|o2wz&U|z0JUKj1OE%N2vp;1E~YwcR*{MYrPV|FA6|*EN3s2#+ZpQ zI}z*)Kz1x=FO<%?sdGmW>w}RY%cOw_j0lMU2`bs7ifbPt+f>Oni5FSv z2;SI-&@xrILiSlOuX|7*R?~M@sL$Sn9U`O<^&-0~N z@!G8r=d`yHOX|uC@e1Q5#^N>lb8u=mOPbU8HSB4OUc3em z{jLcQu4}Bld4u^iI%vDT5jPkw(Ti*B|3Twhu|zMfSD0g;*3kd?_ATbOn1c_!cuzfa zqZjY7PIK;oe-G^6x8lQJAJDJF3S+TaiGTjZ7=7!rT3uP|?vv29{jIIFDS_@RY%n>M zdArl;Z0WhdnZ9E7$zcQd1{2l`Se5@Hz_snIP7@T{#Tt_oOzUW6RG6yG1}W(DcC@L2 zZrET?@zzU`WM8veEr;MB&=9h7u}V|)Mf;ef`WLl&-JuM2I?bLkCA-sr#_b@GYE3`y zh}!P;`-6Uu@kRjQy{Xq~b-f_)+lGL!T0-3{I{g8)zQ*^NpN-;a5KpIZ5QL1^K`VS6 z_2N|x9}JX$eg*GM(Kra>pL&Hyx*HhPd&>I&U9Z_}A{4SwF=pA>9kjtiZG!`6@sJOK zJ~v=F?Yq&{)zx!iTW{KbqtWI&|wa7(M9mf)4qWBvW?x00wMnk?ASycwruB9`_6qG&;fUjFN@LaIIy{qu^ zZ1MQ3Z^vT_^TC9AYWzqeIkE96$aJDQ0phLkEJ{{1pLuE&` z1^Jvm{_@_#`_C>H39DHo-;rdhH1(EklX#s?8iC2C;_X=0D}r1;eDu(d<8VHoBMr~B zSL2E@PmQ^FLI!rP|HA{zp3k9q{>}HtK^O$yJbGTq8GU%jl+gxHiBJyciS#4uizJCd z_>Tj%qdaj2T6T@_jtv|y(`{Gyu&MS4Ac=9+@O`17%2YXaYFq|en7x`~Mz1(uS62}( zDld{?k!A}$NkywymekNDne@;nW&vQ7TweMJ!lO4xHE5?A6l%@7Wswwr((UScNAMn! z{5Xz-c-Po*GHRu6v#$Dap3*IWmW+R*_+wN6_`qAYtIq0`1DWQjIk9Tmk?wn>( zmMs>P(c?XoUA;kGyfK&=j8Q9;q5=no$8N2jvmW)3Lus;YjHu>L6+YeeOy$J{MJq zxQTp|K^!QmL*on2hCp<9h!T_0&WJ`bygnr1R`+j^LWa<{8K_-pvkmtFq9Lw!O@{|0CJ w&BRq%XpB$T|F-p$zlpBYaojE=Nz3$X+}n2uv?ZnY$OxIW?V|h}-wne52N|cAzW@LL literal 0 HcmV?d00001 diff --git a/Metro/Metro_RP2350_Chips_Challenge/metadata.json b/Metro/Metro_RP2350_Chips_Challenge/metadata.json new file mode 100644 index 000000000..571444e9f --- /dev/null +++ b/Metro/Metro_RP2350_Chips_Challenge/metadata.json @@ -0,0 +1,4 @@ +{ + "title": "Chip'sChall", + "icon": "icon.bmp" +} diff --git a/Metro/Metro_RP2350_CircuitPython_Matrix/code.py b/Metro/Metro_RP2350_CircuitPython_Matrix/code.py index d383c7f14..f6038f8ef 100644 --- a/Metro/Metro_RP2350_CircuitPython_Matrix/code.py +++ b/Metro/Metro_RP2350_CircuitPython_Matrix/code.py @@ -14,9 +14,10 @@ import supervisor from displayio import Group, TileGrid from tilepalettemapper import TilePaletteMapper +from adafruit_fruitjam.peripherals import request_display_config import adafruit_imageload -# use the built-in HSTX display +request_display_config(320,240) display = supervisor.runtime.display # screen size in tiles, tiles are 16x16 diff --git a/Metro/Metro_RP2350_CircuitPython_Matrix/icon.bmp b/Metro/Metro_RP2350_CircuitPython_Matrix/icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..06e1ec0e1d9baa250ab5a27fc06d25ac239220da GIT binary patch literal 4834 zcmdUz{Zmv`7{|W|h~$bdyL)$eNe$n%&=gxGVK+z(g%ncM2rZOIC_sr)5LjLmfwT>% zsnKet#%ac%Olxu)#~FT*(fUbe{MDKGN9ud-J@@Y2tr|CL&`Z^5eM8ye?O@pmE=uwkW`Us za)=xzHRKq1o2kp0yq5k6a+0YJ6k=P|HlP{s)%dXeC<|%hy)!_`@e<%XeX)4mOnsWk zFVernv@J}0h5l8hZ>vCgJBtdjJ;4&rv52o(PA3cchOukpI{B7-$8vgE&<*-Ok((@M zs1|i2b-*pQe`+o1A`Z zbXigZbS9ZUspJWYPhA}jE8iDiXnU)885cJh1E_j?t2m6H*eNtq_4ZcrG6uOxXja}N z>bJLwAABx05zTykLjONo#agj3t5(y|&Akq1#121u3+vBrXh=%mp8KwS{qB0B{)F_K zKQZ)j&L`K*e)9i)&&uXTqllsfbmb}>W$BXaRZ2*U)gGO^JWWIT}2}% zo!I)cV&m_>&^td`r?*eU{8ARW^*)JRSBK}H&;YqFN68A-Mg>IEa#6K@0cT`?oBEvD z<+oZ?HSY`J1>S6azquuS%SBc1?G%Ruv#s}wW5isxws$_R?vVv%xm-$GM6te|;&>8e z8v_~Ph*|GWRm6$PWPbI?V+sh@$0L_vpPssKv`e-!^Bj(O#vS3TE3(M%^P2j6F@9!-?husSGuLek&`rfq$@7NkK=4H=a19x-???J^=!;U4#lf(qmdolN_d;( z;VF}cs2HYTiG@B#Jtymu_dblLUuvOuc+B~aw8wsEE%Ibr=rg>tUjS_z*K4)7ZtM+M zL~Vo)9kJ2bqU&2cyvH=BbH-Ga6jz#4yxd5OtM`b1Z$z3ceWpwNOC-XSbY;HF^lXZo YKf^uaiKKXPJ$b3&AuFoF{v7fC0VMmziU0rr literal 0 HcmV?d00001 diff --git a/Metro/Metro_RP2350_CircuitPython_Matrix/metadata.json b/Metro/Metro_RP2350_CircuitPython_Matrix/metadata.json new file mode 100644 index 000000000..46ce5585a --- /dev/null +++ b/Metro/Metro_RP2350_CircuitPython_Matrix/metadata.json @@ -0,0 +1,4 @@ +{ + "title": "Matrix", + "icon": "icon.bmp" +} diff --git a/Metro/Metro_RP2350_FlappyNyanCat/code.py b/Metro/Metro_RP2350_FlappyNyanCat/code.py index ca1925f5a..f578aac57 100644 --- a/Metro/Metro_RP2350_FlappyNyanCat/code.py +++ b/Metro/Metro_RP2350_FlappyNyanCat/code.py @@ -17,11 +17,10 @@ import supervisor import bitmaptools from adafruit_display_text.bitmap_label import Label -import picodvi -import framebufferio -import board from micropython import const import adafruit_imageload +from adafruit_fruitjam.peripherals import request_display_config +from adafruit_pathlib import Path # how strong the gravity is FALL_SPEED = 1 @@ -42,23 +41,8 @@ # current score score = 0 -# initialize display -release_displays() - -fb = picodvi.Framebuffer( - 320, - 240, - clk_dp=board.CKP, - clk_dn=board.CKN, - red_dp=board.D0P, - red_dn=board.D0N, - green_dp=board.D1P, - green_dn=board.D1N, - blue_dp=board.D2P, - blue_dn=board.D2N, - color_depth=16, -) -display = framebufferio.FramebufferDisplay(fb) +request_display_config(320,240) +display = supervisor.runtime.display # initialize groups to hold visual elements main_group = Group() @@ -607,10 +591,10 @@ def shift_post(post): # if player pressed p if "p" in cur_btn_val: - supervisor.set_next_code_file(__file__) + supervisor.set_next_code_file(__file__, working_directory=Path(__file__).parent.absolute()) supervisor.reload() # if player pressed q elif "q" in cur_btn_val: print("exiting") - break + supervisor.reload() diff --git a/Metro/Metro_RP2350_FlappyNyanCat/icon.bmp b/Metro/Metro_RP2350_FlappyNyanCat/icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1868cace8e418b9d2acf5802b94668124402bda3 GIT binary patch literal 12426 zcmeH~KTaD#7{wj9Kq^FmL_wc$1muPyp$QkDrAS4a6IdL8f{vcfr=W;XxB{e(asV@U z*V%z5wqu0@;XpVL4uk{YKsXQ%gahF~I8g5Z|0zguhAjsk?2KnA zbN%&;F5RlZ-p-jq9S?SC{P}Bimm!7~E4p&vaxYaCbS?75e}4{ZaE3a}au1 z;GP$tXF4+c{xHJY`q4HNP_>Q`{1)((#GuV@3tK~htN_T*^Y6NR3L+JtZS49P))^H5R?UjXuAf<$Q~|zW`@{UPevwWJZaW}` zELHOH>5ndC12h;+snFlp>$bzJHNm9u>dWJfly z*%Z3acPK#RY~LCZ!hwzh E&pW&|wEzGB literal 0 HcmV?d00001 diff --git a/Metro/Metro_RP2350_FlappyNyanCat/metadata.json b/Metro/Metro_RP2350_FlappyNyanCat/metadata.json new file mode 100644 index 000000000..f3f5a9dc3 --- /dev/null +++ b/Metro/Metro_RP2350_FlappyNyanCat/metadata.json @@ -0,0 +1,4 @@ +{ + "title": "FlapyNyan🐱", + "icon": "icon.bmp" +} diff --git a/Metro/Metro_RP2350_Match3/match3_game/icon.bmp b/Metro/Metro_RP2350_Match3/match3_game/icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..941271e0d047db8edebf14634e42268824b9f9be GIT binary patch literal 2210 zcmd^=&1%Ci49B%n#tyyo;1_5a^wf*VeUv~?J*2^pvD2=5io8IfkJ9JpyJV7VxlUru zbRRI7sAF3{|7BYd>F#iT0=6?g-?6=f_5gDnp&?&yeS5?yHGp1zJlpM$Z#=l;G0UvI zZeL-uxxnJIfUfJH?|Z0!%7*(*qZYYKEORVKuv59U6|K{FYpwl^+p6LKn%=f;OB<;C zm-VIdyTbkH?qu5eOZw9O|1f{Ct~s%ifAQ9}jJSSd{=|!%b@)oCkNFelm`nX>Tx$P6F0v zc;n@PKhsj@RyV!#a-BDZB|d&e&s6pwaopUSQO+k^^yB+ABKP{R7j<9C-&Bv+Px6=H mcmhLi<^8xp{xW)(<}b&CPmTYF_@M5S?*;qI^XWhBU7in&xcANg literal 0 HcmV?d00001 diff --git a/Metro/Metro_RP2350_Match3/match3_game/metadata.json b/Metro/Metro_RP2350_Match3/match3_game/metadata.json new file mode 100644 index 000000000..b6cb9040d --- /dev/null +++ b/Metro/Metro_RP2350_Match3/match3_game/metadata.json @@ -0,0 +1,4 @@ +{ + "title": "Match3", + "icon": "icon.bmp" +} diff --git a/Metro/Metro_RP2350_Memory/memory_game/code.py b/Metro/Metro_RP2350_Memory/memory_game/code.py index eefd35ec3..70ae637d3 100644 --- a/Metro/Metro_RP2350_Memory/memory_game/code.py +++ b/Metro/Metro_RP2350_Memory/memory_game/code.py @@ -10,6 +10,7 @@ import array import random import time +import atexit from displayio import Group, OnDiskBitmap, TileGrid from adafruit_display_text.bitmap_label import Label from adafruit_display_text.text_box import TextBox @@ -18,6 +19,9 @@ import supervisor import terminalio import usb.core +from adafruit_fruitjam.peripherals import request_display_config +import adafruit_usb_host_descriptors +from adafruit_pathlib import Path def random_selection(lst, count): @@ -58,34 +62,8 @@ def update_score_text(): # initial state is title screen CUR_STATE = STATE_TITLE -# pylint: disable=ungrouped-imports -if hasattr(supervisor.runtime, "display") and supervisor.runtime.display is not None: - # use the built-in HSTX display for Metro RP2350 - display = supervisor.runtime.display -else: - # pylint: disable=ungrouped-imports - from displayio import release_displays - import picodvi - import board - import framebufferio - - # initialize display - release_displays() - - fb = picodvi.Framebuffer( - 320, - 240, - clk_dp=board.CKP, - clk_dn=board.CKN, - red_dp=board.D0P, - red_dn=board.D0N, - green_dp=board.D1P, - green_dn=board.D1N, - blue_dp=board.D2P, - blue_dn=board.D2N, - color_depth=16, - ) - display = framebufferio.FramebufferDisplay(fb) +request_display_config(320,240) +display = supervisor.runtime.display # main group will hold all the visual elements main_group = Group() @@ -312,6 +290,9 @@ def update_score_text(): # wait a second for USB devices to be ready time.sleep(1) +mouse_interface_index, mouse_endpoint_address = None, None +mouse = None + # scan for connected USB devices for device in usb.core.find(find_all=True): # print information about the found devices @@ -319,16 +300,40 @@ def update_score_text(): print(device.manufacturer, device.product) print(device.serial_number) - # assume this device is the mouse - mouse = device + config_descriptor = adafruit_usb_host_descriptors.get_configuration_descriptor( + device, 0 + ) - # detach from kernel driver if active + _possible_interface_index, _possible_endpoint_address = adafruit_usb_host_descriptors.find_boot_mouse_endpoint( + device) + if _possible_interface_index is not None and _possible_endpoint_address is not None: + mouse = device + mouse_interface_index = _possible_interface_index + mouse_endpoint_address = _possible_endpoint_address + print(f"mouse interface: {mouse_interface_index} endpoint_address: {hex(mouse_endpoint_address)}") + +mouse_was_attached = None +if mouse is not None: + # detach the kernel driver if needed if mouse.is_kernel_driver_active(0): + mouse_was_attached = True mouse.detach_kernel_driver(0) + else: + mouse_was_attached = False - # set the mouse configuration so it can be used + # set configuration on the mouse so we can use it mouse.set_configuration() +def atexit_callback(): + """ + re-attach USB devices to kernel if needed. + :return: + """ + print("inside atexit callback") + if mouse_was_attached and not mouse.is_kernel_driver_active(0): + mouse.attach_kernel_driver(0) + +atexit.register(atexit_callback) # Buffer to hold data read from the mouse # Boot mice have 4 byte reports @@ -354,7 +359,7 @@ def update_score_text(): try: # try to read data from the mouse, small timeout so the code will move on # quickly if there is no data - data_len = mouse.read(0x81, buf, timeout=10) + data_len = mouse.read(mouse_endpoint_address, buf, timeout=20) # if there was data, then update the mouse cursor on the display # using min and max to keep it within the bounds of the display @@ -493,12 +498,12 @@ def update_score_text(): # button bounding box if play_again_btn.contains(coords): # set next code file to this one - supervisor.set_next_code_file(__file__) + supervisor.set_next_code_file(__file__, working_directory=Path(__file__).parent.absolute()) # reload supervisor.reload() # if the mouse point is within the exit # button bounding box if exit_btn.contains(coords): - # break to exit out of this script - break + # restart back to code.py + supervisor.reload() diff --git a/Metro/Metro_RP2350_Memory/memory_game/icon.bmp b/Metro/Metro_RP2350_Memory/memory_game/icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c268a6b3322f2b4fbe857a5fe623a339ed292a4b GIT binary patch literal 5254 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 MdGWHO9U?aV2ZQV4>;M1& literal 0 HcmV?d00001 diff --git a/Metro/Metro_RP2350_Memory/memory_game/metadata.json b/Metro/Metro_RP2350_Memory/memory_game/metadata.json new file mode 100644 index 000000000..cbf41d7da --- /dev/null +++ b/Metro/Metro_RP2350_Memory/memory_game/metadata.json @@ -0,0 +1,4 @@ +{ + "title": "Memory", + "icon": "icon.bmp" +} diff --git a/Metro/Metro_RP2350_Snake/code.py b/Metro/Metro_RP2350_Snake/code.py index f6031cff8..54bea1cd4 100644 --- a/Metro/Metro_RP2350_Snake/code.py +++ b/Metro/Metro_RP2350_Snake/code.py @@ -10,6 +10,7 @@ import displayio import terminalio from adafruit_display_text.text_box import TextBox +from adafruit_fruitjam.peripherals import request_display_config from snake_helpers import World, Snake, GameOverException, SpeedAdjuster # state machine constant @@ -34,26 +35,8 @@ # variable for the players score score = 0 -# initialize display -displayio.release_displays() -fb = picodvi.Framebuffer( - 320, - 240, - clk_dp=board.CKP, - clk_dn=board.CKN, - red_dp=board.D0P, - red_dn=board.D0N, - green_dp=board.D1P, - green_dn=board.D1N, - blue_dp=board.D2P, - blue_dn=board.D2N, - color_depth=16, -) -display = framebufferio.FramebufferDisplay(fb) - -# In future release the default HSTX display -# will get initialized by default by circuitpython -# display = supervisor.runtime.display +request_display_config(320,240) +display = supervisor.runtime.display # load title splash screen bitmap title_bmp = displayio.OnDiskBitmap("snake_splash.bmp") @@ -263,5 +246,5 @@ supervisor.reload() # if the q button is pressed for exit if cur_btn_val in {"q", "Q"}: - # break out of main while True loop. - break + # reload to go back to code.py + supervisor.reload() diff --git a/Metro/Metro_RP2350_Snake/icon.bmp b/Metro/Metro_RP2350_Snake/icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3bc71274877968ec9c10621d48b88b94eb32d678 GIT binary patch literal 5254 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 literal 0 HcmV?d00001 diff --git a/Metro/Metro_RP2350_Snake/metadata.json b/Metro/Metro_RP2350_Snake/metadata.json new file mode 100644 index 000000000..e94aba03e --- /dev/null +++ b/Metro/Metro_RP2350_Snake/metadata.json @@ -0,0 +1,4 @@ +{ + "title": "🐍 Snake 🐍", + "icon": "icon.bmp" +} From f57629a8ae75e953d48c82827ba6c3491de6d1b3 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Tue, 17 Jun 2025 15:17:36 -0500 Subject: [PATCH 2/2] pylint fixes, remove unused imports --- Metro/Metro_RP2350_FlappyNyanCat/code.py | 5 ++-- Metro/Metro_RP2350_Memory/memory_game/code.py | 25 +++++++++++-------- Metro/Metro_RP2350_Snake/code.py | 3 --- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Metro/Metro_RP2350_FlappyNyanCat/code.py b/Metro/Metro_RP2350_FlappyNyanCat/code.py index f578aac57..39454cd23 100644 --- a/Metro/Metro_RP2350_FlappyNyanCat/code.py +++ b/Metro/Metro_RP2350_FlappyNyanCat/code.py @@ -13,7 +13,7 @@ import random import sys import terminalio -from displayio import Group, TileGrid, Bitmap, release_displays, Palette +from displayio import Group, TileGrid, Bitmap, Palette import supervisor import bitmaptools from adafruit_display_text.bitmap_label import Label @@ -591,7 +591,8 @@ def shift_post(post): # if player pressed p if "p" in cur_btn_val: - supervisor.set_next_code_file(__file__, working_directory=Path(__file__).parent.absolute()) + supervisor.set_next_code_file(__file__, + working_directory=Path(__file__).parent.absolute()) supervisor.reload() # if player pressed q diff --git a/Metro/Metro_RP2350_Memory/memory_game/code.py b/Metro/Metro_RP2350_Memory/memory_game/code.py index 70ae637d3..4e2b38a0a 100644 --- a/Metro/Metro_RP2350_Memory/memory_game/code.py +++ b/Metro/Metro_RP2350_Memory/memory_game/code.py @@ -44,7 +44,7 @@ def update_score_text(): Update the score text on the display for each player """ for _ in range(2): - out_str = f"p{_+1} score: {player_scores[_]}" + out_str = f"p{_ + 1} score: {player_scores[_]}" score_lbls[_].text = out_str @@ -62,7 +62,7 @@ def update_score_text(): # initial state is title screen CUR_STATE = STATE_TITLE -request_display_config(320,240) +request_display_config(320, 240) display = supervisor.runtime.display # main group will hold all the visual elements @@ -304,13 +304,15 @@ def update_score_text(): device, 0 ) - _possible_interface_index, _possible_endpoint_address = adafruit_usb_host_descriptors.find_boot_mouse_endpoint( - device) + _possible_interface_index, _possible_endpoint_address = ( + adafruit_usb_host_descriptors.find_boot_mouse_endpoint(device)) + if _possible_interface_index is not None and _possible_endpoint_address is not None: mouse = device mouse_interface_index = _possible_interface_index mouse_endpoint_address = _possible_endpoint_address - print(f"mouse interface: {mouse_interface_index} endpoint_address: {hex(mouse_endpoint_address)}") + print(f"mouse interface: {mouse_interface_index}", end="") + print(f"endpoint_address: {hex(mouse_endpoint_address)}") mouse_was_attached = None if mouse is not None: @@ -324,6 +326,7 @@ def update_score_text(): # set configuration on the mouse so we can use it mouse.set_configuration() + def atexit_callback(): """ re-attach USB devices to kernel if needed. @@ -333,6 +336,7 @@ def atexit_callback(): if mouse_was_attached and not mouse.is_kernel_driver_active(0): mouse.attach_kernel_driver(0) + atexit.register(atexit_callback) # Buffer to hold data read from the mouse @@ -396,8 +400,8 @@ def atexit_callback(): # if both cards were the same i.e. they found a match if ( - card_tgs[cards_flipped_this_turn[0]][0] - == card_tgs[cards_flipped_this_turn[1]][0] + card_tgs[cards_flipped_this_turn[0]][0] + == card_tgs[cards_flipped_this_turn[1]][0] ): # set the cards tile index to show a blank spot instead of a card @@ -414,8 +418,8 @@ def atexit_callback(): # of cards then the code knows the game is over because each pair is worth 1 # point if ( - player_scores[0] + player_scores[1] - >= (grid_size[0] * grid_size[1]) // 2 + player_scores[0] + player_scores[1] + >= (grid_size[0] * grid_size[1]) // 2 ): # if the player's scores are equal @@ -498,7 +502,8 @@ def atexit_callback(): # button bounding box if play_again_btn.contains(coords): # set next code file to this one - supervisor.set_next_code_file(__file__, working_directory=Path(__file__).parent.absolute()) + supervisor.set_next_code_file(__file__, + working_directory=Path(__file__).parent.absolute()) # reload supervisor.reload() diff --git a/Metro/Metro_RP2350_Snake/code.py b/Metro/Metro_RP2350_Snake/code.py index 54bea1cd4..065496d6e 100644 --- a/Metro/Metro_RP2350_Snake/code.py +++ b/Metro/Metro_RP2350_Snake/code.py @@ -3,9 +3,6 @@ import sys import time from micropython import const -import board -import picodvi -import framebufferio import supervisor import displayio import terminalio