Development

Contributing guidelines

  • This is a learning project.

  • People have different usage scenarios, UI preferences, etc. It is not possible to fit everything into a single firmware.

  • All feature requests, ideas, observations, questions and answers should go into the Discussions section.

  • Issues should be used only for bugs and planned tasks.

  • Pull Requests are not guaranteed to be accepted, unless the maintainer(s) consider them suitable for the majority of users. Documentation, bugfixes and code quality improvements are usually welcome! If in doubt, please propose your contribution as a Discussion first.

  • You are encouraged to make your own custom firmware forks! Feel free to share a link to your firmware version in the Discussions. Interesting features or color themes might be included into the ATS Mini firmware.

Video tutorial

A short video tutorial on how to build a custom firmware version:

Compiling the source code

  1. Install Arduino CLI.

  2. Go to the repository root folder

  3. Compile and flash the firmware

arduino-cli compile --clean -e -p COM_PORT -u ats-mini

Compile-time options

The available options are:

  • DISABLE_REMOTE - disable remote control over the USB-serial port

  • THEME_EDITOR - enable the color theme editor

  • ENABLE_HOLDOFF - enable delayed screen update while tuning

To set an option, add the --build-property command line argument like this:

arduino-cli compile --build-property "compiler.cpp.extra_flags=-DTHEME_EDITOR -DENABLE_HOLDOFF" --clean -e -p COM_PORT -u ats-mini

Enabling the pre-commit hooks

  1. Install uv https://docs.astral.sh/uv/getting-started/installation/

  2. Run uv sync

  3. run uv run pre-commit install --install-hooks

Using the make command

You can do all of the above using the make command as well:

THEME_EDITOR=1 ENABLE_HOLDOFF=1 PORT=/dev/tty.usbmodem14401 make upload

Adding a changelog entry

  1. Install uv https://docs.astral.sh/uv/getting-started/installation/

  2. Run uv sync

  3. Create an entry:

    uv run towncrier create --edit ID.CATEGORY.md
    

    ID is an issue or a PR number, or +STRING if there is no issue/PR. CATEGORY is one of added, changed, fixed, etc. see the tool.towncrier.type sections in the pyproject.toml for the full list.

Improving the documentation

  1. Install uv https://docs.astral.sh/uv/getting-started/installation/

  2. Run uv sync

  3. Run a local webserver uv run sphinx-autobuild docs/source docs/build and open the http://127.0.0.1:8000 in a browser

  4. Edit the Markdown files in docs/source folder and immediately see your changes reflected in the browser

Release process

  1. Bump the APP_VERSION constant in the Common.h file

  2. If the new version has a different EEPROM layout, bump the EEPROM_VERSION as well (it will force the EEPROM reset)

  3. Generate the CHANGELOG.md by running uv run towncrier build --version X.XX

  4. Add and commit the changes with a message like “Release X.XX”, then push them to the repository

  5. Once the build is complete, download, flash and test it!

  6. Tag the release and push the tag git tag -a vX.XX -m 'Version X.XX' && git push --follow-tags (the tag should start with v!)