Contributing and Porting to the Core ==================================== First of all, thank you for contributing to the project. It's a lot of work keeping up with all the different uses of the RP2040, so the more people working on the code, the better. Your assistance can help the project succeed. Contributing to the Core (Pull Requests) ---------------------------------------- We use the standard GitHub Pull Request model. If you're unfamiliar with it, this `guide `__ gives a simple overview of the process. All pull requests have to pass a set of Continuous Integration (CI) checks which help make sure the code compiles under different configurations and has no spelling or style errors. Tips for a Good Pull Request (PR) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ All code in the core and libraries, except for INO sketches, uses a 4-space indent with cuddled brackets. When in doubt, copy your formatting from the surrounding code. You should install ``astyle`` and run ``tests/restyle.sh`` on your machine before committing and pushing any pull requests to ensure the formatting is correct. Describe the change you're proposing and why it's important in your ``git commit`` message. If it fixes an open issue, place ``Fixes #xxxx`` (where xxxx is the issue number) in the message to link the two. Try and only change one thing per pull request. That makes it easier to review and prioritize. Opening up a separate PR per change also helps keep track of them when release messages are generated. Adding a New Board ------------------ Adding a new board requires: * Updated ``tools/makeboards.py`` script * Updated ``boards.txt`` file, generated by ``makeboard.py`` * Updated ``package_pico_index.template.json`` file, generated by ``makeboard.py`` * New ``tools/json/BOARD_NAME.json`` board file for Platform.IO * New ``variants/BOARD_NAME/pins_arduino.h`` header defining the I/O pins To add a new RP2040 board you will need to update the ``tools/makeboards.py`` script. Do *NOT* manually edit ``boards.txt``, that file is machine generated. You will need to add a ``MakeBoard`` call at the end of the file. Please be sure to add your board so that it sorts alphabetically, starting with the company name and then the board name. Otherwise it is hard to find a specific board in the menu. Run ``python3 tools/makeboards.py`` to update the ``boards.txt`` file and generate a Platform.IO JSON file in the ``tools/json`` directory. Create a folder called ``variants/BOARD_NAME`` and place in a ``pins_arduino.h`` file in it that contains your default pin name mapping (i.e. SPI0/1 pins, UART pins, LED_DEFAULT, etc.). Copying one of the existing ones as a template can make this task much simpler. In your ``git commit`` be sure to add the newly generated ``tools/json/XXX.json`` file as well as the modified ``makeboards`` script and ``boards.txt``, the new ``pins_arduino.h`` header you generated, and the Arduino packaging JSON ``package/package_pico_index.template.json``. You should also add a note in the ``README.md`` file listing your new board. Submit the updated commit as a PR and, if all goes well, your board will be in on the next core release. Porting Libraries and Applications to the Core ---------------------------------------------- We try and follow Arduino standards so, with luck, porting to this core should be relatively straightforward. The ``WiFi`` library and associates support libraries like ``WebServer`` are modeled after the ESP32 and ESP8266 versions of those libraries, combined with the "standard" Arduino ``WiFi`` one. Compiler Defines for Porting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you are adding RP2040 support to an existing library and need to isolate code that only runs on this core, use the following define. .. code:: cpp #if defined(ARDUINO_ARCH_RP2040) && !defined(__MBED__) ~~~ your changes ~~~ #endif Library Architectures ~~~~~~~~~~~~~~~~~~~~~ After adding support in the code, libraries need their ``library.properties`` and ``library.json`` files updated to indicate support, or the IDE will not know your new code is compatible here. Add ``rp2040`` to ``architectures`` (in ``library.properties``) and ``"rp2040"`` to ``platforms[]`` (in ``library.json``) to let the tools know.