Skip to content

Conversation

@TheOddCell
Copy link

This does not add anything else
I am unsure how to build this tbh so for now this is a draft

Resolves #203

@TheOddCell TheOddCell marked this pull request as draft October 31, 2025 21:18
@TheOddCell
Copy link
Author

microhydra on  main 
-> ./tools/build_device_bin.sh CARDPUTER-ADV
Checking "python3" ...
Python 3.13.7
"python3" has been detected
Activating ESP-IDF 5.4
Setting IDF_PATH to '/home/odd/microhydradit/microhydra/esp-idf'.
* Checking python version ... 3.13.7
* Checking python dependencies ... OK
* Deactivating the current ESP-IDF environment (if any) ... OK
* Establishing a new ESP-IDF environment ... OK
* Identifying shell ... bash
* Detecting outdated tools in system ... OK - no outdated tools found
* Shell completion ... Autocompletion code generated

Done! You can now compile ESP-IDF projects.
Go to the project directory and run:

  idf.py build
esp-idf setup done.
Building MicroPython for board: CARDPUTER-ADV
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
Makefile:22: *** Invalid BOARD specified: boards/CARDPUTER-ADV.  Stop.
Failed to initialize submodules for CARDPUTER-ADV

uh @echo-lalia i know i'm doing it wrong but how badly

@echo-lalia
Copy link
Owner

echo-lalia commented Oct 31, 2025

Not too bad as far as i can tell at a glance!

There's a couple of scripts you have to run before that script works correctly, which will build the Micropython board folder for each device.
(I know the scripts under /tools are kinda poorly named and organized at the moment, so i don't blame you for not catching that, haha).

You should be able to run microhydra_build_all.sh to run all the other scripts in order, which will create .py, .mpy, and .bin files for each device (or, you can also just take a look at that script to see what it's doing).

@TheOddCell
Copy link
Author

20251031_191326.jpg

Bootloop (m5launcher+compiled bin, not reaching launcher screen tho)

@TheOddCell
Copy link
Author

TheOddCell commented Oct 31, 2025

image

it's bootlooping enough that the notification daemon is glitching
@echo-lalia is this a known issue or did i mess something up
EDIT: I don't mean the notification I mean the bootloop

@echo-lalia
Copy link
Owner

is this a known issue or did i mess something up

I'm not certain. MicroHydra does work with M5launcher, but installing Micropython using M5launcher (as well as some other tools, such as M5burner) can be temperamental thanks to issues mounting/creating the filesystem.

Have you tried installing through Thonny, with the "erase-flash" box checked? (Installing it that way has always worked for me with this board). And if that doesn't boot into MicroHydra, are you at least able to get a MicroPython repl when connecting from Thonny?

@TheOddCell
Copy link
Author

This is the compiled bin, lemme try doing a proper flash

I tried and I got to a REPL but nothing happened
I tried import main in the REPL and then I got the bootloop-esq thing

@TheOddCell
Copy link
Author

TheOddCell commented Nov 1, 2025

i know dashes have a little bit of a problem so i'll retry now
EDIT: rebuilding started
EDIT: done rebuilding
EDIT: flashing micropython
image
should be fine right
EDIT: uploading microhydra
EDIT: got repl, import-ing main
EDIT: bootloop :|
EDIT: attempting to flash the .bin with esptool
EDIT: somehow an even faster boootloop :|

maybe it's because there's a dedicated version of micropython for the cardputer but not for adv? or maybe it was circutpython i don't remember

@echo-lalia
Copy link
Owner

Looks like you flashed the generic esp32s3 Micropython variant. If you click the little hamburger menu, you can select a Micropython bin from your own computer, and flash MicroHydra that way. (You can use esp-tool as well, but you do have to erase the flash first)

If you can get a Micropython repl after flashing the MicroHydra bin, you should be about to check the log.txt file and hopefully find some informative error description.

@TheOddCell
Copy link
Author

I tried pressing the hambuger and selected the CARDPUTER_ADV.bin and it did not accept it
here's my esptool stuff:


microhydra/MicroHydra on  main took 11s 
-> esptool write-flash -e 0x0 CARDPUTER_ADV.bin
/dev/ttyS9 failed to connect: Could not open /dev/ttyS9, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS8 failed to connect: Could not open /dev/ttyS8, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS7 failed to connect: Could not open /dev/ttyS7, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS6 failed to connect: Could not open /dev/ttyS6, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS5 failed to connect: Could not open /dev/ttyS5, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS4 failed to connect: Could not open /dev/ttyS4, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS31 failed to connect: Could not open /dev/ttyS31, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS30 failed to connect: Could not open /dev/ttyS30, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS3 failed to connect: Could not open /dev/ttyS3, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS29 failed to connect: Could not open /dev/ttyS29, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS28 failed to connect: Could not open /dev/ttyS28, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS27 failed to connect: Could not open /dev/ttyS27, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS26 failed to connect: Could not open /dev/ttyS26, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS25 failed to connect: Could not open /dev/ttyS25, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS24 failed to connect: Could not open /dev/ttyS24, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS23 failed to connect: Could not open /dev/ttyS23, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS22 failed to connect: Could not open /dev/ttyS22, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS21 failed to connect: Could not open /dev/ttyS21, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS20 failed to connect: Could not open /dev/ttyS20, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS2 failed to connect: Could not open /dev/ttyS2, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS19 failed to connect: Could not open /dev/ttyS19, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS18 failed to connect: Could not open /dev/ttyS18, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS17 failed to connect: Could not open /dev/ttyS17, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS16 failed to connect: Could not open /dev/ttyS16, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS15 failed to connect: Could not open /dev/ttyS15, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS14 failed to connect: Could not open /dev/ttyS14, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS13 failed to connect: Could not open /dev/ttyS13, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS12 failed to connect: Could not open /dev/ttyS12, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS11 failed to connect: Could not open /dev/ttyS11, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS10 failed to connect: Could not open /dev/ttyS10, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

/dev/ttyS1 failed to connect: Could not open /dev/ttyS1, the port is busy or doesn't exist.
(Could not configure port: (5, 'Input/output error'))

esptool v5.0.1
Found 33 serial ports...
Serial port /dev/ttyS9:
Serial port /dev/ttyS8:
Serial port /dev/ttyS7:
Serial port /dev/ttyS6:
Serial port /dev/ttyS5:
Serial port /dev/ttyS4:
Serial port /dev/ttyS31:
Serial port /dev/ttyS30:
Serial port /dev/ttyS3:
Serial port /dev/ttyS29:
Serial port /dev/ttyS28:
Serial port /dev/ttyS27:
Serial port /dev/ttyS26:
Serial port /dev/ttyS25:
Serial port /dev/ttyS24:
Serial port /dev/ttyS23:
Serial port /dev/ttyS22:
Serial port /dev/ttyS21:
Serial port /dev/ttyS20:
Serial port /dev/ttyS2:
Serial port /dev/ttyS19:
Serial port /dev/ttyS18:
Serial port /dev/ttyS17:
Serial port /dev/ttyS16:
Serial port /dev/ttyS15:
Serial port /dev/ttyS14:
Serial port /dev/ttyS13:
Serial port /dev/ttyS12:
Serial port /dev/ttyS11:
Serial port /dev/ttyS10:
Serial port /dev/ttyS1:
Serial port /dev/ttyS0:
Connecting....................................../dev/ttyS0 failed to connect: Failed to connect to Espressif device: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html

Serial port /dev/ttyACM0:
Connecting...
Detecting chip type... ESP32-S3
Connected to ESP32-S3 on /dev/ttyACM0:
Chip type:          ESP32-S3 (QFN56) (revision v0.2)
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded Flash 8MB (GD)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                10:51:db:55:6c:f8

Uploading stub flasher...
Running stub flasher...
Stub flasher running.

Configuring flash size...
Erasing flash memory (this may take a while)...
Flash memory erased successfully in 4.4 seconds.
Compressed 2394944 bytes to 1521642...

Writing at 0x00000000 [                              ]   0.0% 0/1521642 bytes... 

Writing at 0x0001201d [                              ]   1.1% 16384/1521642 bytes... 

Writing at 0x0001ad75 [                              ]   2.2% 32768/1521642 bytes... 

Writing at 0x00027cff [                              ]   3.2% 49152/1521642 bytes... 

Writing at 0x00034a2d [>                             ]   4.3% 65536/1521642 bytes... 

Writing at 0x0003b7b4 [>                             ]   5.4% 81920/1521642 bytes... 

Writing at 0x00042057 [>                             ]   6.5% 98304/1521642 bytes... 

Writing at 0x00047d47 [=>                            ]   7.5% 114688/1521642 bytes... 

Writing at 0x0004dbe8 [=>                            ]   8.6% 131072/1521642 bytes... 

Writing at 0x00053bc6 [=>                            ]   9.7% 147456/1521642 bytes... 

Writing at 0x00058b01 [==>                           ]  10.8% 163840/1521642 bytes... 

Writing at 0x0005d5b6 [==>                           ]  11.8% 180224/1521642 bytes... 

Writing at 0x00062166 [==>                           ]  12.9% 196608/1521642 bytes... 

Writing at 0x00067447 [===>                          ]  14.0% 212992/1521642 bytes... 

Writing at 0x0006c600 [===>                          ]  15.1% 229376/1521642 bytes... 

Writing at 0x00071910 [===>                          ]  16.2% 245760/1521642 bytes... 

Writing at 0x0007678d [====>                         ]  17.2% 262144/1521642 bytes... 

Writing at 0x0007b904 [====>                         ]  18.3% 278528/1521642 bytes... 

Writing at 0x00080dee [====>                         ]  19.4% 294912/1521642 bytes... 

Writing at 0x00085cb0 [=====>                        ]  20.5% 311296/1521642 bytes... 

Writing at 0x0008ac6e [=====>                        ]  21.5% 327680/1521642 bytes... 

Writing at 0x0008f9bb [=====>                        ]  22.6% 344064/1521642 bytes... 

Writing at 0x000973c1 [======>                       ]  23.7% 360448/1521642 bytes... 

Writing at 0x000a1812 [======>                       ]  24.8% 376832/1521642 bytes... 

Writing at 0x000b9c7f [======>                       ]  25.8% 393216/1521642 bytes... 

Writing at 0x000c3d5a [=======>                      ]  26.9% 409600/1521642 bytes... 

Writing at 0x000ca39d [=======>                      ]  28.0% 425984/1521642 bytes... 

Writing at 0x000d0236 [=======>                      ]  29.1% 442368/1521642 bytes... 

Writing at 0x000d624e [========>                     ]  30.1% 458752/1521642 bytes... 

Writing at 0x000dc6a6 [========>                     ]  31.2% 475136/1521642 bytes... 

Writing at 0x000e59fb [========>                     ]  32.3% 491520/1521642 bytes... 

Writing at 0x000f0c5d [=========>                    ]  33.4% 507904/1521642 bytes... 

Writing at 0x000f6360 [=========>                    ]  34.5% 524288/1521642 bytes... 

Writing at 0x000fbc19 [=========>                    ]  35.5% 540672/1521642 bytes... 

Writing at 0x00100eac [=========>                    ]  36.6% 557056/1521642 bytes... 

Writing at 0x001062a4 [==========>                   ]  37.7% 573440/1521642 bytes... 

Writing at 0x0010b620 [==========>                   ]  38.8% 589824/1521642 bytes... 

Writing at 0x00110c24 [==========>                   ]  39.8% 606208/1521642 bytes... 

Writing at 0x001161b9 [===========>                  ]  40.9% 622592/1521642 bytes... 

Writing at 0x0011b4e3 [===========>                  ]  42.0% 638976/1521642 bytes... 

Writing at 0x001207d9 [===========>                  ]  43.1% 655360/1521642 bytes... 

Writing at 0x0012595f [============>                 ]  44.1% 671744/1521642 bytes... 

Writing at 0x0012ab71 [============>                 ]  45.2% 688128/1521642 bytes... 

Writing at 0x0012febd [============>                 ]  46.3% 704512/1521642 bytes... 

Writing at 0x0013537f [=============>                ]  47.4% 720896/1521642 bytes... 

Writing at 0x0013a09a [=============>                ]  48.5% 737280/1521642 bytes... 

Writing at 0x0013f067 [=============>                ]  49.5% 753664/1521642 bytes... 

Writing at 0x00145c31 [==============>               ]  50.6% 770048/1521642 bytes... 

Writing at 0x0014bb86 [==============>               ]  51.7% 786432/1521642 bytes... 

Writing at 0x0015182f [==============>               ]  52.8% 802816/1521642 bytes... 

Writing at 0x0015693a [===============>              ]  53.8% 819200/1521642 bytes... 

Writing at 0x0015c755 [===============>              ]  54.9% 835584/1521642 bytes... 

Writing at 0x001626dd [===============>              ]  56.0% 851968/1521642 bytes... 

Writing at 0x00167f0f [================>             ]  57.1% 868352/1521642 bytes... 

Writing at 0x0016d66a [================>             ]  58.1% 884736/1521642 bytes... 

Writing at 0x00172ecf [================>             ]  59.2% 901120/1521642 bytes... 

Writing at 0x0017890c [=================>            ]  60.3% 917504/1521642 bytes... 

Writing at 0x0017e714 [=================>            ]  61.4% 933888/1521642 bytes... 

Writing at 0x00183bc6 [=================>            ]  62.5% 950272/1521642 bytes... 

Writing at 0x001890e0 [==================>           ]  63.5% 966656/1521642 bytes... 

Writing at 0x0018fc27 [==================>           ]  64.6% 983040/1521642 bytes... 

Writing at 0x00195cbb [==================>           ]  65.7% 999424/1521642 bytes... 

Writing at 0x0019b603 [===================>          ]  66.8% 1015808/1521642 bytes... 

Writing at 0x001a10b4 [===================>          ]  67.8% 1032192/1521642 bytes... 

Writing at 0x001a6d3f [===================>          ]  68.9% 1048576/1521642 bytes... 

Writing at 0x001acf7a [===================>          ]  70.0% 1064960/1521642 bytes... 

Writing at 0x001b2aaa [====================>         ]  71.1% 1081344/1521642 bytes... 

Writing at 0x001b7b38 [====================>         ]  72.1% 1097728/1521642 bytes... 

Writing at 0x001bcf40 [====================>         ]  73.2% 1114112/1521642 bytes... 

Writing at 0x001c24a7 [=====================>        ]  74.3% 1130496/1521642 bytes... 

Writing at 0x001c7a24 [=====================>        ]  75.4% 1146880/1521642 bytes... 

Writing at 0x001ccd8c [=====================>        ]  76.4% 1163264/1521642 bytes... 

Writing at 0x001d2811 [======================>       ]  77.5% 1179648/1521642 bytes... 

Writing at 0x001d79fd [======================>       ]  78.6% 1196032/1521642 bytes... 

Writing at 0x001dcacd [======================>       ]  79.7% 1212416/1521642 bytes... 

Writing at 0x001e2325 [=======================>      ]  80.8% 1228800/1521642 bytes... 

Writing at 0x001e7b2f [=======================>      ]  81.8% 1245184/1521642 bytes... 

Writing at 0x001ecf90 [=======================>      ]  82.9% 1261568/1521642 bytes... 

Writing at 0x001f2593 [========================>     ]  84.0% 1277952/1521642 bytes... 

Writing at 0x001f8a59 [========================>     ]  85.1% 1294336/1521642 bytes... 

Writing at 0x001fdc87 [========================>     ]  86.1% 1310720/1521642 bytes... 

Writing at 0x00202d9d [=========================>    ]  87.2% 1327104/1521642 bytes... 

Writing at 0x00208000 [=========================>    ]  88.3% 1343488/1521642 bytes... 

Writing at 0x0020d6af [=========================>    ]  89.4% 1359872/1521642 bytes... 

Writing at 0x0021380d [==========================>   ]  90.4% 1376256/1521642 bytes... 

Writing at 0x00218f05 [==========================>   ]  91.5% 1392640/1521642 bytes... 

Writing at 0x00220feb [==========================>   ]  92.6% 1409024/1521642 bytes... 

Writing at 0x002261ee [===========================>  ]  93.7% 1425408/1521642 bytes... 

Writing at 0x0022bab9 [===========================>  ]  94.8% 1441792/1521642 bytes... 

Writing at 0x00231e8d [===========================>  ]  95.8% 1458176/1521642 bytes... 

Writing at 0x00237647 [============================> ]  96.9% 1474560/1521642 bytes... 

Writing at 0x0023cf8f [============================> ]  98.0% 1490944/1521642 bytes... 

Writing at 0x00242f3b [============================> ]  99.1% 1507328/1521642 bytes... 

Writing at 0x00248b40 [==============================] 100.0% 1521642/1521642 bytes... 
Wrote 2394944 bytes (1521642 compressed) at 0x00000000 in 14.6 seconds (1313.9 kbit/s).
Hash of data verified.

Hard resetting via RTS pin...

and.... i got a bootloop D:

@echo-lalia
Copy link
Owner

Just tried pulling your changes and uploading the cardputer_adv.bin firmware to my regular Cardputer, and it (kinda) worked! I got a MicroPython repl through Thonny (though it took a few tries to catch it as it was bootlooping), and I was able to see the log.txt for what was going wrong:

[.frozen/launcher/launcher]
Traceback (most recent call last):
  File "main.py", line 39, in <module>
  File "launcher/launcher.py", line 825, in <module>
  File "launcher/launcher.py", line 699, in main_loop
  File "lib/userinput/userinput.py", line 141, in get_new_keys
  File "lib/userinput/userinput.py", line 171, in populate_tracker
AttributeError: 'UserInput' object has no attribute 'key_state'

I never ended up documenting the _keys module well because I expect the API to change as more devices are added. But there are certain properties/methods that the UserInput module requires to function correctly.

If you would like to keep working on this and get it working, I'd suggest installing a plain MicroPython firmware onto the device, uploading the compiled MicroHydra .mpy files to it, and then uploading the _keys.py file and edit/test it that way, rather than building/uploading a firmware to test your additions :)

@echo-lalia echo-lalia added enhancement New feature or request Cardputer For issues related to the Cardputer. labels Nov 3, 2025
@TheOddCell
Copy link
Author

TheOddCell commented Nov 4, 2025

I have attempted to redo the keymap, from scratch.
Currently building, will follow up with an edit about how that goes.
If it works this will no longer be a draft PR
EDIT: it doesn't bootloop but the keyboard still doesnt work lol
EDIT: another thing with they keyboard it seems is that it uses I2C which.. idk how to use gonna look into it

@TheOddCell
Copy link
Author

TheOddCell commented Nov 4, 2025

I have attempted to fix the i2c issue so i'm trying to rebuild

(sidenote: i hate make, but if you aren't gonna provide a makefile at least make the script names more understandable)

EDIT: viper is REALLY not liking this, for now i'm disabling it for the function. Later i might fix it and re add it
EDIT: it compiles but isnt working im gonna go check the console
EDIT: I2C read failed: 'UserInput' object has no attribute 'i2c' - it turns out i'm not too great at micropython. Lemme try again
EDIT: i dont have a keyboard and now my speaker is goingsi hfiouashudiahskljhdfasjkhjkdq
EDIT: I2C read failed: [Errno 19] ENODEV
EDIT: very wrong pins lemme fix
EDIT: bootloop :|
EDIT: pushing anyways so you can see what's wrong because i myself can't get anything out of it
EDIT: when/if you merge this do a squash-and-merge because of my stupid commit messages
EDIT: there's a relavant xkcd: https://xkcd.com/1296/

@TheOddCell
Copy link
Author

MicroPython v1.26.1 on 2025-09-11; Generic ESP32S3 module with ESP32S3
Type "help()" for more information.
>>> import main
PROBLEM IN THONNY'S BACK-END: Exception while handling 'execute_source' (ConnectionError: device reports readiness to read but returned no data (device disconnected or multiple access on port?)).
See Thonny's backend.log for more info.
You may need to press "Stop/Restart" or hard-reset your MicroPython device and try again.

@echo-lalia
Copy link
Owner

MicroPython v1.26.1 on 2025-09-11; Generic ESP32S3 module with ESP32S3
Type "help()" for more information.
>>> import main
PROBLEM IN THONNY'S BACK-END: Exception while handling 'execute_source' (ConnectionError: device reports readiness to read but returned no data (device disconnected or multiple access on port?)).
See Thonny's backend.log for more info.
You may need to press "Stop/Restart" or hard-reset your MicroPython device and try again.

MicroHydra does a soft reset in-between apps, which Thonny absolutely hates unfortunately. When the running app errors, main.py catches and logs the error in log.txt, then starts the launcher (causing another soft reset). Which makes it a bit annoying to monitor using Thonny.

To get around that, I usually just directly run the launcher.py (or whatever app I want to test) from Thonny by hitting F5 with the .py file open. Or, by importing the app using something like from launcher import launcher. You can even just delete main.py entirely while you test if it's getting in your way.

@TheOddCell
Copy link
Author

TheOddCell commented Nov 5, 2025

>>> from launcher import launcher
could not load settings from config.json. reloading default values.
Could not mount SDCard: 16
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "launcher/launcher.py", line 825, in <module>
  File "launcher/launcher.py", line 699, in main_loop
  File "lib/userinput/userinput.py", line 146, in get_new_keys
  File "lib/userinput/userinput.py", line 159, in get_pressed_keys
  File "lib/userinput/_keys.py", line 136, in get_pressed_keys
KeyError: 60

ok so now i got a log, yippe, but uhhhhhhhhhh still an error that i dont understand
EDIT: forgot to note that a "user interface" does show up, but it's just the background and the top status bar thing

@carnitashredder
Copy link

I created this driver file as well as modified the _keys file. Seems like a working example. I replaced the _keys file and added the tca8418 file in my lib.userinput folder. I am new to this and don't know how to contribute properly.
tca8418.py
_keys.py

@TheOddCell
Copy link
Author

@carnitashredder Here's how to GitHub:

  1. Fork this repository using the fork button
  2. In the new repository, add your files into it
  3. It will have a banner at the front page, click contribute
  4. Create a PR
  5. Done!

@carnitashredder
Copy link

@TheOddCell Awesome. Thanks for the tip!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Cardputer For issues related to the Cardputer. enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cardputer adv support

3 participants