### CMake Core Library Setup Source: https://github.com/air-duino/arduino-airmcu/blob/main/cores/AirMCU/CMakeLists.txt Configures the CMake build system for the Arduino AirMCU core library. It defines interface libraries for usage and linking, and a static library for the core binary components. ```cmake cmake_minimum_required(VERSION 3.21) add_library(core INTERFACE) add_library(core_usage INTERFACE) target_include_directories(core_usage INTERFACE . ) target_link_libraries(core_usage INTERFACE base_config ) target_link_libraries(core INTERFACE core_usage) add_library(core_bin STATIC EXCLUDE_FROM_ALL abi.cpp avr/dtostrf.c board.c core_debug.c HardwareSerial.cpp hooks.c IPAddress.cpp itoa.c main.cpp pins_arduino.c Print.cpp RingBuffer.cpp air/startup_airyyxx.S Stream.cpp Tone.cpp USBSerial.cpp VirtIOSerial.cpp WInterrupts.cpp wiring_analog.c wiring_digital.c wiring_pulse.cpp wiring_shift.c wiring_time.c WMath.cpp WSerial.cpp WString.cpp ) target_link_libraries(core_bin PUBLIC core_usage) target_link_libraries(core INTERFACE core_bin ) ``` -------------------------------- ### SoftwareSerial Library Setup Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/SoftwareSerial/CMakeLists.txt Defines interface libraries for SoftwareSerial and its usage, including include directories and linking to base configuration. This setup is crucial for managing dependencies and include paths for the SoftwareSerial component. ```cmake cmake_minimum_required(VERSION 3.21) add_library(SoftwareSerial INTERFACE) add_library(SoftwareSerial_usage INTERFACE) target_include_directories(SoftwareSerial_usage INTERFACE src ) target_link_libraries(SoftwareSerial_usage INTERFACE base_config ) target_link_libraries(SoftwareSerial INTERFACE SoftwareSerial_usage) ``` -------------------------------- ### Example Usage of STM32 SPI CS Management Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/SPI/README.md Demonstrates how to use the new SPI library functions to manage multiple CS pins for different devices, including initialization, transaction setup, data transfer, and cleanup. ```C++ SPI.begin(2); //Enables the SPI instance with default settings and attaches the CS pin SPI.beginTransaction(1, settings); //Attaches another CS pin and configure the SPI instance with other settings SPI.transfer(1, 0x52); //Transfers data to the first device SPI.transfer(2, 0xA4); //Transfers data to the second device. The SPI instance is configured with the right settings SPI.end() //SPI instance is disabled ``` -------------------------------- ### CMake: SPI Interface Library Setup Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/SPI/CMakeLists.txt Defines an interface library 'SPI' and a usage interface library 'SPI_usage' for SPI communication. It specifies include directories and links against 'base_config'. The 'SPI' library also links against 'SPI_usage'. ```cmake cmake_minimum_required(VERSION 3.21) add_library(SPI INTERFACE) add_library(SPI_usage INTERFACE) target_include_directories(SPI_usage INTERFACE src ) target_link_libraries(SPI_usage INTERFACE base_config ) target_link_libraries(SPI INTERFACE SPI_usage) ``` -------------------------------- ### Boot Connection Options Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Defines the boot connection methods for uploading firmware. Options include a default ISP circuit and a direct connection, each associated with a specific bootloader command. ```properties Air401Dev.menu.BootConnection.defaule=default isp circuit Air401Dev.menu.BootConnection.defaule.upload.boot=default_reset Air401Dev.menu.BootConnection.direct=direct connect Air401Dev.menu.BootConnection.direct.upload.boot=direct_connect ``` -------------------------------- ### EEPROM Get and Put Objects Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/EEPROM/README.md Illustrates retrieving and storing complex objects in the EEPROM using EEPROM.get() and EEPROM.put(). The put() method uses the update() logic internally. ```Arduino // Define an object to store MyObject data; // Get an object from EEPROM address 10 EEPROM.get(10, data); // Put an object to EEPROM address 10 EEPROM.put(10, data); ``` -------------------------------- ### SoftwareSerial Methods and Functions Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/SoftwareSerial/keywords.txt Lists the core methods and functions available for interacting with SoftwareSerial objects. These include initialization, data transfer, and status checks. ```arduino begin KEYWORD2 end KEYWORD2 read KEYWORD2 write KEYWORD2 available KEYWORD2 isListening KEYWORD2 overflow KEYWORD2 flush KEYWORD2 listen KEYWORD2 peek KEYWORD2 ``` -------------------------------- ### Pre and Post Build Hooks Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines patterns for pre-build hooks using shell scripts for different operating systems. ```bash # Pre and post build hooks build.opt.name=build.opt build.opt.path={build.path}/sketch/{build.opt.name} extras.path={build.system.path} # Create {build.opt} if not exists in the output sketch dir and force include of SrcWrapper library recipe.hooks.prebuild.1.pattern=bash "{extras.path}/extras/prebuild.sh" "{build.path}" "{build.source.path}" "{runtime.platform.path}" recipe.hooks.prebuild.1.pattern.windows="{extras.path}\extras\prebuild.bat" "{build.path}" "{build.source.path}" "{runtime.platform.path}" ``` -------------------------------- ### Include EEPROM Library Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/EEPROM/README.md Includes the EEPROM library header file to enable its functionality in an Arduino sketch. This is the first step to using the library. ```Arduino #include void setup(){ } void loop(){ } ``` -------------------------------- ### Boot Connection Methods Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Defines the methods for connecting to the bootloader, including a default ISP circuit and a direct connection method. ```ini Air32F103xx.menu.BootConnection.defaule=default isp circuit Air32F103xx.menu.BootConnection.defaule.upload.boot=default_reset Air32F103xx.menu.BootConnection.direct=direct connect Air32F103xx.menu.BootConnection.direct.upload.boot=direct_connect ``` -------------------------------- ### CMake Build Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/EEPROM/CMakeLists.txt Sets up the CMake build environment, specifying the minimum required version and defining interface libraries for EEPROM and EEPROM usage. It configures include directories and links necessary libraries, including the EEPROM_bin object library. ```cmake cmake_minimum_required(VERSION 3.21) add_library(EEPROM INTERFACE) add_library(EEPROM_usage INTERFACE) target_include_directories(EEPROM_usage INTERFACE src ) target_link_libraries(EEPROM_usage INTERFACE base_config ) target_link_libraries(EEPROM INTERFACE EEPROM_usage) add_library(EEPROM_bin OBJECT EXCLUDE_FROM_ALL src/utility/air_eeprom.c ) target_link_libraries(EEPROM_bin PUBLIC EEPROM_usage) target_link_libraries(EEPROM INTERFACE EEPROM_bin $ ) ``` -------------------------------- ### AirISP Uploader Tool Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Configures the AirISP tool, including its path, command, and Windows executable name. ```APIDOC # Uploader tool # ------------------- ## ## AirISP ## tools.AirISP.path={runtime.tools.AirISP.path} tools.AirISP.cmd=AirISP-next tools.AirISP.cmd.windows=AirISP-next.exe ``` -------------------------------- ### Archive Creation Pattern Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines the pattern for creating static archives from object files. ```bash ## Create archives recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}" ``` -------------------------------- ### Boot Connection Methods Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Defines different methods for connecting to the bootloader for firmware uploads. This includes the default ISP circuit and direct connection methods. ```arduino Air001Dev.menu.BootConnection.defaule=default isp circuit Air001Dev.menu.BootConnection.defaule.upload.boot=default_reset Air001Dev.menu.BootConnection.direct=direct connect Air001Dev.menu.BootConnection.direct.upload.boot=direct_connect ``` -------------------------------- ### Compiler Paths and Commands Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines the paths to the compiler tools and the commands used for compiling, assembling, linking, and converting object files. These are essential for the build process. ```APIDOC compiler.path={runtime.tools.xpack-arm-none-eabi-gcc.path}/bin/ compiler.S.cmd=arm-none-eabi-gcc compiler.c.cmd=arm-none-eabi-gcc compiler.cpp.cmd=arm-none-eabi-g++ compiler.ar.cmd=arm-none-eabi-ar compiler.elf.cmd=arm-none-eabi-g++ compiler.c.elf.cmd=arm-none-eabi-g++ compiler.objcopy.cmd=arm-none-eabi-objcopy compiler.elf2hex.cmd=arm-none-eabi-objcopy ``` -------------------------------- ### Debug Configuration Settings Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines the parameters for debugging the Air-duino project. This includes the path to the executable ELF file, the toolchain used (GCC), its path and prefix, and the debug server (PyOCD). It also specifies PyOCD-specific settings like script directories, CMSIS pack path, and target ID. ```APIDOC debug.executable={build.path}/{build.project_name}.elf - Specifies the path to the executable file for debugging. debug.toolchain=gcc - Sets the toolchain to GCC. debug.toolchain.path={compiler.path} - Defines the installation path for the GCC toolchain. debug.toolchain.prefix=arm-none-eabi- - Sets the prefix for the GCC toolchain executables. debug.server=pyocd - Selects PyOCD as the debug server. debug.server.pyocd.path= - Path to the PyOCD executable (if not in system PATH). debug.server.pyocd.scripts_dir= - Directory containing PyOCD scripts. debug.server.pyocd.script= - Specific PyOCD script to use. debug.server.pyocd.cmsisPack="D:\\GitHub\\luatos-soc-air001\\PACK\\Keil.AIR001_DFP.1.1.0.pack" - Path to the CMSIS pack file required by PyOCD for the target. debug.server.pyocd.targetId="Air001Dev" - The identifier for the target hardware board. ``` -------------------------------- ### Binary Output Pattern Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines the pattern for converting the ELF executable to a binary file using objcopy. ```bash ## Create output (.bin file) recipe.objcopy.bin.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.elf2bin.flags} {compiler.elf2bin.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.bin" ``` -------------------------------- ### Build Definitions and Overrides Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines core build macros and provides mechanisms for overriding these settings via `boards.txt` or `platform.local.txt` for customization. ```APIDOC compiler.define=-DARDUINO= # Overrides from boards.txt build.board= build.air_extra_flags= build.extra_flags= build.bootloader_flags= build.ldscript=ldscript.ld build.variant_h=variant_generic.h # Overrides from platform.local.txt compiler.c.air_extra_flags={build.peripheral_pins} compiler.c.extra_flags= compiler.c.std=gnu17 compiler.c.elf.extra_flags= compiler.cpp.extra_flags= compiler.cpp.std=gnu++17 compiler.S.air_extra_flags={build.startup_file} compiler.S.extra_flags= compiler.ar.extra_flags= compiler.elf2bin.extra_flags= compiler.elf2hex.extra_flags= ``` -------------------------------- ### EEPROM Begin Function Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/EEPROM/README.md Initializes the EEPROM access and returns an EEPtr pointing to the first cell. This is useful for iterating through the EEPROM using C++11 range-based for loops or other iterator patterns. ```Arduino EEPtr startPtr = EEPROM.begin(); ``` -------------------------------- ### AirM2M Air001 Board Boot Connection Options Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Configures the boot connection method for the AirM2M Air001 board, allowing selection between default ISP circuit and direct connect. ```ini AirM2M_Air001_Board.menu.BootConnection.defaule=default isp circuit AirM2M_Air001_Board.menu.BootConnection.defaule.upload.boot=default_reset AirM2M_Air001_Board.menu.BootConnection.direct=direct connect AirM2M_Air001_Board.menu.BootConnection.direct.upload.boot=direct_connect ``` -------------------------------- ### SrcWrapper Syntax Coloring Map Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/SrcWrapper/keywords.txt Defines the syntax coloring map for SrcWrapper, categorizing keywords, methods, functions, and constants. ```text ####################################### # Syntax Coloring Map For SrcWrapper ####################################### ####################################### # Datatypes (KEYWORD1) ####################################### ####################################### # Methods and Functions (KEYWORD2) ####################################### ####################################### # Constants (LITERAL1) ####################################### ``` -------------------------------- ### CMake: SPI Binary Library and Object Linking Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/SPI/CMakeLists.txt Creates an object library 'SPI_bin' from source files and links it to the 'SPI_usage' interface library. The main 'SPI' interface library is then linked against both 'SPI_bin' and its target objects using $. ```cmake add_library(SPI_bin OBJECT EXCLUDE_FROM_ALL src/SPI.cpp src/utility/spi_com.c ) target_link_libraries(SPI_bin PUBLIC SPI_usage) target_link_libraries(SPI INTERFACE SPI_bin $ ) ``` -------------------------------- ### EEPROM Methods and Functions Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/EEPROM/keywords.txt Defines syntax coloring for EEPROM methods and functions. The 'update' method is categorized as KEYWORD2. ```arduino update KEYWORD2 ``` -------------------------------- ### Include Paths and Warning Flags Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Specifies the include paths for project-specific headers and defines various levels of warning flags that can be applied during compilation. ```APIDOC # Include paths compiler.air.extra_include="-I{build.source.path}" "-I{build.core.path}/avr" "-I{build.core.path}/air" "-I{build.core.path}/air/LL" "-I{build.core.path}/air/usb" "-I{build.core.path}/air/usb/hid" "-I{build.core.path}/air/usb/cdc" {build.virtio_extra_include} {build.drivers_include} # Warning flags compiler.warning_flags=-w compiler.warning_flags.none=-w compiler.warning_flags.default= compiler.warning_flags.more=-Wall compiler.warning_flags.all=-Wall -Wextra ``` -------------------------------- ### Configure Air32F103CB Board Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR32F103/F103CB/boards_entry.txt This snippet defines the configuration for the Air32F103CB board variant. It sets the menu entry, maximum upload size, product line, and board/variant identifiers for the Arduino IDE. ```arduino Air32F103xx.menu.pnum.AIR32F103CB=Air32F103CBT6 Air32F103xx.menu.pnum.AIR32F103CB.upload.maximum_size=131072 Air32F103xx.menu.pnum.AIR32F103CB.build.product_line=AIR32F103xB Air32F103xx.menu.pnum.AIR32F103CB.build.board=AIR32F103CB Air32F103xx.menu.pnum.AIR32F103CB.build.variant=AIR32F103/F103CB ``` -------------------------------- ### Servo Library Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/Servo/CMakeLists.txt Defines the Servo interface library and its usage, including include directories and linking to base configuration. It also links the Servo binary library and its target objects. ```cmake cmake_minimum_required(VERSION 3.21) add_library(Servo INTERFACE) add_library(Servo_usage INTERFACE) target_include_directories(Servo_usage INTERFACE src ) target_link_libraries(Servo_usage INTERFACE base_config ) target_link_libraries(Servo INTERFACE Servo_usage) add_library(Servo_bin OBJECT EXCLUDE_FROM_ALL src/stm32/Servo.cpp ) target_link_libraries(Servo_bin PUBLIC Servo_usage) target_link_libraries(Servo INTERFACE Servo_bin $ ) ``` -------------------------------- ### SoftwareSerial Binary Library Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/SoftwareSerial/CMakeLists.txt Creates an object library for the SoftwareSerial binary, linking it with the SoftwareSerial usage library. This snippet demonstrates how to build a specific binary component and manage its public dependencies. ```cmake add_library(SoftwareSerial_bin OBJECT EXCLUDE_FROM_ALL src/SoftwareSerial.cpp ) target_link_libraries(SoftwareSerial_bin PUBLIC SoftwareSerial_usage) target_link_libraries(SoftwareSerial INTERFACE SoftwareSerial_bin $ ) ``` -------------------------------- ### Debugger Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt General options for debugger configuration. ```APIDOC # Debugger configuration (general options) ``` -------------------------------- ### AirM2M Air001 Board Build Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Defines the core, MCU, series, and related build flags for the AirM2M Air001 board. Includes include paths for drivers and CMSIS libraries. ```ini AirM2M_Air001_Board.build.core=AirMCU AirM2M_Air001_Board.build.board=AirM2M_Air001_Board AirM2M_Air001_Board.build.mcu=cortex-m0plus AirM2M_Air001_Board.build.series=AIR001xx AirM2M_Air001_Board.build.cmsis_lib_gcc=arm_cortexM0l_math AirM2M_Air001_Board.build.product_line=AIR001 AirM2M_Air001_Board.build.variant=AIR001/AirM2M_Air001_Board AirM2M_Air001_Board.build.air_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} AirM2M_Air001_Board.build.drivers_include="-I{build.system.path}/Air001-Drivers/{build.series}_HAL_Driver/Inc" "-I{build.system.path}/Air001-Drivers/{build.series}_HAL_Driver/Src" "-I{build.system.path}/{build.series}" "-I{build.system.path}/Air001-Drivers/CMSIS/Device/{build.series}/Include/" "-I{build.system.path}/Air001-Drivers/CMSIS/Device/{build.series}/Source/gcc/" AirM2M_Air001_Board.build.extra_flags=-DAIR001xx_HSE_24M_HCLK_48M -DF_CPU=48000000 -DAIR001xx_LSC_LSI -DVDD_3V3 -DAIR001_DEV ``` -------------------------------- ### Variant Binary Library Definition Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR401/AIR401_DEV/CMakeLists.txt Defines a static library named 'variant_bin' which is excluded from all targets by default. It lists the source files and links the 'variant_usage' library. ```cmake add_library(variant_bin STATIC EXCLUDE_FROM_ALL generic_clock.c PeripheralPins.c variant_generic.cpp ) target_link_libraries(variant_bin PUBLIC variant_usage) target_link_libraries(variant INTERFACE variant_bin ) ``` -------------------------------- ### Variant Binary Library Definition Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR001/AirM2M_Air001_Board/CMakeLists.txt Defines a static library named 'variant_bin' which is excluded from all targets by default. It lists the source files and links the 'variant_usage' library. ```cmake add_library(variant_bin STATIC EXCLUDE_FROM_ALL generic_clock.c PeripheralPins.c variant_generic.cpp ) target_link_libraries(variant_bin PUBLIC variant_usage) target_link_libraries(variant INTERFACE variant_bin ) ``` -------------------------------- ### Optimization Options Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Specifies different compiler optimization levels, including standard and Link-Time Optimization (LTO) variants. Options range from smallest size (-Os) to fastest (-O3), with debug (-Og) and no optimization (-O0) also available. ```properties Air401Dev.menu.opt.osstd=Smallest (-Os default) Air401Dev.menu.opt.oslto=Smallest (-Os) with LTO Air401Dev.menu.opt.oslto.build.flags.optimize=-Os -flto Air401Dev.menu.opt.o1std=Fast (-O1) Air401Dev.menu.opt.o1std.build.flags.optimize=-O1 Air401Dev.menu.opt.o1lto=Fast (-O1) with LTO Air401Dev.menu.opt.o1lto.build.flags.optimize=-O1 -flto Air401Dev.menu.opt.o2std=Faster (-O2) Air401Dev.menu.opt.o2std.build.flags.optimize=-O2 Air401Dev.menu.opt.o2lto=Faster (-O2) with LTO Air401Dev.menu.opt.o2lto.build.flags.optimize=-O2 -flto Air401Dev.menu.opt.o3std=Fastest (-O3) Air401Dev.menu.opt.o3std.build.flags.optimize=-O3 Air401Dev.menu.opt.o3lto=Fastest (-O3) with LTO Air401Dev.menu.opt.o3lto.build.flags.optimize=-O3 -flto Air401Dev.menu.opt.ogstd=Debug (-Og) Air401Dev.menu.opt.ogstd.build.flags.optimize=-Og Air401Dev.menu.opt.o0std=No Optimization (-O0) Air401Dev.menu.opt.o0std.build.flags.optimize=-O0 ``` -------------------------------- ### Arduino SPI Library - Core Components Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/SPI/keywords.txt This snippet outlines the fundamental elements of the Arduino SPI library, including the main SPI data type, common methods for initializing and controlling SPI communication, and constants used for configuring SPI modes and transfer behaviors. ```arduino ####################################### # Syntax Coloring Map SPI ####################################### ####################################### # Datatypes (KEYWORD1) ####################################### SPI KEYWORD1 ####################################### # Methods and Functions (KEYWORD2) ####################################### begin end transfer setDataMode setClockDivider setMISO setMOSI setSCLK setSSEL KEYWORD2 ####################################### # Constants (LITERAL1) ####################################### SPI_MODE0 SPI_MODE1 SPI_MODE2 SPI_MODE3 SPI_CONTINUE SPI_LAST LITERAL1 ``` -------------------------------- ### CMake Build Configuration for Air-duino Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR401/AIR401_DEV/CMakeLists.txt Sets the minimum CMake version and defines interface libraries for variant usage and core variant functionality. It also configures include directories and links necessary libraries. ```cmake cmake_minimum_required(VERSION 3.21) add_library(variant INTERFACE) add_library(variant_usage INTERFACE) target_include_directories(variant_usage INTERFACE . ) target_link_libraries(variant_usage INTERFACE base_config ) target_link_libraries(variant INTERFACE variant_usage) ``` -------------------------------- ### CMake Build Configuration for Air-duino Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR32F103/F103CB/CMakeLists.txt Sets the minimum CMake version and defines interface libraries for variant usage and core variant functionality. It also configures include directories and links necessary libraries. ```cmake cmake_minimum_required(VERSION 3.21) add_library(variant INTERFACE) add_library(variant_usage INTERFACE) target_include_directories(variant_usage INTERFACE . ) target_link_libraries(variant_usage INTERFACE base_config ) target_link_libraries(variant INTERFACE variant_usage) ``` -------------------------------- ### Variant Binary Library Definition Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR001/AIR001_DEV/CMakeLists.txt Defines a static library named 'variant_bin' which is excluded from all targets by default. It lists the source files and links the 'variant_usage' library. ```cmake add_library(variant_bin STATIC EXCLUDE_FROM_ALL generic_clock.c PeripheralPins.c variant_generic.cpp ) target_link_libraries(variant_bin PUBLIC variant_usage) target_link_libraries(variant INTERFACE variant_bin ) ``` -------------------------------- ### Build Configuration Defaults Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Sets default build options such as serial module enablement, USB speed, floating-point ABI, and optimization flags. ```bash # Defaults config 默认的配置 build.xSerial=-DHAL_UART_MODULE_ENABLED build.enable_usb= build.usb_speed= build.enable_virtio= build.peripheral_pins= build.startup_file= build.fpu= build.float-abi= build.flags.optimize=-Os build.flags.debug=-DNDEBUG build.flags.ldspecs=--specs=nano.specs build.flash_offset=0 ``` -------------------------------- ### Servo Datatype and Methods Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/Servo/keywords.txt Defines the Servo datatype and its associated methods for controlling servo motors. Includes keywords for syntax highlighting. ```arduino #define KEYWORD1 Servo #define KEYWORD2 attach, detach, write, read, attached, writeMicroseconds, readMicroseconds Servo Servo; // Example Usage: // servo.attach(pin); // servo.write(angle); // int currentAngle = servo.read(); // servo.detach(); ``` -------------------------------- ### AirISP Burn Bootloader Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Configuration for burning the bootloader using the AirISP tool via serial protocol. ```APIDOC ## Burn Bootloader ## --------------- tools.AirISP.bootloader.protocol=serial tools.AirISP.bootloader.params.verbose= tools.AirISP.bootloader.params.quiet= tools.AirISP.bootloader.pattern= ``` -------------------------------- ### Upload Speed Options Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Configures available upload speeds for the Air32F103xx board, allowing users to select from various baud rates. ```ini Air32F103xx.menu.UploadSpeed.115200=115200 Air32F103xx.menu.UploadSpeed.115200.upload.speed=115200 Air32F103xx.menu.UploadSpeed.57600=57600 Air32F103xx.menu.UploadSpeed.57600.upload.speed=57600 Air32F103xx.menu.UploadSpeed.38400=38400 Air32F103xx.menu.UploadSpeed.38400.upload.speed=38400 Air32F103xx.menu.UploadSpeed.19200=19200 Air32F103xx.menu.UploadSpeed.19200.upload.speed=19200 Air32F103xx.menu.UploadSpeed.9600=9600 Air32F103xx.menu.UploadSpeed.9600.upload.speed=9600 Air32F103xx.menu.UploadSpeed.4800=4800 Air32F103xx.menu.UploadSpeed.4800.upload.speed=4800 Air32F103xx.menu.UploadSpeed.2400=2400 Air32F103xx.menu.UploadSpeed.2400.upload.speed=2400 Air32F103xx.menu.UploadSpeed.1200=1200 Air32F103xx.menu.UploadSpeed.1200.upload.speed=1200 ``` -------------------------------- ### AirISP Program Application Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines the pattern and arguments for programming the application using the AirISP tool. ```APIDOC ## Program Application ## ------------------- tools.AirISP.program.params.verbose= tools.AirISP.program.params.quiet= tools.AirISP.program.pattern_args=--chip "auto" --port "{serial.port}" --baud {upload.speed} --before {upload.boot} --after hard_reset write_flash -e 0x08000000 "{build.path}/{build.project_name}.hex" tools.AirISP.program.pattern="{path}/{cmd}" {program.pattern_args} ``` -------------------------------- ### Linker Flags and Size Command Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Sets linker flags, including options to suppress specific warnings, and defines the command for checking the compiled code size. ```APIDOC # Linker flags compiler.ldflags=-Wl,--no-warn-rwx-segments compiler.size.cmd=arm-none-eabi-size ``` -------------------------------- ### CMake Build Configuration for Air-duino Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR001/AirM2M_Air001_Board/CMakeLists.txt Sets the minimum CMake version and defines interface libraries for variant usage and core variant functionality. It also configures include directories and links necessary libraries. ```cmake cmake_minimum_required(VERSION 3.21) add_library(variant INTERFACE) add_library(variant_usage INTERFACE) target_include_directories(variant_usage INTERFACE . ) target_link_libraries(variant_usage INTERFACE base_config ) target_link_libraries(variant INTERFACE variant_usage) ``` -------------------------------- ### C Compilation Pattern Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Specifies the command pattern for compiling C source files into object files, including compiler flags and include paths. ```bash ## Compile c files recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} {build.info.flags} {compiler.c.air_extra_flags} {compiler.c.extra_flags} {build.air_extra_flags} {build.extra_flags} {compiler.arm.cmsis.c.flags} {includes} "{source_file}" -o "{object_file}" ``` -------------------------------- ### CMake Build Configuration for Air-duino Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR001/AIR001_DEV/CMakeLists.txt Sets the minimum CMake version and defines interface libraries for variant usage and core variant functionality. It also configures include directories and links necessary libraries. ```cmake cmake_minimum_required(VERSION 3.21) add_library(variant INTERFACE) add_library(variant_usage INTERFACE) target_include_directories(variant_usage INTERFACE . ) target_link_libraries(variant_usage INTERFACE base_config ) target_link_libraries(variant INTERFACE variant_usage) ``` -------------------------------- ### Variant Binary Library Definition Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR32F103/F103CB/CMakeLists.txt Defines a static library named 'variant_bin' which is excluded from all targets by default. It lists the source files and links the 'variant_usage' library. ```cmake add_library(variant_bin STATIC EXCLUDE_FROM_ALL generic_clock.c PeripheralPins.c variant_generic.cpp ) target_link_libraries(variant_bin PUBLIC variant_usage) target_link_libraries(variant INTERFACE variant_bin ) ``` -------------------------------- ### Debugging Options Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Defines various debugging levels and their associated build flags. Options include disabling symbols, enabling symbols with debug flags, enabling core logs, and enabling both core logs and symbols. ```properties Air401Dev.menu.dbg.none=None Air401Dev.menu.dbg.enable_sym=Symbols Enabled (-g) Air401Dev.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG Air401Dev.menu.dbg.enable_log=Core logs Enabled Air401Dev.menu.dbg.enable_log.build.flags.debug= Air401Dev.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g) Air401Dev.menu.dbg.enable_all.build.flags.debug=-g ``` -------------------------------- ### Compute Size Patterns Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines patterns and regular expressions for computing the size of the ELF executable, categorizing by text, data, and EEPROM sections. ```bash ## Compute size recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" recipe.size.regex=^(?:\.text|\.data|\.rodata)\s+([0-9]+).* recipe.size.regex.data=^(?:\.data|\.bss|\.noinit)\s+([0-9]+).* recipe.size.regex.eeprom=^(?:\.eeprom)\s+([0-9]+).* ``` -------------------------------- ### Air401Dev Board Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Defines core properties for the Air401Dev board, including upload settings, MCU details, core, series, and variant information. It also specifies include paths for drivers and CMSIS libraries. ```arduino Air401Dev.name=Air401 Dev Chip Air401Dev.upload.maximum_size=20480 Air401Dev.upload.maximum_data_size=3072 Air401Dev.upload.tool=AirISP Air401Dev.upload.tool.default=AirISP Air401Dev.build.core=AirMCU Air401Dev.build.board=AIR401_DEV Air401Dev.build.mcu=cortex-m0plus Air401Dev.build.series=AIR401xx Air401Dev.build.cmsis_lib_gcc=arm_cortexM0l_math Air401Dev.build.product_line=AIR401 Air401Dev.build.variant=AIR401/AIR401_DEV Air401Dev.build.air_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} Air401Dev.build.drivers_include="-I{build.system.path}/Air401-Drivers/{build.series}_HAL_Driver/Inc" "-I{build.system.path}/Air401-Drivers/{build.series}_HAL_Driver/Src" "-I{build.system.path}/{build.series}" "-I{build.system.path}/Air401-Drivers/CMSIS/Device/{build.series}/Include/" "-I{build.system.path}/Air401-Drivers/CMSIS/Device/{build.series}/Source/gcc/" ``` -------------------------------- ### Assembly Compilation Pattern Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Specifies the command pattern for compiling assembly source files into object files, including compiler flags and include paths. ```bash ## Compile S files recipe.S.o.pattern="{compiler.path}{compiler.S.cmd}" {compiler.S.flags} {build.info.flags} {compiler.S.air_extra_flags} {compiler.S.extra_flags} {build.air_extra_flags} {build.extra_flags} {compiler.arm.cmsis.c.flags} {includes} "{source_file}" -o "{object_file}" ``` -------------------------------- ### Board Variant Configuration (AIR32F103CB) Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Specifies configuration details for the AIR32F103CB board variant, including its full name, maximum upload size, product line, and build-specific board and variant identifiers. ```ini Air32F103xx.menu.pnum.AIR32F103CB=Air32F103CBT6 Air32F103xx.menu.pnum.AIR32F103CB.upload.maximum_size=131072 Air32F103xx.menu.pnum.AIR32F103CB.build.product_line=AIR32F103xB Air32F103xx.menu.pnum.AIR32F103CB.build.board=AIR32F103CB Air32F103xx.menu.pnum.AIR32F103CB.build.variant=AIR32F103/F103CB ``` -------------------------------- ### AirISP Upload Sketch Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines the pattern and arguments for uploading a sketch using the AirISP tool via serial port. ```APIDOC ## Upload Sketch ## ------------- tools.AirISP.upload.protocol=serial tools.AirISP.upload.params.verbose= tools.AirISP.upload.params.quiet= tools.AirISP.upload.pattern_args=--chip "auto" --port "{serial.port}" --baud {upload.speed} --before {upload.boot} --after hard_reset write_flash -e 0x08000000 "{build.path}/{build.project_name}.hex" tools.AirISP.upload.pattern="{path}/{cmd}" {upload.pattern_args} ``` -------------------------------- ### Debug Options Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Configuration settings for debugging features. Options include disabling debugging, enabling symbols (-g), enabling core logs, or enabling both core logs and symbols. Each setting is associated with specific build flags. ```arduino # debug Air001Dev.menu.dbg.none=None Air001Dev.menu.dbg.enable_sym=Symbols Enabled (-g) Air001Dev.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG Air001Dev.menu.dbg.enable_log=Core logs Enabled Air001Dev.menu.dbg.enable_log.build.flags.debug= Air001Dev.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g) Air001Dev.menu.dbg.enable_all.build.flags.debug=-g ``` -------------------------------- ### C++ Compilation Pattern Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Specifies the command pattern for compiling C++ source files into object files, including compiler flags and include paths. ```bash ## Compile c++ files recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {build.info.flags} {compiler.cpp.extra_flags} {build.air_extra_flags} {build.extra_flags} {compiler.arm.cmsis.c.flags} {includes} "{source_file}" -o "{object_file}" ``` -------------------------------- ### ARM CMSIS and USB Flags Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Configuration for integrating ARM CMSIS libraries and defining USB-related flags, including VID/PID and manufacturer/product strings. ```APIDOC compiler.arm.cmsis.c.flags="-I{runtime.tools.CMSIS-5.7.0.path}/CMSIS/Core/Include/" "-I{runtime.tools.CMSIS-5.7.0.path}/CMSIS/DSP/Include" "-I{runtime.tools.CMSIS-5.7.0.path}/CMSIS/DSP/PrivateInclude" compiler.arm.cmsis.ldflags="-L{runtime.tools.CMSIS-5.7.0.path}/CMSIS/DSP/Lib/GCC/" -l{build.cmsis_lib_gcc} # USB Flags build.usb_flags=-DUSBCON {build.usb_speed} -DUSBD_VID={build.vid} -DUSBD_PID={build.pid} -DHAL_PCD_MODULE_ENABLED build.vid=0 build.pid=0 # Example for custom USB strings: # some_board.build.extra_flags='-DUSB_MANUFACTURER_STRING="My Company"' '-DUSB_PRODUCT_STRING="My Product"' ``` -------------------------------- ### Air401 Dev Board Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR401/AIR401_DEV/boards_entry.txt Defines the core build settings, MCU, series, and upload parameters for the Air401 Dev board. This includes specifying the build core, board identifier, microcontroller, series name, CMSIS math library, and extra compiler flags. It also sets the maximum upload size and data size. ```ini # Air401 Dev Air401Dev.name=Air401 Dev Chip Air401Dev.build.core=air401 Air401Dev.build.board=Air401_Dev Air401Dev.build.mcu=cortex-m0 Air401Dev.build.series=Air401 Air401Dev.build.cmsis_lib_gcc=arm_cortexM0l_math Air401Dev.build.air_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} Air401Dev.upload.maximum_size=65536 Air401Dev.upload.maximum_data_size=8192 Air401.build.product_line=AIR401 Air401.build.variant=Air401/air401_dev ``` -------------------------------- ### Supply Voltage Options Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Configures the supply voltage for the MCU, mapping different voltage levels to corresponding build flags. This is likely used to define preprocessor macros related to the power supply. ```properties Air401Dev.menu.SupplyVoltage.3V3=3.3V Air401Dev.menu.SupplyVoltage.3V3.build.sv_tmp=-DVDD_3V3 Air401Dev.menu.SupplyVoltage.1V8=1.8V Air401Dev.menu.SupplyVoltage.3V3.build.sv_tmp=-DVDD_1V8 Air401Dev.menu.SupplyVoltage.2V5=2.5V Air401Dev.menu.SupplyVoltage.3V3.build.sv_tmp=-DVDD_2V5 Air401Dev.menu.SupplyVoltage.2V8=2.8V Air401Dev.menu.SupplyVoltage.3V3.build.sv_tmp=-DVDD_2V8 Air401Dev.menu.SupplyVoltage.3V8=3.8V Air401Dev.menu.SupplyVoltage.3V3.build.sv_tmp=-DVDD_3V8 Air401Dev.menu.SupplyVoltage.5V=5V Air401Dev.menu.SupplyVoltage.5V.build.sv_tmp=-DVDD_5V ``` -------------------------------- ### Hex Output Pattern Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Defines the pattern for converting the ELF executable to a hex file using objcopy. ```bash ## Create output (.hex file) recipe.objcopy.hex.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.hex" ``` -------------------------------- ### AirM2M Air001 Board Upload Speed Options Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Configures the available upload speeds for the AirM2M Air001 board, allowing users to select from various baud rates. ```ini AirM2M_Air001_Board.menu.UploadSpeed.115200=115200 AirM2M_Air001_Board.menu.UploadSpeed.115200.upload.speed=115200 AirM2M_Air001_Board.menu.UploadSpeed.57600=57600 AirM2M_Air001_Board.menu.UploadSpeed.57600.upload.speed=57600 AirM2M_Air001_Board.menu.UploadSpeed.38400=38400 AirM2M_Air001_Board.menu.UploadSpeed.38400.upload.speed=38400 AirM2M_Air001_Board.menu.UploadSpeed.19200=19200 AirM2M_Air001_Board.menu.UploadSpeed.19200.upload.speed=19200 AirM2M_Air001_Board.menu.UploadSpeed.9600=9600 AirM2M_Air001_Board.menu.UploadSpeed.9600.upload.speed=9600 AirM2M_Air001_Board.menu.UploadSpeed.4800=4800 AirM2M_Air001_Board.menu.UploadSpeed.4800.upload.speed=4800 AirM2M_Air001_Board.menu.UploadSpeed.2400=2400 AirM2M_Air001_Board.menu.UploadSpeed.2400.upload.speed=2400 AirM2M_Air001_Board.menu.UploadSpeed.1200=1200 AirM2M_Air001_Board.menu.UploadSpeed.1200.upload.speed=1200 ``` -------------------------------- ### Build Information Flags Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Sets flags to include build-specific information, such as the series, Arduino version, board name, and architecture, during compilation. ```APIDOC build.info.flags=-D{build.series} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DBOARD_NAME="{build.board}" -DVARIANT_H="{build.variant_h}" ``` -------------------------------- ### EEPROM Syntax Coloring Source: https://github.com/air-duino/arduino-airmcu/blob/main/libraries/EEPROM/keywords.txt Defines syntax coloring for EEPROM-related datatypes and keywords. EEPROM and EERef are categorized as KEYWORD1, while EEPtr is KEYWORD2. ```arduino EEPROM KEYWORD1 EERef KEYWORD1 EEPtr KEYWORD2 ``` -------------------------------- ### Output File Naming Source: https://github.com/air-duino/arduino-airmcu/blob/main/platform.txt Specifies the preferred output format and the naming convention for temporary and saved output files. ```bash build.preferred_out_format=bin ## Save binary recipe.output.tmp_file={build.project_name}.{build.preferred_out_format} recipe.output.save_file={build.project_name}.{build.board}.{build.preferred_out_format} ``` -------------------------------- ### Air001 Dev Board Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/variants/AIR001/AIR001_DEV/boards_entry.txt Defines the build and upload properties for the Air001 Dev board. This includes the core, MCU, series, extra build flags, and maximum upload sizes for program and data. ```arduino Air001Dev.name=Air001 Dev Chip Air001Dev.build.core=air001 Air001Dev.build.board=Air001_Dev Air001Dev.build.mcu=cortex-m0 Air001Dev.build.series=Air001 Air001Dev.build.cmsis_lib_gcc=arm_cortexM0l_math Air001Dev.build.air_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} Air001Dev.upload.maximum_size=65536 Air001Dev.upload.maximum_data_size=8192 Air001.build.product_line=AIR001 Air001.build.variant=Air001/air001_dev ``` -------------------------------- ### Air32F103xx MCU and Build Configuration Source: https://github.com/air-duino/arduino-airmcu/blob/main/boards.txt Defines core build properties for the Air32F103xx microcontroller, including MCU type, core, series, CMSIS library, and extra compiler flags. It also specifies include paths for HAL drivers and CMSIS device files. ```ini Air32F103xx.upload.maximum_data_size=98304 Air32F103xx.upload.tool=AirISP Air32F103xx.upload.tool.default=AirISP Air32F103xx.build.core=AirMCU Air32F103xx.build.board=AIR32F103 Air32F103xx.build.mcu=cortex-m3 Air32F103xx.build.series=AIR32F103xx Air32F103xx.build.cmsis_lib_gcc=arm_cortexM3l_math Air32F103xx.build.air_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} Air32F103xx.build.drivers_include="-I{build.system.path}/Air32F103-Drivers/AIR32F1xx_HAL_Driver/Inc" "-I{build.system.path}/Air32F103-Drivers/AIR32F1xx_HAL_Driver/Src" "-I{build.system.path}/AIR32F103xx" "-I{build.system.path}/Air32F103-Drivers/CMSIS/Device/AIR32F1xx/Include/" "-I{build.system.path}/Air32F103-Drivers/CMSIS/Device/AIR32F1xx/Source/gcc/" ```