### Example Bootloader Log Message Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/HAL/HC32/README.md Observe this log message on serial output during boot to find the application start address if the bootloader provides it. ```text version 1.2 sdio init success! Disk init Tips ------ None Firmware file GotoApp->addr=0xC000 start [...] ``` -------------------------------- ### Setup Motherboard Settings Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/cmake/CMakeLists.txt Configures motherboard settings by reading from Configuration.h. It determines the board and CPU type. ```cmake setup_motherboard(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/../../../Marlin) ``` -------------------------------- ### Register Hardware Platform (Commented Out) Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/cmake/CMakeLists.txt Example of how to register a custom hardware platform. This line is commented out by default. ```cmake #register_hardware_platform(/home/tom/test/Sanguino) ``` -------------------------------- ### Install Pillow Image Library Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/dwin/bin/README.md Installs the Pillow library, a dependency for the DWIN icon tools. Run this command in your terminal. ```sh python3 -m pip install pillow ``` -------------------------------- ### Example Linker Script Memory Regions Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/HAL/HC32/README.md Examine the memory regions in a linker script. The 'ORIGIN' of the 'FLASH' region typically indicates the application start address. ```ld MEMORY { FLASH (rx): ORIGIN = 0x0000C000, LENGTH = 512K OTP (rx): ORIGIN = 0x03000C00, LENGTH = 1020 RAM (rwx): ORIGIN = 0x1FFF8000, LENGTH = 188K RET_RAM (rwx): ORIGIN = 0x200F0000, LENGTH = 4K } ``` -------------------------------- ### Install WQY Bitmap Font Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/fonts/uxggenpages.md Install the WQY 9pt bitmap font on Debian/Ubuntu systems using apt-get. ```bash sudo apt-get install xfonts-wqy ``` -------------------------------- ### Copy Language File Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/fonts/uxggenpages.md Start by copying an existing language header file to create a new one for your target language. ```bash cp language_zh_CN.h language_zh_TW.h ``` -------------------------------- ### Connection SYNC Packet Example Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md An example of a Connection SYNC packet, which consists of a header and no payload. Data structures are little-endian. ```plaintext ADB5 00 0 1 0000 0103 ``` -------------------------------- ### Marlin BFT Protocol Example Query Response Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md An example of a query response from a Marlin BFT client, specifying version 0.1.0 and using heatshrink compression with specific parameters. ```text PFT:version:0.1.0:compression:heatshrink,8,4 ``` -------------------------------- ### Example Marlin BFT SYNC Response Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md An example of a successful SYNC response from a Marlin BFT client, indicating the sync number, buffer size, and protocol version. ```text ss0,96,0.1.0 ``` -------------------------------- ### Finding Vector Table Offset in Source Code Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/HAL/HC32/README.md Search for 'SCB->VTOR' in bootloader source code to locate the line that sets the vector table offset, which often reveals the application start address. ```c SCB->VTOR = ((uint32_t) APP_START_ADDRESS & SCB_VTOR_TBLOFF_Msk); ``` -------------------------------- ### Include Arduino SDK and Marlin CMake functions Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/cmake/CMakeLists.txt Includes necessary CMake files to find the Arduino SDK installation path and load custom Marlin functions. ```cmake include(Arduino_SDK) # Find the intallpath of Arduino SDK ``` ```cmake include(marlin_cmake_functions) ``` -------------------------------- ### MMU3 Basic Communication Example Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md Illustrates a typical sequence of requests and responses between Marlin and MMU3, showing message codes and CRC8 checksums. ```text MMU3:>S0*c6\n MMU3:S1*ad\n MMU3:S2*10\n MMU3:S0*c6\n MMU3:>S0*c6\n MMU3:>S0*c6\n ... ``` -------------------------------- ### Create Working Directory for ICO Files Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/dwin/bin/README.md Sets up a directory to work with ICO files. This involves creating a new folder, copying the ICO file into it, and changing the current directory. ```sh $ mkdir hackicons $ cp 7.ICO hackicons $ cd hackicons ``` -------------------------------- ### Run Single Unit Test Suite with Docker and Make Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/README.md Execute a specific unit test suite for Marlin Firmware using Docker and Make. Replace '' with the desired test suite. ```bash make unit-test-single-local-docker TEST_TARGET= ``` -------------------------------- ### Run All Unit Test Suites with Docker and Make Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/README.md Execute all unit test suites for Marlin Firmware using Docker and Make. This ensures a reproducible testing environment. ```bash make unit-test-all-local-docker ``` -------------------------------- ### Run Single Unit Test Suite with Make Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/README.md Execute a specific unit test suite for Marlin Firmware using Make. Replace '' with the desired test suite. ```bash make unit-test-single-local TEST_TARGET= ``` -------------------------------- ### Run All Unit Test Suites with Make Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/README.md Execute all unit test suites for Marlin Firmware using the Make build system. This provides an alternative to PlatformIO for running tests. ```bash make unit-test-all-local ``` -------------------------------- ### Run Single Unit Test Suite with PlatformIO Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/README.md Execute a specific unit test suite for Marlin Firmware using PlatformIO. Replace '' with the desired test suite. ```bash platformio run -t marlin_ ``` -------------------------------- ### Batch Create ICO Files in Windows Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/dwin/bin/README.md A Windows batch script to create .ICO files from icon folders. It iterates through directories ending with '-icons' and uses `makeico.py` to generate the ICO. ```bat setlocal enabledelayedexpansion for /f %%f in ('dir *-icons /B /O:-D') do set f=%%f & makeico.py %%f !f:~0,-7! ``` -------------------------------- ### Fletchers Checksum Calculation Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md Calculates a 16-bit Fletchers checksum for a packet, excluding the first two bytes (Start Token). This is used for header and full packet integrity checks. ```c++ uint16_t cs = 0; for (size_t i = 2; i> 8) + cslow) % 255) << 8) | cslow; } ``` -------------------------------- ### Marlin BFT Packet Header Structure Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md Defines the structure of the Marlin Binary File Transfer packet header, including Start Token, Sync Number, Protocol ID, Packet Type, Payload Length, and Header Checksum. All data is little-endian. ```plaintext +-------------------------------+---------------+-------+-------+ | Start Token (0xB5AD) | Sync Number | Prot- | Pack- | | | | ocol | et | | | | ID | Type | +-------------------------------+---------------+-------+-------+ | Payload Length | Header Checksum | +-------------------------------+-------------------------------+ ``` -------------------------------- ### Run All Unit Test Suites with PlatformIO Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/README.md Execute all unit test suites for Marlin Firmware using PlatformIO. This is a common method for testing firmware components. ```bash platformio run -t test-marlin ``` -------------------------------- ### Run All Local Build Tests with Docker Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/README.md Execute all local build tests for Marlin Firmware using Docker. This ensures a consistent testing environment. ```bash make tests-config-all-local-docker ``` -------------------------------- ### Run Single Local Build Test with Docker Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/README.md Execute a specific local build test for Marlin Firmware using Docker. Replace '...' with the target test name. ```bash make tests-config-all-local-docker TEST_TARGET=... ``` -------------------------------- ### MMU3 Startup Sequence - Communication Established Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md The MMU3's response indicating that communication has been successfully established after Marlin sends 'S0' commands. ```text MMU3:S1*ad\n MMU3:S2*10\n MMU3: FinishingMoves ``` -------------------------------- ### Configure LCD Language Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/fonts/uxggenpages.md Set the desired language for the LCD by defining the LCD_LANGUAGE macro in the Configuration.h file. ```cpp #define LCD_LANGUAGE zh_TW ``` -------------------------------- ### QUERY Packet Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md Queries the client for protocol details and compression parameters. Expects a response in the format PFT:version:..:compression:(,). ```APIDOC ## QUERY Packet ### Description Queries the client protocol details and compression parameters. ### Method Not applicable (Protocol Packet) ### Endpoint Not applicable (Protocol Packet) ### Request Example ``` QUERY ``` ### Response #### Success Response `PFT:version:..:compression:(,)` ### Response Example ``` PFT:version:0.1.0:compression:heatshrink,8,4 ``` ``` -------------------------------- ### Include Private Libraries in C/C++ Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/lib/readme.txt Include your private libraries using standard C/C++ include directives. Ensure the library headers are correctly placed and discoverable by the preprocessor. ```c #include #include // rest H/C/CPP code ``` -------------------------------- ### Planner Code for Trap Power Calculations Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/Cutter.md This C++ code snippet from the Marlin firmware's planner module calculates and sets parameters for laser power during trapezoidal acceleration and deceleration movements. It ensures minimum power levels and determines incremental power adjustments. ```cpp if (block->laser.power > 0) { NOLESS(block->laser.power, laser_power_floor); block->laser.trap_ramp_active_pwr = (block->laser.power - laser_power_floor) * (initial_rate / float(block->nominal_rate)) + laser_power_floor; block->laser.trap_ramp_entry_incr = (block->laser.power - block->laser.trap_ramp_active_pwr) / accelerate_steps; float laser_pwr = block->laser.power * (final_rate / float(block->nominal_rate)); NOLESS(laser_pwr, laser_power_floor); block->laser.trap_ramp_exit_decr = (block->laser.power - laser_pwr) / decelerate_steps; ``` -------------------------------- ### Generate Arduino Firmware Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/cmake/CMakeLists.txt A custom command to generate the Arduino firmware, typically producing a .hex file. This function is defined elsewhere in the Buildroot system. ```cmake generate_arduino_firmware(${PROJECT_NAME}) ``` -------------------------------- ### Marlin BFT OPEN Packet Success Response Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md Indicates that the file has been successfully opened and is ready to receive data. ```text PFT:success ``` -------------------------------- ### Glob Source Files in Buildroot Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/cmake/CMakeLists.txt Uses file(GLOB_RECURSE) to find all .cpp files in the Marlin directory and includes Marlin.ino. This is useful for compiling libraries not explicitly listed in .cpp files. ```cmake file(GLOB_RECURSE SOURCES "../../../Marlin/*.cpp") set(${PROJECT_NAME}_SRCS "${SOURCES};../../../Marlin/Marlin.ino") ``` -------------------------------- ### Project Definition Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/cmake/CMakeLists.txt Defines the project name as Marlin and specifies C and CXX as the supported languages. ```cmake project(Marlin C CXX) ``` -------------------------------- ### SERIAL_ERROR_START Macro Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/Serial.md Use this macro to prefix serial output lines with 'Error:'. It is intended for error messages and does not add a newline. ```c SERIAL_ERROR_START(); ``` -------------------------------- ### MMU3 Stepper Mode Setting (SpreadCycle) Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md Command to set the MMU3 stepper motor mode to SpreadCycle (M1). Expects no response from the MMU. ```text MMU3:>M1*{CRC8}; MMU3:<---nothing--- ``` -------------------------------- ### MMU3 Toolchange Confirmation - Extruder Grab Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md Marlin command to confirm the filament has been fed to the extruder gears for grabbing. ```text MMU3:>C0*{CRC8}\n ``` -------------------------------- ### Combine Serial Interfaces with Runtime and Conditional Outputs Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/Serial.md Defines a serial interface with two serial outputs, one active at runtime and another switchable. ```cpp typedef MultiSerial< RuntimeSerial, ConditionalSerial > Serial1Class; ``` -------------------------------- ### MMU3 Toolchange Progress - Feeding to FINDA Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md MMU3 response indicating that filament is being fed towards the FINDA sensor during a toolchange. ```text MMU3: FeedingToFinda ``` -------------------------------- ### MMU3 Load Filament Request Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md Marlin command to initiate loading a specific filament into the MMU3 itself. ```text MMU3:>L{Filament index}*{CRC8}\n ``` -------------------------------- ### MMU3 Toolchange Progress - Feeding to Nozzle Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md MMU3 response indicating that filament is being fed towards the nozzle during a toolchange. ```text MMU3: FeedingToNozzle ``` -------------------------------- ### OPEN Packet Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md Opens a file for writing. The payload contains compression settings and the filename. ```APIDOC ## OPEN Packet ### Description Opens a file for writing. The filename and other options are specified in the Packet Payload. ### Method Not applicable (Protocol Packet) ### Endpoint Not applicable (Protocol Packet) ### Parameters #### Payload Fields - **Dummy** (8 bits) - Boolean: If `1`, the client accepts data but does not write it. - **Compression** (8 bits) - Boolean: If `1`, data will be compressed. - **Filename** (...) - String: Null-terminated filename. - **Packet Checksum** (16 bits) - Checksum of header and payload. ### Request Example ``` OPEN ``` ### Response #### Success Response `PFT:success` - File opened and ready for write. #### Error Responses `PFT:fail` - The client couldn't open the file. `PFT:busy` - The file is already open. ``` -------------------------------- ### MMU3 FINDA Status Response (Not Loaded) Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md MMU3 response indicating that filament is not loaded to the extruder (FINDA status is 0). ```text MMU3:, BaseSerial >, MultiSerial< BaseSerial, BaseSerial, 2, 1>, 0, 2> Serial1Class; ``` -------------------------------- ### MMU3 FINDA Status Response (Loaded) Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md MMU3 response indicating that filament is loaded to the extruder (FINDA status is 1). ```text MMU3:,,.. ``` | Value | Description | | --- | --- | | SYNC | The current Sync Number, this should be used in the next packet sent and incremented by 1 for each packet sent after. | | BUFFER_SIZE | The client buffer size. Packet Payload Length must not exceed this value. | | VERSION_MAJOR | The major version number of the client Marlin BFT protocol, e.g., `0`. | | VERSION_MINOR | The minor version number of the client Marlin BFT protocol, e.g., `1`. | | VERSION_PATCH | The patch version number of the client Marlin BFT protocol, e.g., `0`. | Example response: ``` ss0,96,0.1.0 ``` ``` -------------------------------- ### Split ICO File into JPEGs using splitIco.py Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/dwin/bin/README.md Extracts individual JPEG images from an ICO file and saves them into a specified directory. The script reports details for each extracted icon. ```sh $ ./bin/splitIco.py 7.ICO icons-7 ``` ```text Splitting 7.ICO into dir icons-7 Splitting Entry Data... 00: offset: 0x001000 len: 0x10a2 width: 130 height: 17 Wrote 4258 bytes to icons-7/000-ICON_LOGO.jpg 01: offset: 0x0020a2 len: 0x0eac width: 110 height: 100 Wrote 3756 bytes to icons-7/001-ICON_Print_0.jpg 02: offset: 0x002f4e len: 0x0eaa width: 110 height: 100 Wrote 3754 bytes to icons-7/002-ICON_Print_1.jpg ... 91: offset: 0x0345fc len: 0x0d89 width: 110 height: 100 Wrote 3465 bytes to icons-7/091-ICON_Info_1.jpg ``` -------------------------------- ### Marlin Command Queue Flowchart Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/Queue.md This flowchart illustrates the data flow within Marlin's G-code command processing, from host input through serial buffering to the G-code processor. ```mermaid graph TD subgraph Marlin's GCodeQueue SerialState[SerialState NUM_SERIAL] RingBuffer[RingBuffer BUF_SIZE] LineBuffer[Line buffer] SerialState --> RingBuffer RingBuffer --> LineBuffer end subgraph Marlin GCodeProcessor[G-Code processor] end Host --> PlatformSerialBuffer[Platform serial's buffer] PlatformSerialBuffer -- On EOL --> RingBuffer RingBuffer -- r_pos --> GCodeProcessor RingBuffer -- w_pos --> GCodeProcessor LineBuffer -- MAX_CMD_SIZE --> GCodeProcessor GCodeProcessor --> Marlin PlatformSerialBuffer -- R/TX_BUFFER_SIZE --> Marlin ``` -------------------------------- ### Simplified MultiSerial Representation Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/Serial.md A simplified representation of a nested MultiSerial configuration, illustrating offset and step parameters. ```cpp MS< A = MS, B=MS, offset=0, step=2> ``` -------------------------------- ### Set Arduino Toolchain File Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/cmake/CMakeLists.txt Specifies the CMake toolchain file for Arduino compilation. ```cmake set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/marlin-cmake/toolchain/ArduinoToolchain.cmake) # Arduino Toolchain ``` -------------------------------- ### MMU3 Load Filament Query Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md Marlin queries the MMU3 status after initiating filament load. ```text MMU3:>Q0*{CRC8}\n ``` -------------------------------- ### Define Arduino Upload Port Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/cmake/CMakeLists.txt Sets the upload port for the Arduino. It can be overridden from the command line using -DUPLOAD_PORT=/dev/ttyACM0. Defaults to /dev/ttyACM0 if not specified. ```cmake if(UPLOAD_PORT) set(${PROJECT_NAME}_PORT ${UPLOAD_PORT}) else() set(${PROJECT_NAME}_PORT /dev/ttyACM0) endif() ``` -------------------------------- ### SERIAL_ECHOPGM_P Macro Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/Serial.md Similar to SERIAL_ECHOPGM, but specifically designed to handle PGM (Program Memory) strings along with values. ```c SERIAL_ECHOPGM_P(GET_TEXT(MSG_HELLO), 123); ``` -------------------------------- ### MMU3 Toolchange Request Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/Marlin/src/feature/mmu3/mmu3-serial-protocol.md Marlin requests the MMU3 to load a specific filament index for a toolchange. ```text MMU3:>T{Filament index}*{CRC8}\n ``` -------------------------------- ### Marlin BFT WRITE Packet IO Error Response Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md Indicates a storage device failure on the client during a WRITE operation. ```text PFT:ioerror ``` -------------------------------- ### Generate Font Data for Specific Languages Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/fonts/uxggenpages.md Use the genallfont.sh script to generate font data for specified languages. Set the MARLIN_LANGS environment variable to a space-separated list of language codes. ```bash cd marlin-git/Marlin/ MARLIN_LANGS="zh_CN zh_TW" ../buildroot/share/fonts/genallfont.sh ``` -------------------------------- ### Bresenham's Integer-Only Line Algorithm Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/Bresenham.md This is the optimized integer-only version of Bresenham's algorithm. It avoids floating-point calculations by using an integer error variable and bit shifts for multiplication by 2, making it highly efficient for raster graphics. ```pseudocode ε' = 0, y = y[1] for x = x1 to x2 do Plot point at (x,y) if (2.(ε' + Δy) < Δx) ε' = ε' + Δy else y = y + 1, ε' = ε' + Δy - Δx endif endfor ``` -------------------------------- ### Marlin BFT Protocol Query Response Format Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/docs/BinaryFileTransferProtocol.md This is the expected format for a successful query response from the Marlin BFT client, indicating protocol version and compression details. ```text PFT:version:..:compression:(,) ``` -------------------------------- ### Generate Font Data with Custom Font Source: https://github.com/doctorthompson/marlinfirmware/blob/bugfix-2.1.x/buildroot/share/fonts/uxggenpages.md When using a custom font, specify its path as an argument to the genallfont.sh script to generate language font data using that font. ```bash cd Marlin/ ../buildroot/share/fonts/genallfont.sh ./newfont.bdf ```