From af3e66e330904fd6172d40953a242a6bd40694a5 Mon Sep 17 00:00:00 2001 From: Niklas Hauser Date: Wed, 31 Mar 2021 06:07:48 +0200 Subject: [PATCH] [release] 2021q1 --- .github/workflows/linux.yml | 2 + .mailmap | 29 + CHANGELOG.md | 1464 ++++++++++++++++++++++++++ README.md | 28 +- docs/CHANGELOG.md | 1143 -------------------- docs/release/2018q3.md | 71 ++ docs/release/2018q4.md | 81 ++ docs/release/2019q1.md | 96 ++ docs/release/2019q2.md | 82 ++ docs/release/2019q3.md | 91 ++ docs/release/2019q4.md | 74 ++ docs/release/2020q1.md | 97 ++ docs/release/2020q2.md | 141 +++ docs/release/2020q3.md | 148 +++ docs/release/2020q4.md | 76 ++ docs/release/2021q1.md | 157 +++ docs/src/guide/custom-project.md | 2 +- tools/scripts/authors.py | 43 +- tools/scripts/generate_hal_matrix.py | 28 +- tools/scripts/synchronize_docs.py | 88 +- 20 files changed, 2732 insertions(+), 1209 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 docs/CHANGELOG.md create mode 100644 docs/release/2018q3.md create mode 100644 docs/release/2018q4.md create mode 100644 docs/release/2019q1.md create mode 100644 docs/release/2019q2.md create mode 100644 docs/release/2019q3.md create mode 100644 docs/release/2019q4.md create mode 100644 docs/release/2020q1.md create mode 100644 docs/release/2020q2.md create mode 100644 docs/release/2020q3.md create mode 100644 docs/release/2020q4.md create mode 100644 docs/release/2021q1.md diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 457733fe9b..6b090c7e38 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -67,6 +67,8 @@ jobs: run: | python3 tools/scripts/synchronize_docs.py -d git checkout . + python3 tools/scripts/generate_hal_matrix.py -d + git checkout . - name: Check Examples if: always() run: | diff --git a/.mailmap b/.mailmap index a41e563ef2..481c2f62b3 100644 --- a/.mailmap +++ b/.mailmap @@ -3,44 +3,73 @@ Amarok McLion Andre Gilerson Antal Szabó Arjun Sarin +Benjamin +Benjamin Carrick Benjamin Weps Carl Treudler +Cerem Cem ASLAN Christian Menard Christoph Rüdi +Christopher Durand Christopher Durand Daniel Krebs Daniel Krebs +David Hebbeker David Hebbeker +David Hebbeker +David Hebbeker +Erik Henriksson +Erik Henriksson +Fabian Greif Fabian Greif +Felix Petriconi +Georgi Grinshpun Georgi Grinshpun Georgi Grinshpun Hans Schily +Jacob Schultz Andersen +Jeff McBride Julia Gutheil Jörg Hoffmann +Kaelin Laundry Kevin Läufer Kevin Läufer +Linas Nikiperavicius Lucas Mösch Lucas Mösch +Lukas Güldenstein +Philipp Graf Marten Junga +Marten Junga Martin Esser +Martin Rosekeit Martin Rosekeit Michael Thies +Mike Wolfram +Mike Wolfram Nick Sarten +Niclas Rohrer Niclas Rohrer +Nicolai Bruhn +Niklas Hauser Niklas Hauser Niklas Hauser Niklas Meyer Patrick Servello Pavel Pletenev Raphael Lehmann +Raphael Lehmann Sascha Schade Sascha Schade Sascha Schade Sascha Schade +Sebastian Birke Sergiy Yevtushenko Tarik TIRE Thomas Figueroa +Thomas Sommer Thorsten Lajewski Tomasz Chyrowicz +Vivien Henry Zawadniak Pedro Álan Crístoffer diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..b9de775e03 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,1464 @@ +# Changelog + +The purpose of this changelog is to give a good overview of the changes in modm. +It is an editorialized version of the git history, with features, PRs and fixes +chosen for their importance to modm users as judged by the maintainers. +This means that not every small commit makes it in here. + +
+Changelog format + +The release summaries are formatted as: + +> #### yyyy-mm-dd: yyyyqn release +> +> Breaking changes: [list] +> Features: [list] +> Fixes: [list] +> New development boards: [list] +> New device drivers: [list] +> Known bugs: [list] +> Contributors: [list] +> +> PR #[GitHub] -> [release tag]. + +With a more detailed changelog below with this format: + +> ##### yyyy-mm-dd: [summary] +> +> [detailed summary] +> +> PR #[GitHub] -> [sha1] (with [level] impact (on [scope])). +> Tested in hardware by [contributor]. + +Note that `-> [sha1]` means "all changes up to and including this commit" which +needs to be interpreted in the context of the git history. +This usually corresponds to the changes in the Pull Request on GitHub though. + +This changelog also labels the changes with an impact and usually also scopes +them to the relevant subset of modm code or targets. +This describes the anticipated impact of these changes on users of modm and has +four levels: + +1. No impact mentioned: No influence. Adds new features and does not touch existing code. +2. Low impact: No expected influence. Modifies modm in a backwards compatible way. +3. Medium impact: Likely influence. Modifies modm in a non-backwards compatible way. +4. High impact: Definite influence. Breaks the API within the scope. + +High impact changes are explicitly called out in the release notes for you to +pay attention to. Medium impact changes are also worth looking at. + +
+ + + +## 2021-04-01: 2021q1 release + +This release covers everything from 2021-01-01 and has been tested with avr-gcc +v10.1.0 from Upstream and arm-none-eabi-gcc 2020q4 from Arm. + +Breaking changes: + +- `Uart::initialize()` arguments and behaviour changed on STM32. +- Complete rewrite of TCS34xx color sensor driver. + +Features: + +- Update AVR libstdc++ to C++20. +- Enable C++20 with GCC10. +- Ethernet support via FreeRTOS-TCP and LAN8720a. +- STM32: optional UART buffers per direction. +- Using relative paths in ELF files to easier archiving. +- Dark mode for Doxypress documentation. +- Makefile build system generator. +- Better Windows installation instructions. + +Fixes: + +- STM32F4/F7: Overdrive mode. +- STM32G4: TIM2 and TIM5 as 32-bit timer. +- STM32F0: ADC temperature calibration. +- STM32G4: ADC clock. +- SAMD21 Mini BSP fixes. +- Windows: Uploading via AvrDude. + +New development boards: + +- NUCLEO-F439ZI as [`modm:board:nucleo-f439zi`][]. +- NUCLEO-F446ZE as [`modm:board:nucleo-f446ze`][]. +- NUCLEO-F767ZI as [`modm:board:nucleo-f767zi`][]. + +New device drivers: + +- MMC5603 compass as [`modm:driver:mmc5603`][]. +- LAN8720a ethernet transceiver as [`modm:driver:lan8720a`][]. +- STUSB4500 USB-PD controller as [`modm:driver:stusb4500`][]. +- Bit-banged encoder input as [`modm:driver:encoder_input.bitbang`][]. + +Known bugs: + +- C++20 is not fully implemented by GCC10 yet, however modm does not use all + features yet anyways. See [#326][]. +- Nanosecond delay may be inaccurate. See [#495][]. +- STM32F7: D-Cache not enabled by default. See [#485][]. +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See [#285][]. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See [#310][]. +- `arm-none-eabi-gdb` TUI and GDBGUI interfaces are not supported on Windows. + See [#591][]. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Cerem Cem ASLAN ([@ceremcem][]) 🎉 +- Christopher Durand ([@chris-durand][]) +- David Hebbeker ([@dhebbeker][]) +- Jacob Schultz Andersen ([@jasa][]) 🎉 +- Mike Wolfram ([@mikewolfram][]) +- Nicolai Bruhn ([@nicoBruhn][]) 🎉 +- Niklas Hauser ([@salkinium][]) +- Raphael Lehmann ([@rleh][]) +- Sascha Schade ([@strongly-typed][]) +- Thomas Sommer ([@TomSaw][]) 🎉 +- Vivien Henry ([@lukh][]) + +PR [#597][] -> [2021q1][]. + +
+Detailed changelog + +#### 2021-03-26: Add Makefile build system generator + +PR [#557][] -> [df47974][]. +Tested by [@salkinium][]. + +#### 2021-03-22: Add Bit-banged encoder input driver + +PR [#580][] -> [df47974][]. +Tested in hardware by [@TomSaw][]. + +#### 2021-03-16: Rewrite TCS34xx color sensors + +Breaking changes: Entire API was rewritten. + +PR [#578][] -> [850b554][] with **high impact** on TCS34xx driver. +Tested in hardware by [@TomSaw][]. + +#### 2021-03-06: Add STUSB4500 USB-PD controller driver + +PR [#574][] -> [1a11b08][]. +Tested in hardware by [@rleh][]. + +#### 2021-03-06: Add NUCLEO-F439ZI board and example + +PR [#571][] -> [165adf0][]. +Tested in hardware by [@rleh][]. + +#### 2021-02-26: Refactor SCons build system + +Adds relative paths in ELF file. + +PR [#558][] -> [1fc3805][]. +Tested by [@salkinium][]. + +#### 2021-02-23: Refactor UART HAL + +Makes UART buffers individually optional by setting their size to zero. +Breaking changes: + +- `Uart::initialize(IrqPriority, Parity)` -> `Uart::initialize(Parity, WordLength)`. +- Word length is not automatically set to 9-bits when setting parity anymore. +- `UartHal::setLastBitClockPulse(LastBitClockPulse)` removed. +- `UartHal::setSpiClock(SpiClock)` -> `UartHal::setSpiClock(SpiClock, LastBitClockPulse)`. +- You must now manually call `UartHal::{en,dis}ableOperation()` before modifying UartHal. + +PR [#564][] -> [62b63f5][] with **high impact** on STM32 targets. +Tested in hardware by [@salkinium][]. + +#### 2021-02-18: Add Ethernet support via FreeRTOS-TCP and LAN8720a + +Also adds NUCLEO-F767ZI board. + +PR [#466][] -> [d8be0a2][]. +Tested in hardware by [@mikewolfram][]. + +#### 2021-01-14: Add MMC5603 compass driver + +PR [#556][] -> [fb2ff58][]. +Tested in hardware by [@salkinium][]. + +#### 2021-01-14: Fix STM32F0 ADC temperature sensor + +PR [#526][] -> [3ecad35][] with low impact on STM32F0 targets. +Tested in hardware by [@chris-durand][]. + +#### 2021-01-10: Add NUCLEO-F446ZE board and example + +PR [#533][] -> [02b1571][]. +Tested in hardware by [@chris-durand][]. + +#### 2021-01-10: Enable C++20 + +PR [#521][] -> [8c322a2][] with low impact on all targets. +Tested in hardware by all. + +#### 2021-01-10: Update avr libstdc++ submodule to C++20 version + +PR [#535][] -> [038657c][] with low impact on AVR targets. +Tested in hardware by [@chris-durand][]. + +
+ + +## 2021-01-01: Virtual 2020q4 release + +This is a virtual release only for reference that covers everything from +2020-10-01. + +Breaking changes: + +- SAMD GPIO connector API is rewritten. + +Features: + +- Added a `.clang-format` for automated code styling. +- Update FatFS from v0.09 to v0.13. + +Fixes: + +- STM32F3: Fix missing HsiDiv2 in PllSource. +- FreeRTOS: Fix SystemCoreClock linking. +- Proper lookup of all IOStream `operator<<` overloads. + +New development boards: + +- NUCLEO-F334R8 as [`modm:board:nucleo-f334r8`][]. +- NUCLEO-G431KB as [`modm:board:nucleo-g431kb`][]. +- NUCLEO-G431RB as [`modm:board:nucleo-g431rb`][]. + +No new device drivers. + +Known bugs: + +- Nanosecond delay may be inaccurate. See [#495][]. +- STM32F7: D-Cache not enabled by default. See [#485][]. +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See [#285][]. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See [#310][]. + +Many thanks to all our contributors: + +- Christopher Durand ([@chris-durand][]) +- Erik Henriksson ([@henrikssn][]) +- Jeff McBride ([@mcbridejc][]) +- Mike Wolfram ([@mikewolfram][]) +- Niklas Hauser ([@salkinium][]) +- Raphael Lehmann ([@rleh][]) +- Sascha Schade ([@strongly-typed][]) + +
+Detailed changelog + +#### 2020-12-16: Add NUCLEO-G431RB board and example + +PR [#490][] -> [195f7e1][]. +Tested in hardware by [@rleh][]. + +#### 2020-11-16: Add NUCLEO-G431KB board and example + +PR [#499][] -> [276f5b3][]. +Tested in hardware by [@mcbridejc][]. + +#### 2020-11-04: Update FatFs to v0.13 + +PR [#497][] -> [7df2e7d][] with **medium impact** on all targets. +Tested in hardware by [@salkinium][]. + +#### 2020-10-07: Rewrite of SAMD GPIO connector API + +PR [#482][] -> [dc56af2][] with **high impact** on SAMD targets. +Tested in hardware by [@henrikssn][]. + +#### 2020-10-06: Add NUCLEO-F334R8 board and example + +PR [#489][] -> [85eec34][]. +Tested in hardware by [@rleh][]. + +
+ + +## 2020-10-01: Virtual 2020q3 release + +This is a virtual release only for reference that covers everything from +2020-07-01. + +No breaking changes. + +Features: + +- SAMD21 support with GPIO, UART, External Interrupt. +- A rewritten AMNB protocol. +- RaspberryPi support with GPIO (via Linux/WiringPi). +- Better Windows support incl. CI. +- Compliance with CMSIS SystemCoreClock interface. +- TinyUSB integration! + +Fixes: + +- STM32F3: Fix `Adc::isConversionFinished()`. +- STM32: Add missing BDTR register to TIM14. +- STM32: Fix RCC clock enable for Ethernet. +- STM32L1: Fix CMSIS Header selection for -A variants. +- STM32F0/G0: Add support for remapped pins. +- FreeRTOS: Make malloc thread-safe. + +New development boards: + +- NUCLEO-F334R8 as [`modm:board:nucleo-f334r8`][]. +- Feather-M0 as [`modm:board:feather-m0`][]. +- SAMD21 Mini as [`modm:board:samd21-mini`][]. +- Raspberry Pi v3 as [`modm:board:raspberrypi`][]. +- DevEBox STM32F4xx as [`modm:board:devebox-stm32f4xx`][]. +- STM32_F32VE as [`modm:board:stm32_f32ve`][]. + +New device drivers: + +- LSM6DS33 compass and gyroscope as [`modm:driver:lsm6ds33`][]. +- LIS3MDL compass as [`modm:driver:lis3mdl`][]. +- GPIO Sampler (STM32-only) as [`modm:driver:gpio-sampler`][]. +- IS31FL3733 LED matrix driver as [`modm:driver:is31fl3733`][]. +- ILI9341 Parallel/SPI display driver as [`modm:driver:ili9341`][]. + +Known bugs: + +- STM32F7: D-Cache not enabled by default. See [#485][]. +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See [#285][]. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See [#310][]. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Benjamin Carrick ([@nesos][]) +- Christopher Durand ([@chris-durand][]) +- delphi ([@delphi][]) +- Erik Henriksson ([@henrikssn][]) 🎉 +- Lukas Güldenstein ([@gueldenstone][]) 🎉 +- Mike Wolfram ([@mikewolfram][]) +- Niklas Hauser ([@salkinium][]) +- Pavel Pletenev ([@ASMfreaK][]) +- Raphael Lehmann ([@rleh][]) +- Sascha Schade ([@strongly-typed][]) +- Vivien Henry ([@lukh][]) + +
+Detailed changelog + +#### 2020-09-30: Integrate TinyUSB for STM32 and SAMD + +PR [#478][] -> [3072005][]. +Tested in hardware by [@salkinium][]. + +#### 2020-09-19: Add ILI9341 Parallel/SPI display driver + +PR [#437][] -> [43f32e6][]. +Tested in hardware by [@mikewolfram][] and [@delphi][]. + +#### 2020-09-18: Update FreeRTOS and make malloc thread-safe + +PR [#475][] -> [cb82eec][] with low impact in ARM Cortex-M targets. +Tested in hardware by [@strongly-typed][] and [@salkinium][]. + +#### 2020-09-18: Add GPIO remap support for STM32F0/G0 + +PR [#471][] -> [48d73dc][] with low impact on STM32 targets. +Tested in hardware by [@chris-durand][] and [@salkinium][]. + +#### 2020-09-12: Add DevEBox STM32F4xx board and examples + +PR [#462][] -> [8082f69][]. +Tested in hardware by [@strongly-typed][]. + +#### 2020-09-07: Add RaspberryPi support + +Wraps `` for GPIO driver. + +PR [#444][] -> [d3496a3][]. +Tested in hardware by [@henrikssn][]. + +#### 2020-08-30: Add FreeRTOS+TCP module + +PR [#448][] -> [821677b][]. +Tested in hardware by [@mikewolfram][]. + +#### 2020-08-15: Add IS31FL3733 LED matrix driver + +PR [#445][] -> [9b6aeee][]. +Tested in hardware by [@salkinium][]. + +#### 2020-07-31: Add GPIO Sampler driver for STM32 + +PR [#96][] -> [9d8bbfa][]. +Tested in hardware by [@salkinium][]. + +#### 2020-07-20: Add rewrite of AMNB protocol + +PR [#395][] -> [8820d6b][]. +Tested in hardware by [@salkinium][]. + +#### 2020-07-20: Add SAMD21 External Interrupt driver + +PR [#436][] -> [cbce428][]. +Tested in hardware by [@henrikssn][]. + +#### 2020-07-08: Add SAMD21 basic UART driver + +PR [#430][] -> [04688bc][]. +Tested in hardware by [@henrikssn][]. + +#### 2020-07-07: Add LIS3MDL compass driver + +PR [#428][] -> [0994a55][]. +Tested in hardware by [@nesos][]. + +#### 2020-07-05: Add SAMD21 modm port + +Also adds Feather-M0 and SAMD21 Mini BSPs. + +PR [#194][] -> [d2d38a0][]. +Tested in hardware by [@salkinium][] and [@henrikssn][]. + +#### 2020-07-02: Add LSM6DS33 compass and gyroscope driver + +PR [#426][] -> [e233708][]. +Tested in hardware by [@nesos][]. + +
+ + +## 2020-07-01: Virtual 2020q2 release + +This is a virtual release only for reference that covers everything from +2020-04-01. + +Breaking changes: + +- Move FCPU option to `modm:platform:core:f_cpu` lbuild option. +- `modm::Clock` reimplemented using `std::chrono`. +- ZeroMQ support removed as ZeroMQ is unmaintained. +- STM32 DMA driver rewritten for only STM32L4. + +Features: + +- `modm::delay()` is now `std::chrono` compatible. +- `modm::PreciseClock` with microsecond resolution. +- Containers derive from `std::iterator` to work with STL algorithms. +- Simple (stateless) CRC8, CRC16, CRC32 implementations. +- `.ramcode` linker section for Cortex-M. +- Use linkerscript via lbuild option. +- Simple Flash driver for STM32G0/F4. +- Basic DAC driver for STM32F4. + +Fixes: + +- Fix `` in AVR libstdc++. +- Cortex-M: Explicitly set the stack pointer on startup, since some bootloaders + forget to load the stackpointer from the image. +- TLSF `free()` ignores null pointers. +- STM32F0/F3: Correct Pll Source selection. + +New development boards: + +- NUCLEO-F303RE as [`modm:board:nucleo-f303re`][]. +- Mega 2560 PRO as [`modm:board:mega-2560-pro`][]. + +New device drivers: + +- LP503x LED driver as [`modm:driver:lp503x`][]. +- Sx1276 LoRa Modem as [`modm:driver:sx1276`][]. +- Bit-bang encoder output as [`modm:driver:encoder.output`][]. + +Known bugs: + +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See [#285][]. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See [#310][]. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Benjamin Carrick ([@nesos][]) 🎉 +- Christopher Durand ([@chris-durand][]) +- Felix Petriconi ([@FelixPetriconi][]) 🎉 +- Jeff McBride ([@mcbridejc][]) 🎉 +- Kaelin Laundry ([@WasabiFan][]) +- Mike Wolfram ([@mikewolfram][]) +- Niklas Hauser ([@salkinium][]) +- Pavel Pletenev ([@ASMfreaK][]) +- Philipp Graf ([@luxarf][]) 🎉 +- Raphael Lehmann ([@rleh][]) +- Sascha Schade ([@strongly-typed][]) +- Vivien Henry ([@lukh][]) 🎉 + +
+Detailed changelog + +#### 2020-06-19: Add basic DAC driver for STM32F4 + +PR [#420][] -> [78d18f6][]. +Tested in hardware by [@mcbridejc][]. + +#### 2020-06-14: Add bit-banged encoder output + +PR [#153][] -> [21af57b][]. +Tested in hardware by [@rleh][]. + +#### 2020-06-13: Add Sx1276 LoRa Modem driver + +PR [#418][] -> [7d1f7cc][]. +Tested in hardware by [@nesos][]. + +#### 2020-06-11: Add Flash driver for STM32G0/F4 + +PR [#417][] -> [9e285db][]. +Tested in hardware by [@salkinium][]. + +#### 2020-05-12: Add LP503x LED driver + +PR [#366][] -> [6e5ebf4][]. +Tested in hardware by [@chris-durand][]. + +#### 2020-05-12: Add NUCLEO-F746ZG board and example + +PR [#396][] -> [c38550a][]. +Tested in hardware by [@FelixPetriconi][]. + +#### 2020-05-12: Add NUCLEO-F746ZG board and example + +PR [#396][] -> [c38550a][]. +Tested in hardware by [@FelixPetriconi][]. + +#### 2020-05-08: Add DMA-capable SPI driver + +PR [#400][] -> [80a9c66][] with low impact on STM32 targets. +Tested in hardware by [@mikewolfram][]. + +#### 2020-05-06: Rewrite DMA implementation for STM32L4 + +The previous DMA implementation is replaced by a new STM32L4-only one. + +PR [#371][] -> [0217a19][] with **high impact** on STM32 targets. +Tested in hardware by [@mikewolfram][]. + +#### 2020-04-25: Add Mega 2560 PRO board and example + +PR [#382][] -> [11ffe92][]. +Tested in hardware by [@chris-durand][]. + +#### 2020-04-16: Add NUCLEO-F303RE board and example + +PR [#376][] -> [141aa71][]. +Tested in hardware by [@luxarf][]. + +#### 2020-04-09: Rewrite modm::Clock and add modm::PreciseClock + +Highly efficient implementation via SysTick on Cortex-M and TC0 on AVR. +Breaking changes: + +- `modm::Clock` now using `std::chrono` compatible interface. + +PR [#217][] -> [c63a536][] with **high impact** on AVR and STM32 targets. +Tested in hardware by [@salkinium][]. + +#### 2020-04-06: std::chrono compatible modm::delay + +PR [#374][] -> [b010775][] with low impact on all targets. +Tested in hardware by [@salkinium][]. + +
+ + +## 2020-04-01: Virtual 2020q1 release + +This is a virtual release only for reference that covers everything from +2020-01-01. + +Breaking changes: + +- `modm_assert()` arguments, behavior and assertion handler arguments. +- STM32: `Rcc::enablePll(PllFactors&)` arguments. + +Features: + +- Doxypress support for API docs generation. +- Support for C11/C++11 atomics on ARMv6-M. +- Make heap module optional with linker failure when accidentally calling malloc. + +Fixes: + +- I2C NACK handling on STM32. +- Static initialization guard for C++. + +No new development boards. + +New device drivers: + +- CAT24AAxx I2C EEPROM as [`modm:driver:cat24aa`][]. + +Known bugs: + +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See [#285][]. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See [#310][]. + +Many thanks to all our contributors: + +- Christopher Durand ([@chris-durand][]) +- David Hebbeker ([@dhebbeker][]) +- Mike Wolfram ([@mikewolfram][]) +- Niklas Hauser ([@salkinium][]) +- Raphael Lehmann ([@rleh][]) +- Sascha Schade ([@strongly-typed][]) + +
+Detailed changelog + +#### 2020-03-30: Add HX711 scale driver + +PR [#372][] -> [d21e991][]. +Tested in hardware by [@strongly-typed][]. + +#### 2020-03-19: Move heap into own module + +`modm:platform:heap` is optional and will cause the linker to fail if malloc is +called without this module. + +PR [#364][] -> [b8648be][] with **medium impact** on Cortex-M targets. +Tested in hardware by [@salkinium][]. + +#### 2020-03-19: Pass PLL configuration as struct + +Breaking changes: + +- Single arguments of `Rcc::enable()` now passed as struct. + +PR [#361][] -> [e3ba913][] with **high impact** on STM32 targets. +Tested in hardware by [@rleh][]. + +#### 2020-03-19: Refactor modm_assert interface and implementation + +Breaking changes: + +- `modm_assert` signature. +- Additional `modm_assert_*` functions with new behaviors. +- Assertion handler signature and arguments. + +PR [#351][] -> [23ec952][] with **high impact** on all targets. +Tested in hardware by [@salkinium][]. + +#### 2020-03-13: Implement C11 atomics on ARMv6-M + +PR [#346][] -> [5332765][]. +Tested in hardware by [@salkinium][]. + +#### 2020-03-12: Add C++ RTTI and Exception support + +As lbuild options in the `modm:stdc++` module. + +PR [#343][] -> [4ff604f][]. +Tested in hardware by [@salkinium][]. + +#### 2020-01-20: Add CAT24AAxx I2C EEPROM driver + +PR [#321][] -> [b721551][]. +Tested in hardware by [@mikewolfram][]. + +
+ + +## 2020-01-01: Virtual 2019q4 release + +This is a virtual release only for reference that covers everything from +2019-10-01. + +Breaking changes: + +- `modm:target` option requires extended identifiers. + +Features: + +- STM32G4 support! +- DFU programmer support. +- STM32G0: Add ADC driver. + +Fixes: + +- NUCLEO-F303K8: SystemClock for USART1 and I2C1. +- STM32: I2C NACK interrupt. + +New development boards: + +- NUCLEO-G474RE as [`modm:board:nucleo-g474re`][]. +- Black Pill F401 as `modm:board:mini-f401` +- Black Pill F411 as `modm:board:mini-f411` + +New device drivers: + +- SK9822 LED driver (via APA102) as [`modm:driver:sk9822`][]. + +Known bugs: + +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See [#285][]. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See [#310][]. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Benjamin Weps ([@nesos][]) +- Mike Wolfram ([@mikewolfram][]) 🎉 +- Niklas Hauser ([@salkinium][]) +- Raphael Lehmann ([@rleh][]) + +
+Detailed changelog + +#### 2019-12-19: Add STM32G0 ADC driver and SK9822 LED driver + +PR [#318][] -> [fb21f62][]. +Tested in hardware by [@salkinium][]. + +#### 2019-10-20: Update of modm-devices + +Breaking changes: `modm:target` option requires longer identifier, however, it +will give you a list of ambiguous targets to choose from. + +PR [#306][] -> [62ccc26][] with **high impact** in all targets. +Tested in hardware by [@salkinium][]. + +#### 2019-10-12: Add Mini-F4x1 STM32 boards and examples + +PR [#302][] -> [64d177a][] with low impact in STM32 targets. +Tested in hardware by [@rleh][]. + +#### 2019-10-09: Add STM32G4 support + +Also adds NUCLEO-G474RE board and examples. + +PR [#287][] -> [afaea7f][] with low impact in STM32 targets. +Tested in hardware by [@rleh][]. + +
+ + +## 2019-10-01: Virtual 2019q3 release + +This is a virtual release only for reference that covers everything from +2019-07-01. + +Breaking changes: + +- Modularized CMSIS-DSP integration. +- Refactored CMake build script generator. +- Refactored NRF24 radio driver. +- Removal of deprecated TIPC XPCC backend. +- Removal of deprecated SDL display driver. + +Features: + +- Remove hardcoded OpenOCD programmer for some boards. +- AVR: size reporting. +- CMake: Support multi-repository builds. +- `HARDWARE_INIT` helper macro for linker section. + +Fixes: + +- STM32: Acknowledge external interrupt flags. +- STM32: Shared ADC interrupt. + +New device drivers: + +- BNO055 IMU driver as [`modm:driver:bno055`][]. +- TLC594x PWM driver as [`modm:driver:tlc594x`][]. +- APA102 RGB LED driver as [`modm:driver:apa102`][]. +- SK6812 RGB LED driver as [`modm:driver:sk6812`][]. + +Known bugs: + +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See [#285][]. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Benjamin Weps ([@nesos][]) +- Carl Treudler ([@cajt][]) +- Jörg Hoffmann ([@19joho66][]) 🎉 +- Kaelin Laundry ([@WasabiFan][]) 🎉 +- Linas Nikiperavicius ([@linasnikis][]) 🎉 +- Niklas Hauser ([@salkinium][]) +- Pavel Pletenev ([@ASMfreaK][]) +- Sascha Schade ([@strongly-typed][]) + +
+Detailed changelog + + +#### 2019-08-07: Add APA102 and SK6812 LED drivers + +PR [#267][] -> [72d5ae9][]. +Tested in hardware by [@salkinium][]. + +#### 2019-07-24: Refactor NRF24 radio driver + +PR [#253][] -> [22867e0][]. +Tested in hardware by [@danielk][]. + +#### 2019-07-15: Refactor CMake build script generator + +PR [#254][] -> [00471ca][]. +Tested in hardware by [@salkinium][]. + +#### 2019-07-15: Add TLC594x PWM driver + +PR [#242][] -> [b570d07][]. +Tested in hardware by [@linasnikis][]. + +#### 2019-07-11: Add BNO055 IMU driver + +PR [#191][] -> [a8edbe8][]. +Tested in hardware by [@salkinium][]. + +#### 2019-07-11: Modularize CMSIS-DSP + +Breaking changes: You need to choose the required submodules. + +PR [#241][] -> [022a60a][]. +Tested in hardware by [@salkinium][]. + +#### 2019-07-11: Remove hardcoding of OpenOCD programmer + +PR [#240][] -> [afbd533][]. +Tested in hardware by [@salkinium][]. + +
+ + +## 2019-07-01: Virtual 2019q2 release + +This is a virtual release only for reference that covers everything from +2019-04-01. + +Breaking changes: + +- Upgrade to AWS a:FreeRTOS v10 with generic port to all Cortex-M devices. +- `modm::endl` does not flush the IOStream anymore. + +Features: + +- New printf implementation with better overall syntax support. +- Simple CRC32 implementation. +- Cortex-M: CrashCatcher integration for post-mortem debugging of HardFaults. +- Cortex-M: ITM driver with UART interface. +- Cortex-M: GNU Build ID integration. + +Fixes: + +- AVR: UART driver for some devices. + +New development boards: + +- Arduino NANO as [`modm:board:arduino-nano`][]. +- NUCLEO-F446RE as [`modm:board:nucleo-f446re`][]. + +New device drivers: + +- WS2812 RGB LED driver as [`modm:driver:ws2812`][]. + +Many thanks to all our contributors: + +- Antal Szabó ([@Sh4rK][]) +- Niklas Hauser ([@salkinium][]) +- Pavel Pletenev ([@ASMfreaK][]) +- Sascha Schade ([@strongly-typed][]) +- Sebastian Birke ([@se-bi][]) + +
+Detailed changelog + +#### 2019-06-06: Add NUCLEO-F446RE board and examples + +PR [#228][] -> [9381fd0][]. +Tested in hardware by [@se-bi][]. + +#### 2019-06-06: Add GNU Build ID to firmware + +PR [#219][] -> [a607613][]. +Tested in hardware by [@salkinium][]. + +#### 2019-05-26: Add ITM driver + +PR [#218][] -> [47adfd6][]. +Tested in hardware by [@salkinium][]. + +#### 2019-05-14: Integrate CrashCatcher + +Removes previous hard fault LED toggling in favor of much better solution. + +PR [#210][] -> [4ab28fe][] with low impact on STM32 targets. +Tested in hardware by [@salkinium][]. + +#### 2019-05-09: Upgrade to AWS a:FreeRTOS v10 + +Breaking changes: Previous port only worked on STM32F4 with our own patches. + +PR [#198][] -> [66c0868][] with **high impact** on STM32F4 targets. +Tested in hardware by [@salkinium][]. + +#### 2019-05-03: Refactor printf implementation + +PR [#199][] -> [4ce1a47][] with low impact on all targets. +Tested in hardware by [@salkinium][]. + +#### 2019-04-06: Add WS2812 RGB LED driver + +PR [#190][] -> [a6b4186][]. +Tested in hardware by [@salkinium][]. + +
+ + +## 2020-04-01: Virtual 2019q1 release + +This is a virtual release only for reference that covers everything from +2019-01-01. + +Breaking changes: + +- All inheritable lbuild board configs are moved from `modm:board:*` to `modm:*`. +- Split `modm:platform:core` module into `modm:platform:cortex-m` module. +- Refactor SysTick and RCC module. + +Features: + +- Black Magic Probe upload support. +- STM32: RCC driver with enable()/disable() functions for clocks. +- Cortex-M: Add option to link with flash offset for bootloaders. +- STM32G0 support! + +Fixes: + +- HD44780: 4-bit initialization. +- NUCLEO-F303K8: Fix SystemClock for CAN. + +New device drivers: + +- PAT9125EL motion sensor driver as [`modm:driver:pat9125el`][]. +- MAX7219 LED matrix driver as [`modm:driver:max7219`][]. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Christopher Durand ([@chris-durand][]) +- Fabian Greif ([@dergraaf][]) +- Niklas Hauser ([@salkinium][]) +- Patrick Servello ([@patrick--][]) 🎉 +- Pavel Pletenev ([@ASMfreaK][]) 🎉 +- Raphael Lehmann ([@rleh][]) +- Sascha Schade ([@strongly-typed][]) +- Sebastian Birke ([@se-bi][]) +- Thomas Figueroa ([@OperativeF][]) 🎉 +- Zawadniak Pedro ([@PDR5][]) 🎉 + +
+Detailed changelog + + +#### 2019-02-06: Add MAX7219 LED matrix driver + +PR [#187][] -> [5dd598c][]. +Tested in hardware by [@dergraaf][]. + +#### 2019-03-26: Add MAX7219 LED matrix driver + +PR [#187][] -> [5dd598c][]. +Tested in hardware by [@dergraaf][]. + +#### 2019-03-06: Add STM32G0 support + +PR [#167][] -> [399a533][]. +Tested in hardware by [@salkinium][]. + +#### 2019-03-06: Refactor SysTick and RCC module + +Breaking changes: + +- `modm:platform:clock.cortex` -> `modm:platform:systick`. +- `Rcc::setFlashLatency(Frequency);` -> `Rcc::setFlashLatency();`. + +PR [#180][] -> [c7b35ca][] with **high impact** on STM32 targets. +Tested in hardware by [@salkinium][]. + +#### 2019-02-28: Add RCC driver + +PR [#177][] -> [4a82a94][] with low impact on STM32 targets. +Tested in hardware by [@salkinium][]. + +#### 2019-02-28: Move common Cortex-M code into own module + +Breaking changes: Some options move to `modm:platform:cortex-m` module. + +PR [#176][] -> [dee5ea2][] with **high impact** on STM32 targets. +Tested in hardware by [@salkinium][]. + +#### 2019-02-20: Move lbuild board configs to repo namespace + +Breaking changes: Config inheritance renamed from `modm:board:*` to `modm:*` . + +PR [#171][] -> [564effa][] with **high impact** on all targets. +Tested by [@salkinium][]. + +#### 2019-01-04: Add PAT9125EL motion sensor driver + +PR [#136][] -> [4f25cdf][]. +Tested in hardware by [@chris-durand][]. + +
+ + +## 2019-01-01: Virtual 2018q4 release + +This is a virtual release only for reference that covers everything from +2018-10-01. + +No breaking changes. + +Features: + +- SCons: Multi-repository build script generation. +- AVR: Add libstdc++ +- Doxygen: Refactor Doxygen groups to match lbuild structure. +- STM32F0/F3/F7/L0: Add I2C driver. +- STM32L4: Add SPI (via USART) driver. +- STM32F0: Add ADC driver. + +Fixes: + +- STM32: Timer dead time register mask. +- STM32L4: ADC driver fixed for L4x2. + +New device drivers: + +- PCA9548A I2C multiplex driver as [`modm:driver:pca9548a`][]. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Antal Szabó ([@Sh4rK][]) +- Benjamin Weps ([@nesos][]) 🎉 +- Carl Treudler ([@cajt][]) +- Christopher Durand ([@chris-durand][]) +- Fabian Greif ([@dergraaf][]) +- Jörg Hoffmann ([@19joho66][]) 🎉 +- Kaelin Laundry ([@WasabiFan][]) 🎉 +- Linas Nikiperavicius ([@linasnikis][]) 🎉 +- Mike Wolfram ([@mikewolfram][]) 🎉 +- Niklas Hauser ([@salkinium][]) +- Niklas Meyer ([@Zweistein885][]) 🎉 +- Patrick Servello ([@patrick--][]) 🎉 +- Pavel Pletenev ([@ASMfreaK][]) 🎉 +- Raphael Lehmann ([@rleh][]) +- Sascha Schade ([@strongly-typed][]) +- Sebastian Birke ([@se-bi][]) +- Thomas Figueroa ([@OperativeF][]) 🎉 +- Zawadniak Pedro ([@PDR5][]) 🎉 + +
+Detailed changelog + +#### 2019-11-26: Add PCA9548A I2C multiplex driver + +PR [#81][] -> [77ae899][]. +Tested in hardware by [@strongly-typed][]. + +#### 2019-11-26: Add ADC driver for STM32F0 + +PR [#132][] -> [af2b352][]. +Tested in hardware by [@cajt][]. + +#### 2019-11-10: Add USART-SPI driver for STM32L4 + +PR [#122][] -> [544f6d3][]. +Tested in hardware by [@chris-durand][]. + +#### 2019-11-06: Add I2C driver for STM32F0/F3/F7/L0 + +PR [#118][] -> [e46e7df][]. +Tested in hardware by [@chris-durand][]. + +#### 2019-10-15: Refactor Doxygen groups to match lbuild structure + +PR [#102][] -> [feb1f3c][]. +Tested by [@salkinium][]. + +#### 2019-10-10: Add libstdc++ subset for AVR + +PR [#82][] -> [eba68a4][]. +Tested in hardware by [@chris-durand][]. + +
+ + +## 2018-10-01: Virtual 2018q3 release + +This is a virtual release only for reference that covers everything from +2018-07-01. + +Breaking changes: + +- Move build script generator modules from `modm:build.*` to `modm:build:*` . +- Move XPCC generator to own module `modm:communication:xpcc:generator`. + +Features: + +- Generate LED tables via lbuild. +- STM32F3/L4: Add comparator driver. +- Enable lbuild module for SAB2. +- OpenOCD customization via `openocd.cfg` file. +- Improved GDB TUI debugging with automatic background OpenOCD start/stop. +- A new Homepage! +- A lot of new module documentation. + +Fixes: + +- STM32: Compilation of ADC driver. +- ELF debug section cleanup. + +New development boards: + +- NUCLEO-F042K6 as [`modm:board:nucleo-f042k6`][]. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Amarok McLion ([@amarokmclion][]) 🎉 +- Antal Szabó ([@Sh4rK][]) +- Benjamin Weps ([@nesos][]) 🎉 +- Carl Treudler ([@cajt][]) +- Christopher Durand ([@chris-durand][]) +- Fabian Greif ([@dergraaf][]) +- Jörg Hoffmann ([@19joho66][]) 🎉 +- Kaelin Laundry ([@WasabiFan][]) 🎉 +- Linas Nikiperavicius ([@linasnikis][]) 🎉 +- Niklas Hauser ([@salkinium][]) +- Niklas Meyer ([@Zweistein885][]) 🎉 +- Patrick Servello ([@patrick--][]) 🎉 +- Pavel Pletenev ([@ASMfreaK][]) 🎉 +- Raphael Lehmann ([@rleh][]) +- Sascha Schade ([@strongly-typed][]) +- Sascha Schade (strongly-typed) 🎉 +- Sebastian Birke ([@se-bi][]) 🎉 +- Thomas Figueroa ([@OperativeF][]) 🎉 +- Zawadniak Pedro ([@PDR5][]) 🎉 + +
+Detailed changelog + +#### 2019-08-08: Move XPCC generator to own module + +PR [#58][] -> [cbbf3f6][]. +Tested by [@salkinium][]. + +#### 2019-07-28: Add NUCLEO-F042K6 board + +PR [#43][] -> [fd7b7a3][]. +Tested in hardware by [@cajt][]. + +#### 2019-07-17: Add STM32F3/L4 comparator driver. + +PR [#41][] -> [10fdc3f][]. +Tested in hardware by [@rleh][]. + +
+ + + + +## 2018q2 release + +The predecessor to modm was [xpcc](https://github.com/roboterclubaachen/xpcc), +please check the [xpcc changelog][xpcc_changelog] for releases up to 2018q2. + +During the transition from xpcc to modm from 2016 to 2018 there were many +breaking changes with an overview available in the [porting guide from xpcc to +modm][porting_guide]. + +Please note that contributions from xpcc were continuously ported to modm. + +[porting_guide]: https://github.com/modm-io/modm/blob/c45d0a68/docs/porting_xpcc_to_modm.md +[xpcc_changelog]: https://github.com/roboterclubaachen/xpcc/blob/develop/CHANGELOG.md + + + +[2021q1]: https://github.com/modm-io/modm/releases/tag/2021q1 + +[@19joho66]: https://github.com/19joho66 +[@ASMfreaK]: https://github.com/ASMfreaK +[@FelixPetriconi]: https://github.com/FelixPetriconi +[@OperativeF]: https://github.com/OperativeF +[@PDR5]: https://github.com/PDR5 +[@Sh4rK]: https://github.com/Sh4rK +[@TomSaw]: https://github.com/TomSaw +[@WasabiFan]: https://github.com/WasabiFan +[@Zweistein885]: https://github.com/Zweistein885 +[@amarokmclion]: https://github.com/amarokmclion +[@cajt]: https://github.com/cajt +[@ceremcem]: https://github.com/ceremcem +[@chris-durand]: https://github.com/chris-durand +[@danielk]: https://github.com/danielk +[@delphi]: https://github.com/delphi +[@dergraaf]: https://github.com/dergraaf +[@dhebbeker]: https://github.com/dhebbeker +[@gueldenstone]: https://github.com/gueldenstone +[@henrikssn]: https://github.com/henrikssn +[@jasa]: https://github.com/jasa +[@linasnikis]: https://github.com/linasnikis +[@lukh]: https://github.com/lukh +[@luxarf]: https://github.com/luxarf +[@mcbridejc]: https://github.com/mcbridejc +[@mikewolfram]: https://github.com/mikewolfram +[@nesos]: https://github.com/nesos +[@nicoBruhn]: https://github.com/nicoBruhn +[@patrick--]: https://github.com/patrick-- +[@rleh]: https://github.com/rleh +[@salkinium]: https://github.com/salkinium +[@se-bi]: https://github.com/se-bi +[@strongly-typed]: https://github.com/strongly-typed + +[`modm:board:arduino-nano`]: https://modm.io/reference/module/modm-board-arduino-nano +[`modm:board:devebox-stm32f4xx`]: https://modm.io/reference/module/modm-board-devebox-stm32f4xx +[`modm:board:feather-m0`]: https://modm.io/reference/module/modm-board-feather-m0 +[`modm:board:mega-2560-pro`]: https://modm.io/reference/module/modm-board-mega-2560-pro +[`modm:board:nucleo-f042k6`]: https://modm.io/reference/module/modm-board-nucleo-f042k6 +[`modm:board:nucleo-f303re`]: https://modm.io/reference/module/modm-board-nucleo-f303re +[`modm:board:nucleo-f334r8`]: https://modm.io/reference/module/modm-board-nucleo-f334r8 +[`modm:board:nucleo-f439zi`]: https://modm.io/reference/module/modm-board-nucleo-f439zi +[`modm:board:nucleo-f446re`]: https://modm.io/reference/module/modm-board-nucleo-f446re +[`modm:board:nucleo-f446ze`]: https://modm.io/reference/module/modm-board-nucleo-f446ze +[`modm:board:nucleo-f767zi`]: https://modm.io/reference/module/modm-board-nucleo-f767zi +[`modm:board:nucleo-g431kb`]: https://modm.io/reference/module/modm-board-nucleo-g431kb +[`modm:board:nucleo-g431rb`]: https://modm.io/reference/module/modm-board-nucleo-g431rb +[`modm:board:nucleo-g474re`]: https://modm.io/reference/module/modm-board-nucleo-g474re +[`modm:board:raspberrypi`]: https://modm.io/reference/module/modm-board-raspberrypi +[`modm:board:samd21-mini`]: https://modm.io/reference/module/modm-board-samd21-mini +[`modm:board:stm32_f32ve`]: https://modm.io/reference/module/modm-board-stm32_f32ve +[`modm:driver:apa102`]: https://modm.io/reference/module/modm-driver-apa102 +[`modm:driver:bno055`]: https://modm.io/reference/module/modm-driver-bno055 +[`modm:driver:cat24aa`]: https://modm.io/reference/module/modm-driver-cat24aa +[`modm:driver:encoder.output`]: https://modm.io/reference/module/modm-driver-encoder-output +[`modm:driver:encoder_input.bitbang`]: https://modm.io/reference/module/modm-driver-encoder_input-bitbang +[`modm:driver:gpio-sampler`]: https://modm.io/reference/module/modm-driver-gpio-sampler +[`modm:driver:ili9341`]: https://modm.io/reference/module/modm-driver-ili9341 +[`modm:driver:is31fl3733`]: https://modm.io/reference/module/modm-driver-is31fl3733 +[`modm:driver:lan8720a`]: https://modm.io/reference/module/modm-driver-lan8720a +[`modm:driver:lis3mdl`]: https://modm.io/reference/module/modm-driver-lis3mdl +[`modm:driver:lp503x`]: https://modm.io/reference/module/modm-driver-lp503x +[`modm:driver:lsm6ds33`]: https://modm.io/reference/module/modm-driver-lsm6ds33 +[`modm:driver:max7219`]: https://modm.io/reference/module/modm-driver-max7219 +[`modm:driver:mmc5603`]: https://modm.io/reference/module/modm-driver-mmc5603 +[`modm:driver:pat9125el`]: https://modm.io/reference/module/modm-driver-pat9125el +[`modm:driver:pca9548a`]: https://modm.io/reference/module/modm-driver-pca9548a +[`modm:driver:sk6812`]: https://modm.io/reference/module/modm-driver-sk6812 +[`modm:driver:sk9822`]: https://modm.io/reference/module/modm-driver-sk9822 +[`modm:driver:stusb4500`]: https://modm.io/reference/module/modm-driver-stusb4500 +[`modm:driver:sx1276`]: https://modm.io/reference/module/modm-driver-sx1276 +[`modm:driver:tlc594x`]: https://modm.io/reference/module/modm-driver-tlc594x +[`modm:driver:ws2812`]: https://modm.io/reference/module/modm-driver-ws2812 + +[#102]: https://github.com/modm-io/modm/pull/102 +[#118]: https://github.com/modm-io/modm/pull/118 +[#122]: https://github.com/modm-io/modm/pull/122 +[#132]: https://github.com/modm-io/modm/pull/132 +[#136]: https://github.com/modm-io/modm/pull/136 +[#153]: https://github.com/modm-io/modm/pull/153 +[#167]: https://github.com/modm-io/modm/pull/167 +[#171]: https://github.com/modm-io/modm/pull/171 +[#176]: https://github.com/modm-io/modm/pull/176 +[#177]: https://github.com/modm-io/modm/pull/177 +[#180]: https://github.com/modm-io/modm/pull/180 +[#187]: https://github.com/modm-io/modm/pull/187 +[#190]: https://github.com/modm-io/modm/pull/190 +[#191]: https://github.com/modm-io/modm/pull/191 +[#194]: https://github.com/modm-io/modm/pull/194 +[#198]: https://github.com/modm-io/modm/pull/198 +[#199]: https://github.com/modm-io/modm/pull/199 +[#210]: https://github.com/modm-io/modm/pull/210 +[#217]: https://github.com/modm-io/modm/pull/217 +[#218]: https://github.com/modm-io/modm/pull/218 +[#219]: https://github.com/modm-io/modm/pull/219 +[#228]: https://github.com/modm-io/modm/pull/228 +[#240]: https://github.com/modm-io/modm/pull/240 +[#241]: https://github.com/modm-io/modm/pull/241 +[#242]: https://github.com/modm-io/modm/pull/242 +[#253]: https://github.com/modm-io/modm/pull/253 +[#254]: https://github.com/modm-io/modm/pull/254 +[#267]: https://github.com/modm-io/modm/pull/267 +[#285]: https://github.com/modm-io/modm/pull/285 +[#287]: https://github.com/modm-io/modm/pull/287 +[#302]: https://github.com/modm-io/modm/pull/302 +[#306]: https://github.com/modm-io/modm/pull/306 +[#310]: https://github.com/modm-io/modm/pull/310 +[#318]: https://github.com/modm-io/modm/pull/318 +[#321]: https://github.com/modm-io/modm/pull/321 +[#326]: https://github.com/modm-io/modm/pull/326 +[#343]: https://github.com/modm-io/modm/pull/343 +[#346]: https://github.com/modm-io/modm/pull/346 +[#351]: https://github.com/modm-io/modm/pull/351 +[#361]: https://github.com/modm-io/modm/pull/361 +[#364]: https://github.com/modm-io/modm/pull/364 +[#366]: https://github.com/modm-io/modm/pull/366 +[#371]: https://github.com/modm-io/modm/pull/371 +[#372]: https://github.com/modm-io/modm/pull/372 +[#374]: https://github.com/modm-io/modm/pull/374 +[#376]: https://github.com/modm-io/modm/pull/376 +[#382]: https://github.com/modm-io/modm/pull/382 +[#395]: https://github.com/modm-io/modm/pull/395 +[#396]: https://github.com/modm-io/modm/pull/396 +[#400]: https://github.com/modm-io/modm/pull/400 +[#417]: https://github.com/modm-io/modm/pull/417 +[#418]: https://github.com/modm-io/modm/pull/418 +[#41]: https://github.com/modm-io/modm/pull/41 +[#420]: https://github.com/modm-io/modm/pull/420 +[#426]: https://github.com/modm-io/modm/pull/426 +[#428]: https://github.com/modm-io/modm/pull/428 +[#430]: https://github.com/modm-io/modm/pull/430 +[#436]: https://github.com/modm-io/modm/pull/436 +[#437]: https://github.com/modm-io/modm/pull/437 +[#43]: https://github.com/modm-io/modm/pull/43 +[#444]: https://github.com/modm-io/modm/pull/444 +[#445]: https://github.com/modm-io/modm/pull/445 +[#448]: https://github.com/modm-io/modm/pull/448 +[#462]: https://github.com/modm-io/modm/pull/462 +[#466]: https://github.com/modm-io/modm/pull/466 +[#471]: https://github.com/modm-io/modm/pull/471 +[#475]: https://github.com/modm-io/modm/pull/475 +[#478]: https://github.com/modm-io/modm/pull/478 +[#482]: https://github.com/modm-io/modm/pull/482 +[#485]: https://github.com/modm-io/modm/pull/485 +[#489]: https://github.com/modm-io/modm/pull/489 +[#490]: https://github.com/modm-io/modm/pull/490 +[#495]: https://github.com/modm-io/modm/pull/495 +[#497]: https://github.com/modm-io/modm/pull/497 +[#499]: https://github.com/modm-io/modm/pull/499 +[#521]: https://github.com/modm-io/modm/pull/521 +[#526]: https://github.com/modm-io/modm/pull/526 +[#533]: https://github.com/modm-io/modm/pull/533 +[#535]: https://github.com/modm-io/modm/pull/535 +[#556]: https://github.com/modm-io/modm/pull/556 +[#557]: https://github.com/modm-io/modm/pull/557 +[#558]: https://github.com/modm-io/modm/pull/558 +[#564]: https://github.com/modm-io/modm/pull/564 +[#571]: https://github.com/modm-io/modm/pull/571 +[#574]: https://github.com/modm-io/modm/pull/574 +[#578]: https://github.com/modm-io/modm/pull/578 +[#580]: https://github.com/modm-io/modm/pull/580 +[#58]: https://github.com/modm-io/modm/pull/58 +[#591]: https://github.com/modm-io/modm/pull/591 +[#597]: https://github.com/modm-io/modm/pull/597 +[#81]: https://github.com/modm-io/modm/pull/81 +[#82]: https://github.com/modm-io/modm/pull/82 +[#96]: https://github.com/modm-io/modm/pull/96 + +[00471ca]: https://github.com/modm-io/modm/commit/00471ca +[0217a19]: https://github.com/modm-io/modm/commit/0217a19 +[022a60a]: https://github.com/modm-io/modm/commit/022a60a +[02b1571]: https://github.com/modm-io/modm/commit/02b1571 +[038657c]: https://github.com/modm-io/modm/commit/038657c +[04688bc]: https://github.com/modm-io/modm/commit/04688bc +[0994a55]: https://github.com/modm-io/modm/commit/0994a55 +[10fdc3f]: https://github.com/modm-io/modm/commit/10fdc3f +[11ffe92]: https://github.com/modm-io/modm/commit/11ffe92 +[141aa71]: https://github.com/modm-io/modm/commit/141aa71 +[165adf0]: https://github.com/modm-io/modm/commit/165adf0 +[195f7e1]: https://github.com/modm-io/modm/commit/195f7e1 +[1a11b08]: https://github.com/modm-io/modm/commit/1a11b08 +[1fc3805]: https://github.com/modm-io/modm/commit/1fc3805 +[21af57b]: https://github.com/modm-io/modm/commit/21af57b +[22867e0]: https://github.com/modm-io/modm/commit/22867e0 +[23ec952]: https://github.com/modm-io/modm/commit/23ec952 +[276f5b3]: https://github.com/modm-io/modm/commit/276f5b3 +[3072005]: https://github.com/modm-io/modm/commit/3072005 +[399a533]: https://github.com/modm-io/modm/commit/399a533 +[3ecad35]: https://github.com/modm-io/modm/commit/3ecad35 +[43f32e6]: https://github.com/modm-io/modm/commit/43f32e6 +[47adfd6]: https://github.com/modm-io/modm/commit/47adfd6 +[48d73dc]: https://github.com/modm-io/modm/commit/48d73dc +[4a82a94]: https://github.com/modm-io/modm/commit/4a82a94 +[4ab28fe]: https://github.com/modm-io/modm/commit/4ab28fe +[4ce1a47]: https://github.com/modm-io/modm/commit/4ce1a47 +[4f25cdf]: https://github.com/modm-io/modm/commit/4f25cdf +[4ff604f]: https://github.com/modm-io/modm/commit/4ff604f +[5332765]: https://github.com/modm-io/modm/commit/5332765 +[544f6d3]: https://github.com/modm-io/modm/commit/544f6d3 +[564effa]: https://github.com/modm-io/modm/commit/564effa +[5dd598c]: https://github.com/modm-io/modm/commit/5dd598c +[62b63f5]: https://github.com/modm-io/modm/commit/62b63f5 +[62ccc26]: https://github.com/modm-io/modm/commit/62ccc26 +[64d177a]: https://github.com/modm-io/modm/commit/64d177a +[66c0868]: https://github.com/modm-io/modm/commit/66c0868 +[6e5ebf4]: https://github.com/modm-io/modm/commit/6e5ebf4 +[72d5ae9]: https://github.com/modm-io/modm/commit/72d5ae9 +[77ae899]: https://github.com/modm-io/modm/commit/77ae899 +[78d18f6]: https://github.com/modm-io/modm/commit/78d18f6 +[7d1f7cc]: https://github.com/modm-io/modm/commit/7d1f7cc +[7df2e7d]: https://github.com/modm-io/modm/commit/7df2e7d +[8082f69]: https://github.com/modm-io/modm/commit/8082f69 +[80a9c66]: https://github.com/modm-io/modm/commit/80a9c66 +[821677b]: https://github.com/modm-io/modm/commit/821677b +[850b554]: https://github.com/modm-io/modm/commit/850b554 +[85eec34]: https://github.com/modm-io/modm/commit/85eec34 +[8820d6b]: https://github.com/modm-io/modm/commit/8820d6b +[8c322a2]: https://github.com/modm-io/modm/commit/8c322a2 +[9381fd0]: https://github.com/modm-io/modm/commit/9381fd0 +[9b6aeee]: https://github.com/modm-io/modm/commit/9b6aeee +[9d8bbfa]: https://github.com/modm-io/modm/commit/9d8bbfa +[9e285db]: https://github.com/modm-io/modm/commit/9e285db +[a607613]: https://github.com/modm-io/modm/commit/a607613 +[a6b4186]: https://github.com/modm-io/modm/commit/a6b4186 +[a8edbe8]: https://github.com/modm-io/modm/commit/a8edbe8 +[af2b352]: https://github.com/modm-io/modm/commit/af2b352 +[afaea7f]: https://github.com/modm-io/modm/commit/afaea7f +[afbd533]: https://github.com/modm-io/modm/commit/afbd533 +[b010775]: https://github.com/modm-io/modm/commit/b010775 +[b570d07]: https://github.com/modm-io/modm/commit/b570d07 +[b721551]: https://github.com/modm-io/modm/commit/b721551 +[b8648be]: https://github.com/modm-io/modm/commit/b8648be +[c38550a]: https://github.com/modm-io/modm/commit/c38550a +[c63a536]: https://github.com/modm-io/modm/commit/c63a536 +[c7b35ca]: https://github.com/modm-io/modm/commit/c7b35ca +[cb82eec]: https://github.com/modm-io/modm/commit/cb82eec +[cbbf3f6]: https://github.com/modm-io/modm/commit/cbbf3f6 +[cbce428]: https://github.com/modm-io/modm/commit/cbce428 +[d21e991]: https://github.com/modm-io/modm/commit/d21e991 +[d2d38a0]: https://github.com/modm-io/modm/commit/d2d38a0 +[d3496a3]: https://github.com/modm-io/modm/commit/d3496a3 +[d8be0a2]: https://github.com/modm-io/modm/commit/d8be0a2 +[dc56af2]: https://github.com/modm-io/modm/commit/dc56af2 +[dee5ea2]: https://github.com/modm-io/modm/commit/dee5ea2 +[df47974]: https://github.com/modm-io/modm/commit/df47974 +[e233708]: https://github.com/modm-io/modm/commit/e233708 +[e3ba913]: https://github.com/modm-io/modm/commit/e3ba913 +[e46e7df]: https://github.com/modm-io/modm/commit/e46e7df +[eba68a4]: https://github.com/modm-io/modm/commit/eba68a4 +[fb21f62]: https://github.com/modm-io/modm/commit/fb21f62 +[fb2ff58]: https://github.com/modm-io/modm/commit/fb2ff58 +[fd7b7a3]: https://github.com/modm-io/modm/commit/fd7b7a3 +[feb1f3c]: https://github.com/modm-io/modm/commit/feb1f3c + + diff --git a/README.md b/README.md index bd8d9f8c40..f36d0a4dc9 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,7 @@ process that you can fine-tune to your needs. - Our CI checks every contribution for regressions. - We care [about testing modm][testing]. - [API reference is available here][api-docs]. - - +- [We do quarterly releases][releases] with a [curated changelog][changelog]. This project also has a [technical blog][blog] to document larger design concepts. @@ -602,8 +601,12 @@ Fabian Greif ([\@dergraaf](https://github.com/dergraaf)), Kevin Läufer ([\@ekiwi](https://github.com/ekiwi)), Martin Rosekeit ([\@thundernail](https://github.com/thundernail)), Daniel Krebs ([\@daniel-k](https://github.com/daniel-k)), -Georgi Grinshpun ([\@georgi-g](https://github.com/georgi-g)) -and 33 more contributors. +Georgi Grinshpun ([\@georgi-g](https://github.com/georgi-g)), +Christopher Durand ([\@chris-durand](https://github.com/chris-durand)) +David Hebbeker ([\@dhebbeker](https://github.com/dhebbeker)), +Thorsten Lajewski ([\@TheTh0r](https://github.com/TheTh0r)), +Mike Wolfram ([\@mikewolfram](https://github.com/mikewolfram)) +and [many more contributors][contributors]. ## Folder structure @@ -642,8 +645,11 @@ and 33 more contributors. + [blog]: https://blog.salkinium.com -[changelog]: https://github.com/modm-io/modm/tree/develop/docs/CHANGELOG.md +[changelog]: https://github.com/modm-io/modm/tree/develop/CHANGELOG.md +[releases]: https://github.com/modm-io/modm/releases +[contributors]: https://github.com/modm-io/modm/graphs/contributors [contrib]: https://github.com/modm-io/modm/tree/develop/CONTRIBUTING.md [eurobot]: https://www.eurobot.org/ [examples]: https://github.com/modm-io/modm/tree/develop/examples @@ -652,21 +658,11 @@ and 33 more contributors. [install]: https://modm.io/guide/installation [issues]: https://github.com/modm-io/modm/issues [prs]: https://github.com/modm-io/modm/pulls -[releases]: https://github.com/modm-io/modm/releases [testing]: https://github.com/modm-io/modm/tree/develop/test/README.md [api-docs]: https://docs.modm.io/ [FreeRTOS]: https://www.freertos.org -[FreeRTOS-TCP]: https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html -[CMSIS]: https://www.keil.com/pack/doc/CMSIS/General/html/index.html -[CMSIS-DSP]: https://www.keil.com/pack/doc/CMSIS/DSP/html/index.html -[TinyUSB]: https://github.com/hathach/tinyusb -[FatFS]: http://elm-chan.org/fsw/ff/00index_e.html -[ROSserial]: https://wiki.ros.org/rosserial -[CrashCatcher]: https://github.com/adamgreen/CrashCatcher - -[FreeRTOS]: https://www.freertos.org -[FreeRTOS-TCP]: https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html +[FreeRTOS+TCP]: https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html [CMSIS]: https://www.keil.com/pack/doc/CMSIS/General/html/index.html [CMSIS-DSP]: https://www.keil.com/pack/doc/CMSIS/DSP/html/index.html [TinyUSB]: https://github.com/hathach/tinyusb diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md deleted file mode 100644 index e6a2e41041..0000000000 --- a/docs/CHANGELOG.md +++ /dev/null @@ -1,1143 +0,0 @@ -# Changelog - -The purpose of this changelog is to give a good overview of the changes in modm. -It is an editorialized version of the git history, with features, PRs and fixes -chosen for their importance to modm users as judged by the maintainer. -This means that not every small commit makes it in here. - -
-Changelog format - -The release summaries are formatted as: - -> #### yyyy-mm-dd: yyyyqn release -> -> Breaking changes: [list] -> Major features: [list] -> Fixes: [list] -> Known bugs: [list] -> New development board targets: [list] -> New device drivers: [list] -> Contributors: [list] -> -> PR #[GitHub] -> [release tag]. - -With a more detailed changelog below with this format: - -> ##### yyyy-mm-dd: [summary] -> -> [detailed summary] -> -> PR #[GitHub] -> [sha1] (with [level] impact (on [scope])). -> Tested in hardware by [contributor]. - -Note that `-> [sha1]` means "all changes up to and including this commit" which -needs to be interpreted in the context of the git history. -This usually corresponds to the changes in the Pull Request on GitHub though. - -This changelog also labels the changes with an impact and usually also scopes -them to the relevant subset of modm code or targets. -This describes the anticipated impact of these changes on users of modm and has -four levels: - -1. No impact mentioned: No influence. Adds new features and does not touch existing code. -2. Low impact: No expected influence. Modifies modm in a backwards compatible way. -3. Medium impact: Likely influence. Modifies modm in a non-backwards compatible way. -4. High impact: Definite influence. Breaks the API within the scope. - -High impact changes are explicitly called out in the release notes for you to -pay attention to. Medium impact changes are also worth looking at. - -
- -## 2018-01-07: 2017q4 release - -This release covers everything from the 2017q3 release on 2017-10-01 and has been -tested with avr-gcc v5.4.0 from Atmel and arm-none-eabi-gcc 2017q4 from Arm. - -Breaking changes: - -- No breaking changes. - -Major features: - -- SCons 3 and Python 3 support for built tools -- All targets build with C++14 by default -- Rosserial support -- LPC support (revival) - -Major fixes: - -- Fix the I2C driver on STM32L0/L4 for writes/reads > 255 bytes. -- Fix matrix multiplication and LU decomposition -- Fix `GpioPort` setOutput()/setInput()/configure() on STM32 -- Fix Hd44780 initialization for 4-bit bus -- Fix GCC7-specific compile errors and warnings - -Known bugs: - -- modm may generate separate IRQ handlers for shared interrupts. See [#88][]. -- GPIO `connect` on STM32F1 is still broken. See [#178][] for discussion. - The API from modm will not be backported to modm however. -- STM32F107 does not compile due to the HAL trying to remap USB. See [#268][]. -- SCons build system emits multiple non-critical warnings. See [#286][]. -- avr-gcc 7 complains about dynamic initialization put into program memory area. See [#314][]. - -New development board targets: - -- No new development board targets - -New device drivers: - -- No new device drivers - -Many thanks to all our contributors. -A special shoutout to first timers (🎉🎊): - -- Álan Crístoffer ([@acristoffers][]) 🎉🎊 -- Andre Gilerson ([@AndreGilerson][]) 🎉🎊 -- Carl Treudler ([@cajt][]) -- Christopher Durand ([@chris-durand][]) -- Marten Junga ([@Maju-Ketchup][]) -- Michael Thies ([@mhthies][]) -- Niklas Hauser ([@salkinium][]) -- Raphael Lehmann ([@rleh][]) -- Sascha Schade ([@strongly-typed][]) - -PR [#325][] -> [2017q4][]. - -
-Detailed changelog - -#### 2018-01-07: Fix HD44780 initialization for 4-bit bus - -Adds missing bitshift to write the correct nibble to enable 4-bit mode. - -PR [#326][] -> [42837c7][] with low impact on HD44780 driver. -Tested in hardware by [@acristoffers][]. - -#### 2018-01-07: Fix GpioPort setOutput()/setInput()/configure() on STM32 - -Fixes wrong offset of a port mask used to configure output, input and pullups. - -PR ? -> [6328b4a][] with low impact on STM32 targets. -Tested in hardware by [@salkinium][]. - -#### 2018-01-07: Update CMSIS headers for STM32 - -PR [#324][] -> [857e514][] with **medium impact** on STM32 targets. -Tested in hardware by [@salkinium][]. - -#### 2018-01-03: Use C++ stdlib instead of boost for hosted RTOS - -Replaces the hosted implementation of our RTOS interface with the C++ stdlib to reduce our dependence on boost for threading. - -PR [#322][] -> [5ef8009][] with low impact on hosted targets. - -#### 2018-01-03: Python 3 support for SConscripts and related tools - -SCons 3.0 features support for both Python 3.5+ and Python 2.7. -These changes make all build and tool scripts compatible with -both versions and adapt the CI systems too. - -PR [#297][] -> [3b47fa5][] with low impact on all build tools. - -#### 2017-12-20: Enable C++14 for all targets by default - -This is possible since Atmel's offical avr-gcc is now >= v5.4.0. - -PR [#320][] -> [68e73b3][] with low impact on all targets. - -#### 2017-12-19: Fix matrix multiplication and LU-decomposition - -Matrix height and width parameters were switched. - -PR [#318][] -> [c4ed672][] with **medium impact** on matrix math. -Tested in hardware by [@Maju-Ketchup][]. - -#### 2017-12-18: Fix printing of uint64_t in iostream - -Only the lower 32 bits of an uint64_t were shown in iostream. - -PR [#315][] -> [2c898ae][] with **medium impact** on printing 64-bit numbers. -Tested in hardware by [@Maju-Ketchup][]. - -#### 2017-11-09: Add rosserial to communicate with ROS - -Allows using modm for embedded sensor aquisition and interacting with a ROS robot across a serial link via ROS messages. - -PR [#306][] -> [78c3ae2][]. -Tested in hardware by [@strongly-typed][]. - -#### 2017-10-27: Revive LPC11C24 with GPIO, UART and CAN - -"out of curiosity" - -PR [#305][] -> [48d60e2][] with **medium impact** on LPC targets. -Tested in hardware by [@strongly-typed][]. - -#### 2017-10-24: Fix negative temperatures and round integer for LTC298x - -PR [#301][] -> [6aee411][] with **medium impact** on negative LTC298x data. -Tested in hardware by [@rleh][]. - -#### 2017-10-15: Add CircleCI integration - -PR [#298][] -> [c5f8170][]. - -#### 2017-10-12: Fix the I2C on STM32L4 - -Correctly generates restart condition on writes > 255 bytes. - -PR [#299][] -> [3d9d80f][] with low impact on STM32L0/L4 targets. -Tested in hardware by [@strongly-typed][]. - -
- - -## 2017-10-01: 2017q3 release - -This release covers everything from the 2017q2 release on 2017-07-02 and has been -tested with avr-gcc v5.4.0 from Atmel and arm-none-eabi-gcc 2017q2 from Arm. -Note, that Arm did not release 6-2017-q3-update for their toolchain this quarter. - -Breaking changes: - -- MCP2515 revival adds new `initialize` API - -Major features: - -- No major features - -Major fixes: - -- Fix pin remap access (MAPR2 register) for STM32F1 XL Density series -- Fix moving average for negative averages -- Fix printf format string type violations - -Known bugs: - -- modm may generate separate IRQ handlers for shared interrupts. See [#88][]. -- GPIO `connect` on STM32F1 is still broken. See [#178][] for discussion. - The API from modm will not be backported to modm however. -- STM32L0/L4 hardware I2C driver has limitations on restart behaviors. See [#255][]. -- STM32F107 does not compile due to the HAL trying to remap USB. See [#268][]. -- SCons build system emits multiple non-critical warnings. See [#286][]. -- SCons 3.0 was released, however, our build system is not fully compatible. See [#293][]. - -New development board targets: - -- OLIMEXINO-STM32 as `olimexino_stm32` -- STM32F051R-DISCO as `stm32f0_discovery` - -New device drivers: - -- AD79x8 -- LTC298x -- AMSYS5915 -- MCP2515 (revived) - -Many thanks to all our contributors. -A special shoutout to first timers (🎉🎊): - -- Carl Treudler ([@cajt][]) 🎉🎊 -- Christopher Durand ([@chris-durand][]) -- Daniel Krebs ([@daniel-k][]) -- Marten Junga ([@Maju-Ketchup][]) 🎉🎊 -- Michael Thies ([@mhthies][]) -- Niklas Hauser ([@salkinium][]) -- Raphael Lehmann ([@rleh][]) -- Sascha Schade ([@strongly-typed][]) - -PR [#296][] -> [2017q3][]. - -
-Detailed changelog - -#### 2017-10-01: Update CMSIS headers for STM32 - -PR [#295][] -> [e1f056a][] with **medium impact** on STM32 targets. -Tested in hardware by [@salkinium][]. - -#### 2017-09-21: Add OLIMEXINO-STM32 board and example - -PR [#288][] -> [9d6620d][]. -Tested in hardware by [@cajt][]. - -#### 2017-08-24: Add DISCO-F051R8 board and example - -PR [#284][] -> [51491ad][]. -Tested in hardware by [@strongly-typed][]. - -#### 2017-08-22: Revive MCP2515 driver and add 8 MHz config - -Tested in hardware with 8 MHz external crystal for -10, 20, 50, 100, 125, 250, 500 and 1000 kBps with -STM32 bxCAN and oscilloscope with protocol decoder. - -PR [#278][] -> [b77294e][] with **high impact** on MCP2515 driver users. -Tested in hardware by [@strongly-typed][]. - -#### 2017-08-14: Fix moving average for negative averages - -Since template parameter N is defined as `std::size_t` which is unsigned, -the result of the average calculation will be implicitly casted and -therefore negative averages gave wrong results. - -PR [#272][] -> [e14ba68][] with **medium impact** on filter algorithms. - -#### 2017-08-12: Add pressure sensor AMSYS5915 driver - -PR [#275][] -> [fc59fc0][]. -Tested in hardware by [@rleh][]. - -#### 2017-08-12: Add temperature sensor LTC298x driver - -PR [#273][] -> [a27ca5d][]. -Tested in hardware by [@rleh][]. - -#### 2017-08-11: Add ADC AD79x8 driver - -PR [#274][] -> [680c92a][]. -Tested in hardware by [@chris-durand][]. - -#### 2017-07-25: Fix printf format string warnings - -PR [#270][] -> [8cc5c78][] with low impact. - -#### 2017-07-19: Fix pin remap access for STM32F1 - -Fix pin remap access (MAPR2 register) for STM32F1 XL Density series - -PR [#269][] -> [06b5af9][] with **medium impact** on STM32F1 targets. -Tested in hardware by [@strongly-typed][]. - -#### 2017-07-08: Add Python 3 support to modm xml parser - -The modm (the protocol) tools now work with both Python2 and Python3. - -PR [#261][] -> [fc2f33b][] with low impact. - -#### 2017-07-04: Check arguments of printf format string - -Now the compiler checks the format string for any type violations. - -PR [#263][] -> [3f50e1d][] with low impact. - -
- - -## 2017-07-02: 2017q2 release - -This release covers everything from the 2017q1 release on 2017-04-05 and has been -tested with avr-gcc v5.4.0 from Atmel and arm-none-eabi-gcc 2017q2 from ARM. - -Breaking changes: - -- No breaking changes - -Major features: - -- STM32L4 target support and drivers -- Improve assert implementation and make use of them - -Major fixes: - -- Fix issues and warnings in release tests -- Fix wrong `ns_per_loop` rounding in board definitions - -Known bugs: - -- modm may generate separate IRQ handlers for shared interrupts. See [#88][]. -- GPIO `connect` on STM32F1 is still broken. See [#178][] for discussion. - The API from modm will not be backported to modm however. -- STM32L0/L4 hardware I2C driver has limitations on restart behaviors. See [#255][]. - -New development board targets: - -- NUCLEO-L476RG as `nucleo_l476rg` -- STM32L476G-DISCO as `stm32l476_discovery` - -New device drivers: - -- DS1302 -- TCS3472X - -Many thanks to all our contributors. -A special shoutout to first timers (🎉🎊): - -- Arjun Sarin 🎉🎊 -- Michael Thies ([@mhthies][]) -- Niklas Hauser ([@salkinium][]) -- Sascha Schade ([@strongly-typed][]) - -PR [#262][] -> [2017q2][]. - -
-Detailed changelog - -#### 2017-06-28: Fix and improve the release tests - -PR [#254][] -> [f2ac1a0][]. -Tested in hardware by [@strongly-typed][]. - -#### 2017-05-14: Add STM32L4 hardware ADC driver - -PR [#249][] -> [29c8905][]. -Tested in hardware by [@strongly-typed][]. - -#### 2017-05-14: Add STM32L0/L4 hardware I2C driver - -PR [#248][] -> [51159ff][]. -Tested in hardware by [@strongly-typed][]. - -#### 2017-05-13: Add RTC DS1302 driver - -PR [#251][] -> [40da657][]. -Tested in hardware by [@strongly-typed][]. - -#### 2017-05-11: Fix compiler warnings of AVR release tests - -PR [#253][] -> [9018741][]. - -#### 2017-05-07: Improve implementation, add asserts - -- Make header C-compatible so asserts can be called from C. -- Specialize `assert_fail` function for context value. -- Return condition from `modm_assert` for error handling. -- Remove `exit()` calls from implementation. -- Add assertions to core. -- Update F469-DISCO assert example. - -PR [#247][] -> [3992534][] with low impact. -Tested in hardware by [@salkinium][]. - -#### 2017-05-02: Add platform support for STM32L4 family - -- Updates the DFG and SCons for STM32L4 family. -- Fixes AF issues with TimerN BreakIn signal. -- Adds ports of drivers for STM32L4 family. -- Adds BSPs for STM32L476 Nucleo and Discovery. -- Adds examples for STM32L476 Nucleo and Discovery. - -PR [#240][] -> [e9591d5][] with **medium impact** on STM32 targets. -Tested in hardware by [@strongly-typed][]. - -#### 2017-04-29: Implement %p in printf - -PR [#246][] -> [a906c2d][]. - -#### 2017-04-27: Add TCS3472X color sensor driver - -PR [#244][] -> [68b904e][]. - -#### 2017-04-27: Fix UART for F0x0 series. - -UART does not have LIN or Smartcard mode. - -PR [#243][] -> [7111cd3][]. - -
- - -## 2017-04-05: 2017q1 release - -As this is our first official release it covers the last 12 months of -development since 2016-04-01. - -Breaking changes: - -- Fix implicit conversion of Flags -- Refactor `buffer` to `display_buffer` in `BufferedGraphicDisplay` -- Fix spelling of `SpiMaster::acquire` -- Namespace architecture/util.hpp macros -- `stm32f7_discovery` renamed to `stm32f746g_discovery` - -Major features: - -- Runtime error model using assertion handlers -- Memory traits to heap regions and allocators -- TLSF allocator -- Link against newlib-nosys and newlib-nano -- Unified interrupt declaration conventions -- Black Magic Probe programming support -- ARM Cortex-M7 with double precision FPU -- ZeroMQ as transport layer for modm -- Update STM32 header and device files -- Namespace architecture/util.hpp macros -- Coding conventions -- Porting guide - -Major fixes: - -- Fix implicit conversion of Flags -- Fix I2C master reception of 2B transfers -- Fix spelling of `SpiMaster::acquire` - -Known bugs: - -- modm may generate separate IRQ handlers for shared interrupts. See [#88][]. -- GPIO `connect` on STM32F1 is broken. They can be remapped only in groups, - however, the API allows invalid remapping. This cannot be fixed without - introducing a new API for that. See [#178][] for discussion. - A solution has been tested for modm, but isn't ready for modm. - -New development board targets: - -- NUCLEO-F031K6 as `nucleo_f031k6` -- NUCLEO-F303K8 as `nucleo_f303k8` -- NUCLEO-F401RE as `nucleo_f401re` -- NUCLEO-F411RE as `nucleo_f411re` -- NUCLEO-F429ZI as `nucleo_f429zi` -- STM32F769I-DISCO as `stm32f769i_discovery` -- STM32F469I-DISCO as `stm32f469_discovery` -- STM32F103 board "Blue Pill" as `stm32f103c8t6_blue_pill` - -New device drivers: - -- VL53L0X -- BME280 -- ADNS9800 -- FT6x06 - -Many thanks to all our contributors. -A special shoutout to first timers (🎉🎊): - -- Antal Szabó ([@Sh4rK][]) -- Christopher Durand ([@chris-durand][]) 🎉🎊 -- Daniel Krebs ([@daniel-k][]) -- Fabian Greif ([@dergraaf][]) -- Georgi Grinshpun ([@georgi-g][]) -- Julia Gutheil 🎉🎊 -- Kevin Läufer ([@ekiwi][]) -- Michael Thies ([@mhthies][]) 🎉🎊 -- Nick Sarten ([@genbattle][]) 🎉🎊 -- Niklas Hauser ([@salkinium][]) -- Raphael Lehmann ([@rleh][]) 🎉🎊 -- Sascha Schade ([@strongly-typed][]) -- Tarik TIRE ([@7Kronos][]) 🎉🎊 -- Tomasz Chyrowicz ([@tomchy][]) 🎉🎊 - -PR [#237][] -> [2017q1][]. - -
-Detailed changelog - -#### 2017-04-03: Improve BoundedDeque - -Adds `get()`, `rget()`, `[]` operator and `appendOverwrite()`, -`prependOverwrite()` to `BoundedDeque` to access elements by id, e.g. -to do a binary search on ordered elements in the deque and to use the -BoundedDeque as a ring buffer. - -PR [#229][] -> [8f9b154][]. - -#### 2017-04-02: Link against newlib-nosys - -Adds `--specs=nosys.specs` to linker flags. - -PR [#235][] -> [0e7e57f][] with low impact on ARM Cortex-M targets. -Tested in hardware by [@salkinium][]. - -#### 2017-03-02: Add VL53L0X driver and example - -This is some beautiful driver code. - -PR [#234][] -> [553dceb][]. -Tested in hardware by [@chris-durand][]. - -#### 2017-03-02: Add NUCLEO-F401RE board and example - -PR [#231][] -> [f472f7f][]. -Tested in hardware by [@strongly-typed][]. - -#### 2017-03-25: Fix implicit conversion of Flags - -Conversion of Flags to an associated `FlagsGroup` will now work -correctly even when multiple enum constants or flag variables are -combined with logical operators. - -The bool conversion of flags classes is implemented in terms of -`explicit operator bool()` to fix issues with function overloading -on Flags parameters. - -The explicit operator will only allow implicit casts where contextual -conversion takes place, which is more restrictive than the previous -implementation. It will occur in the following contexts: - -- conditions of if, while, for, do-while statements -- logical operators (&&, ||) -- negation (operator !) -- static_assert - -This may break user code that requires implicit bool conversions on -other occasions, for instance in return statements. - -PR [#230][] -> [fcf27a1][] with **high impact** due to breaking API change. - -#### 2017-03-24: Refactor `buffer` to `display_buffer` in `BufferedGraphicDisplay` - -This prevents confusion over which `buffer` to use when also inheriting from an -`I2cTransaction` class. - -PR [#194][] -> [e1efaf4][] with **high impact** on display drivers due to breaking API change. - -#### 2017-03-19: Add coding conventions - -They've temporarily been lost. - -PR [#224][] -> [c7adb48][]. - -#### 2017-03-19: Add NUCLEO-F031K6 board and example - -PR [#221][] -> [f780c2a][]. -Tested in hardware by [@genbattle][]. - -#### 2017-03-19: Update and add all device headers and files - -This replaces the STM32 device headers in ext/st/ with a git subtree -of modm-io/cmsis-header-stm32 and updates the DFG to work for STM32L -devices and adds all available device files. - -PR [#226][] -> [da784bd][] with **medium impact** on STM32 targets. -Tested in hardware by [@salkinium][]. - -#### 2017-01-25: Fix ZeroMQ communication backend - -This fixes several issues in the ZeroMQ backend. - -PR [#194][] -> [a8a2322][] with low impact. - -#### 2016-12-10: Require Identifier for modm containers - -In the progress of adding raw Ethernet frames as a backend for modm -communication, each container requires a unique id. - -When using CAN as a backend filtering is done by component id. -Normally, each CAN controller has enough filters to accommodate up to -ten components per container. E.g. STM32F4 has 14 CAN filters. - -When moving to Ethernet, the Ethernet MAC controller only has two or -six filters which may be not enough. The filters are more difficult to -configure. - -The fifth byte of the MAC address will be used for the container Id and -the sixth byte for the component Id. -MAC filtering then can be easily implemented by filtering for the first -five bytes of the MAC address. - -There is no overhead for CAN communication as container Id is omitted. - -PR [#204][] -> [5f5934a][] with low impact. - -#### 2016-12-10: Windows MinGW compilation support - -PR [#202][] -> [dd3639b][] with low impact. -Tested in hardware by [@7Kronos][]. - -#### 2016-11-20: Add unified interrupt declaration conventions - -Adds macros for a unified interrupt declaration across all platforms -and regardless of being declared in C or C++ source code. -This allows us to change the interrupt invocation mechanism in the -future without modifying the source code. - -In total four macros are added: - -- `MODM_ISR(vector, attributes...)` for declaring a static ISR with - attributes (e.g. `modm_fastcode`). -- `MODM_ISR_NAME(vector)` for getting the platform specific ISR name. -- `MODM_ISR_DECL(vector)` for forward declarations of ISRs. -- `MODM_ISR_CALL(vector)` for calling ISRs manually from code. - -`MODM_ISR_NAME(vector)` is backwards compatible, mapping to -`{vector}_vect` on AVR and `{vector}_IRQHandler` on ARM Cortex-M. -Consequently, the vector name is now used without `_vect` or -`_IRQHandler` suffixes and all occurrences have been renamed. - -PR [#185][] -> [13904f8][] with low impact. - -#### 2016-11-16: Add runtime error model using assertion handlers - -This adds a mechanism for asserting runtime conditions on all platforms. -The application can specify failure handlers that get called on assertion -failure and can specify abandonment behavior depending on the failure. -The abandonment handler can also be overwritten to provide application -specific behavior, like blinking an LED or logging the failure. - -For details see: http://blog.salkinium.com/modms-error-model - -PR [#185][] -> [13904f8][] with low impact. -Tested in hardware by [@salkinium][]. - -#### 2016-10-15: Allow setting compiler optimization level - -The optimization level can be set in `project.cfg` as -`build.optimization=level` and overwritten using the command line -argument `optimization=level`. - -PR [#196][] -> [c12a69b][]. - -#### 2016-10-03: Add BME280 driver and example - -PR [#195][] -> [5e547ab][]. -Tested in hardware by [@strongly-typed][]. - -#### 2016-10-03: Add ZeroMQ as transport layer for modm and example - -This feature adds a ZeroMQ implementation of the modm backend as a -replacement for TIPC on hosted targets and examples to show this new -functionality. - -PR [#176][] -> [a00d3cc][]. -Tested in hardware by [@strongly-typed][]. - -#### 2016-10-02: Add Black Magic Probe support and example - -PR [#194][] -> [b21f502][]. -Tested in hardware by [@strongly-typed][]. - -#### 2016-09-22: Add naming schema to device files - -Adds a 'naming-schema' and 'invalid-device' tag to the device files to -allow to enumerate all valid device names from the device files alone. -Removes the size_id attribute for AVRs because it is redundant with -the name and not used by the AVR DFG merger. -Uses local imports in the Python code and therefore removes the need -to update the python path in every file. - -PR [#189][] -> [d949fee][] with low impact. - -#### 2016-09-21: Deduplicate and clean up linker scripts - -Deduplication by using Jinja2 macros to deduplicate the linker script -formatting followed by clean up of unused linker sections. - -PR [#188][] -> [a379e61][] with low impact on ARM Cortex-M targets. -Tested in hardware by [@salkinium][]. - -#### 2016-09-20: Link against newlib-nano - -Adds `--specs=nano.specs` to linker flags. -This saves up to 2kB of static data and ~1.5kB of code. - -PR [#187][] -> [cb0a11e][] with **medium impact** on ARM Cortex-M targets. -Tested in hardware by [@salkinium][]. - -#### 2016-09-17: Update DFG and fix driver issues - -This change updates the device file generator (DFG) to generate the -patches we added to the device files manually now automatically. -Any drivers that needed minor changes due to this were updated. - -PR [#183][] -> [08784cd][] with low impact. - -#### 2016-09-15: Add IOStream formatter for function pointers - -PR [#186][] -> [bb3fa3a][]. - -#### 2016-09-10: Namespace architecture/util.hpp macros - -The `modm/architecture/util.hpp` macros have been renamed and -properly documented. -A new header `modm/architecture/legacy_macros.hpp` contains backwards -compatible mappings for application code. All occurrences of the non- -namespaced macros in modm have been replaced. The backwards-compatible -mapping can be disabled by declaring the `MODM_DISABLE_LEGACY_MACROS` -macro to the compiler. - -- ALWAYS_INLINE -> modm_always_inline -- ATTRIBUTE_UNUSED -> modm_unused -- ATTRIBUTE_WEAK -> modm_weak -- ATTRIBUTE_ALIGNED(n) -> modm_aligned(n) -- ATTRIBUTE_PACKED -> modm_packed -- ATTRIBUTE_FASTCODE -> modm_fastcode -- ATTRIBUTE_FASTDATA -> modm_fastdata -- ATTRIBUTE_MAY_ALIAS -> modm_may_alias -- CONCAT(a,b) -> MODM_CONCAT(a,b) -- STRINGIFY(a) -> MODM_STRINGIFY(a) -- MOD_RRAY_SIZE(x) -> MODM_ARRAY_SIZE(x) -- likely(x) -> modm_likely(x) -- unlikely(x) -> modm_unlikely(x) - -Note that the `ENUM_CLASS_FLAG` was replaced with `modm::Flags32` and -is not completely backwards compatible (`Interrupt` vs `Interrupt_t`). - -PR [#182][] -> [9940a65][] with **high impact** due to breaking API change. - -#### 2016-09-06: Simplify and clean up cortex/core driver - -Includes better handling of platform specific startup code, a better -location for linkerscripts and minor code cleanup. - -PR [#180][] -> [0dbf73c][] with low impact on ARM Cortex-M targets. -Tested in hardware by [@salkinium][]. - -#### 2016-09-03: Add a porting guide - -PR [#179][] -> [0dbf73c][]. - -#### 2016-08-25: Add ADNS9800 driver and example - -PR [#175][] -> [26471ab][]. -Tested in hardware by [@strongly-typed][]. - -#### 2016-08-25: Add STM32F769I Discovery board and example - -PR [#173][] -> [3c7cd31][]. -Tested in hardware by [@strongly-typed][]. - -#### 2016-08-25: Support ARM Cortex-M7 with double precision FPU - -Adds build system and startup script support for ARM Cortex-M7 with double -precision FPU as well as CI tests. - -PR [#173][] -> [c605416][] with low impact on STM32 devices. -Tested in hardware by [@strongly-typed][]. - -#### 2016-08-25: Update STM32 header and device files - -Update to the latest CMSIS device headers for STM32 and adds a few new device -files. - -PR [#168][] -> [84d5bd0][] with **medium impact** on STM32 devices. -Tested in hardware by [@salkinium][]. - -#### 2016-08-14: Fix spelling of `SpiMaster::acquire` - -Apparently `acquire` is spelled with a `c`. This fix breaks the API, sorry! - -PR [#167][] -> [fd1b109][] with **high impact** on drivers due to breaking API change. - -#### 2016-08-04: Rename STM32F7 Discovery board name - -There are more than one STM32F7 Discovery board available, this renames -the `stm32f7_discovery` board target to `stm32f746g_discovery` - -PR [#165][] -> [637e074][] with **high impact** on STM32F7 targets. - -#### 2016-07-20: Add Blue Pill board and examples - -Add board support for STM32F103C8T6 Minimum System Development, aka. -"Blue Pill", and examples. - -PR [#154][] -> [7ab0132][]. -Tested in hardware by [@strongly-typed][]. - -#### 2016-07-09: Add FT6x06 driver and example - -PR [#155][] -> [63ad1d3][]. -Tested in hardware by [@salkinium][]. - -#### 2016-07-09: Add display driver for STM32F469I-DISCO - -Adds initialization code and examples for the DSI and display found on the board. - -PR [#155][] -> [0118a13][]. -Tested in hardware by [@salkinium][]. - -#### 2016-06-23: Add memory traits to heap regions and allocators - -A heap table in the linkerscript describes the memory regions with their traits. -The allocator implementation reads this table to initialize the heaps. -To allocate memory, the heap that fits the requested traits best is chosen. - -Three heap algorithms can be chosen from using the modm parameters: - -- newlib's dlmalloc (default): Chooses largest continuous heap from page table. -- modm's block allocator: Chooses largest heap from page table. -- TLSF: Uses all heaps in the table. - -Overloading of the new operator in C++ is provided: -```cpp -Foo *foo = new (modm::MemoryFastData) Foo(args); -``` - -Finally, linkerscripts can be extended to include additional memory regions -that include static data and bss as well as heap sections. - -PR [#147][] -> [e2f9b4a][] with low impact on ARM Cortex-M targets with TLSF allocator. -Tested in hardware by [@salkinium][]. - -#### 2016-06-12: Add NUCLEO-F303K8 board and example - -PR [#145][] -> [6c1a111][]. -Tested in hardware by [@salkinium][]. - -#### 2016-06-12: Add NUCLEO-F429ZI board and example - -PR ? -> [2504682][]. -Tested in hardware by [@salkinium][]. - -#### 2016-06-12: Replace SystemClock with manual implementation - -This replaces the very dynamic `modm::stm32::SystemClock` with a fake -SystemClock class that is hardcoded to a specific clock speed. -This makes porting to new boards easier. - -PR [#144][] -> [170f53a][] with **medium impact** on STM32 board targets. -Tested in hardware by [@salkinium][]. - -#### 2016-05-29: Add operator overloads to Config/Value - -This introduces the FlagsOperators class which contains nothing else but -the bitwise operators overloads and comparison functions. -This class in then inherited from for the Flags, Configurations and -Value classes, enabling transparent use of these operator overloads -between the classes. - -PR [#143][] -> [a6519c3][] with low impact. - -#### 2016-05-19: Add NUCLEO-F411RE board and example - -PR [#138][] -> [e346020][]. -Tested in hardware by [@salkinium][]. - -#### 2016-05-17: Revert default allocator to newlib - -Overwriting the weak functions in newlib regarding malloc does not work -correctly. - -PR [#137][] -> [967c0a9][]. - -#### 2016-05-15: Fix I2C master reception of 2B transfers - -This bug was discovered on the F103 platform, where the first byte of 2B -receive transfers was not acknowledged by the master. -This resulted in the slave device never placing the data for the 2nd -byte on the bus, effectively "sending" 0xff as the second byte. - -PR [#129][] -> [408c309][]. -Tested in hardware by [@strongly-typed][]. - -#### 2016-05-03: Enable running unittests on AVR and STM32 targets - -These changes fix the embedded test runners for AVR and STM32 targets, -and fixes bugs in the unit test source code that come from using the -cross compilers (float vs. double tolerances, type promotions, etc). - -PR [#155][] -> [41ab22a][]. - -#### 2016-04-16: Add TLSF allocator and enable by default - -These changes add the TLSF implementation from http://tlsf.baisoku.org -and enable it by default, completely replacing the newlib allocator. - -Up to three arenas are constructed: - -- SRAM: with `.heap1`, `.heap2` if available and `.heap3` if available -- CCM or DTCM: with `.heap0` if available -- ITCM: with `.heap4` if available - -These three functions are provided: - -- `malloc`: Uses SRAM by default, falls back to CCM if SRAM is full -- `realloc`: determines source arena by pointer address -- `free`: determines source arena by pointer address - -PR [#115][] -> [ffa4e1b][] with **medium impact** on ARM Cortex-M targets. -Tested in hardware by [@salkinium][]. - -
- -## Changes previous to 2016-04 - -Please interpret the git history for older changes. - - - - - -[2017q1]: https://github.com/roboterclubaachen/xpcc/releases/tag/2017q1 -[2017q2]: https://github.com/roboterclubaachen/xpcc/releases/tag/2017q2 -[2017q3]: https://github.com/roboterclubaachen/xpcc/releases/tag/2017q3 -[2017q4]: https://github.com/roboterclubaachen/xpcc/releases/tag/2017q4 - - -[@7Kronos]: https://github.com/7Kronos -[@acristoffers]: https://github.com/acristoffers -[@AndreGilerson]: https://github.com/AndreGilerson -[@cajt]: https://github.com/cajt -[@chris-durand]: https://github.com/chris-durand -[@daniel-k]: https://github.com/daniel-k -[@dergraaf]: https://github.com/dergraaf -[@ekiwi]: https://github.com/ekiwi -[@genbattle]: https://github.com/genbattle -[@georgi-g]: https://github.com/georgi-g -[@Maju-Ketchup]: https://github.com/Maju-Ketchup -[@mhthies]: https://github.com/mhthies -[@rleh]: https://github.com/rleh -[@salkinium]: https://github.com/salkinium -[@Sh4rK]: https://github.com/Sh4rK -[@strongly-typed]: https://github.com/strongly-typed -[@tomchy]: https://github.com/tomchy - - -[#88]: https://github.com/roboterclubaachen/xpcc/pull/88 -[#115]: https://github.com/roboterclubaachen/xpcc/pull/115 -[#129]: https://github.com/roboterclubaachen/xpcc/pull/129 -[#137]: https://github.com/roboterclubaachen/xpcc/pull/137 -[#138]: https://github.com/roboterclubaachen/xpcc/pull/138 -[#143]: https://github.com/roboterclubaachen/xpcc/pull/143 -[#144]: https://github.com/roboterclubaachen/xpcc/pull/144 -[#145]: https://github.com/roboterclubaachen/xpcc/pull/145 -[#147]: https://github.com/roboterclubaachen/xpcc/pull/147 -[#154]: https://github.com/roboterclubaachen/xpcc/pull/154 -[#155]: https://github.com/roboterclubaachen/xpcc/pull/155 -[#165]: https://github.com/roboterclubaachen/xpcc/pull/165 -[#167]: https://github.com/roboterclubaachen/xpcc/pull/167 -[#168]: https://github.com/roboterclubaachen/xpcc/pull/168 -[#173]: https://github.com/roboterclubaachen/xpcc/pull/173 -[#175]: https://github.com/roboterclubaachen/xpcc/pull/175 -[#176]: https://github.com/roboterclubaachen/xpcc/pull/176 -[#178]: https://github.com/roboterclubaachen/xpcc/pull/178 -[#179]: https://github.com/roboterclubaachen/xpcc/pull/179 -[#180]: https://github.com/roboterclubaachen/xpcc/pull/180 -[#182]: https://github.com/roboterclubaachen/xpcc/pull/182 -[#183]: https://github.com/roboterclubaachen/xpcc/pull/183 -[#185]: https://github.com/roboterclubaachen/xpcc/pull/185 -[#186]: https://github.com/roboterclubaachen/xpcc/pull/186 -[#187]: https://github.com/roboterclubaachen/xpcc/pull/187 -[#188]: https://github.com/roboterclubaachen/xpcc/pull/188 -[#189]: https://github.com/roboterclubaachen/xpcc/pull/189 -[#194]: https://github.com/roboterclubaachen/xpcc/pull/194 -[#195]: https://github.com/roboterclubaachen/xpcc/pull/195 -[#196]: https://github.com/roboterclubaachen/xpcc/pull/196 -[#202]: https://github.com/roboterclubaachen/xpcc/pull/202 -[#204]: https://github.com/roboterclubaachen/xpcc/pull/204 -[#221]: https://github.com/roboterclubaachen/xpcc/pull/221 -[#224]: https://github.com/roboterclubaachen/xpcc/pull/224 -[#226]: https://github.com/roboterclubaachen/xpcc/pull/226 -[#229]: https://github.com/roboterclubaachen/xpcc/pull/229 -[#230]: https://github.com/roboterclubaachen/xpcc/pull/230 -[#231]: https://github.com/roboterclubaachen/xpcc/pull/231 -[#234]: https://github.com/roboterclubaachen/xpcc/pull/234 -[#235]: https://github.com/roboterclubaachen/xpcc/pull/235 -[#237]: https://github.com/roboterclubaachen/xpcc/pull/237 -[#240]: https://github.com/roboterclubaachen/xpcc/pull/240 -[#243]: https://github.com/roboterclubaachen/xpcc/pull/243 -[#244]: https://github.com/roboterclubaachen/xpcc/pull/244 -[#246]: https://github.com/roboterclubaachen/xpcc/pull/246 -[#247]: https://github.com/roboterclubaachen/xpcc/pull/247 -[#248]: https://github.com/roboterclubaachen/xpcc/pull/248 -[#249]: https://github.com/roboterclubaachen/xpcc/pull/249 -[#251]: https://github.com/roboterclubaachen/xpcc/pull/251 -[#253]: https://github.com/roboterclubaachen/xpcc/pull/253 -[#254]: https://github.com/roboterclubaachen/xpcc/pull/254 -[#255]: https://github.com/roboterclubaachen/xpcc/pull/255 -[#261]: https://github.com/roboterclubaachen/xpcc/pull/261 -[#262]: https://github.com/roboterclubaachen/xpcc/pull/262 -[#263]: https://github.com/roboterclubaachen/xpcc/pull/263 -[#268]: https://github.com/roboterclubaachen/xpcc/pull/268 -[#269]: https://github.com/roboterclubaachen/xpcc/pull/269 -[#270]: https://github.com/roboterclubaachen/xpcc/pull/270 -[#272]: https://github.com/roboterclubaachen/xpcc/pull/272 -[#273]: https://github.com/roboterclubaachen/xpcc/pull/273 -[#274]: https://github.com/roboterclubaachen/xpcc/pull/274 -[#275]: https://github.com/roboterclubaachen/xpcc/pull/275 -[#278]: https://github.com/roboterclubaachen/xpcc/pull/278 -[#284]: https://github.com/roboterclubaachen/xpcc/pull/284 -[#286]: https://github.com/roboterclubaachen/xpcc/pull/286 -[#288]: https://github.com/roboterclubaachen/xpcc/pull/288 -[#293]: https://github.com/roboterclubaachen/xpcc/pull/293 -[#295]: https://github.com/roboterclubaachen/xpcc/pull/295 -[#296]: https://github.com/roboterclubaachen/xpcc/pull/296 -[#297]: https://github.com/roboterclubaachen/xpcc/pull/297 -[#298]: https://github.com/roboterclubaachen/xpcc/pull/298 -[#299]: https://github.com/roboterclubaachen/xpcc/pull/299 -[#301]: https://github.com/roboterclubaachen/xpcc/pull/301 -[#305]: https://github.com/roboterclubaachen/xpcc/pull/305 -[#306]: https://github.com/roboterclubaachen/xpcc/pull/306 -[#314]: https://github.com/roboterclubaachen/xpcc/pull/314 -[#315]: https://github.com/roboterclubaachen/xpcc/pull/315 -[#318]: https://github.com/roboterclubaachen/xpcc/pull/318 -[#320]: https://github.com/roboterclubaachen/xpcc/pull/320 -[#322]: https://github.com/roboterclubaachen/xpcc/pull/322 -[#324]: https://github.com/roboterclubaachen/xpcc/pull/324 -[#325]: https://github.com/roboterclubaachen/xpcc/pull/325 -[#326]: https://github.com/roboterclubaachen/xpcc/pull/326 - - -[0118a13]: https://github.com/roboterclubaachen/xpcc/commit/0118a13 -[06b5af9]: https://github.com/roboterclubaachen/xpcc/commit/06b5af9 -[08784cd]: https://github.com/roboterclubaachen/xpcc/commit/08784cd -[0dbf73c]: https://github.com/roboterclubaachen/xpcc/commit/0dbf73c -[0dbf73c]: https://github.com/roboterclubaachen/xpcc/commit/0dbf73c -[0e7e57f]: https://github.com/roboterclubaachen/xpcc/commit/0e7e57f -[13904f8]: https://github.com/roboterclubaachen/xpcc/commit/13904f8 -[13904f8]: https://github.com/roboterclubaachen/xpcc/commit/13904f8 -[170f53a]: https://github.com/roboterclubaachen/xpcc/commit/170f53a -[2504682]: https://github.com/roboterclubaachen/xpcc/commit/2504682 -[26471ab]: https://github.com/roboterclubaachen/xpcc/commit/26471ab -[29c8905]: https://github.com/roboterclubaachen/xpcc/commit/29c8905 -[2c898ae]: https://github.com/roboterclubaachen/xpcc/commit/2c898ae -[3992534]: https://github.com/roboterclubaachen/xpcc/commit/3992534 -[3b47fa5]: https://github.com/roboterclubaachen/xpcc/commit/3b47fa5 -[3c7cd31]: https://github.com/roboterclubaachen/xpcc/commit/3c7cd31 -[3d9d80f]: https://github.com/roboterclubaachen/xpcc/commit/3d9d80f -[3f50e1d]: https://github.com/roboterclubaachen/xpcc/commit/3f50e1d -[408c309]: https://github.com/roboterclubaachen/xpcc/commit/408c309 -[40da657]: https://github.com/roboterclubaachen/xpcc/commit/40da657 -[41ab22a]: https://github.com/roboterclubaachen/xpcc/commit/41ab22a -[42837c7]: https://github.com/roboterclubaachen/xpcc/commit/42837c7 -[48d60e2]: https://github.com/roboterclubaachen/xpcc/commit/48d60e2 -[51159ff]: https://github.com/roboterclubaachen/xpcc/commit/51159ff -[51491ad]: https://github.com/roboterclubaachen/xpcc/commit/51491ad -[553dceb]: https://github.com/roboterclubaachen/xpcc/commit/553dceb -[5e547ab]: https://github.com/roboterclubaachen/xpcc/commit/5e547ab -[5ef8009]: https://github.com/roboterclubaachen/xpcc/commit/5ef8009 -[5f5934a]: https://github.com/roboterclubaachen/xpcc/commit/5f5934a -[6328b4a]: https://github.com/roboterclubaachen/xpcc/commit/6328b4a -[637e074]: https://github.com/roboterclubaachen/xpcc/commit/637e074 -[63ad1d3]: https://github.com/roboterclubaachen/xpcc/commit/63ad1d3 -[680c92a]: https://github.com/roboterclubaachen/xpcc/commit/680c92a -[68b904e]: https://github.com/roboterclubaachen/xpcc/commit/68b904e -[68e73b3]: https://github.com/roboterclubaachen/xpcc/commit/68e73b3 -[6aee411]: https://github.com/roboterclubaachen/xpcc/commit/6aee411 -[6c1a111]: https://github.com/roboterclubaachen/xpcc/commit/6c1a111 -[7111cd3]: https://github.com/roboterclubaachen/xpcc/commit/7111cd3 -[78c3ae2]: https://github.com/roboterclubaachen/xpcc/commit/78c3ae2 -[7ab0132]: https://github.com/roboterclubaachen/xpcc/commit/7ab0132 -[84d5bd0]: https://github.com/roboterclubaachen/xpcc/commit/84d5bd0 -[857e514]: https://github.com/roboterclubaachen/xpcc/commit/857e514 -[8cc5c78]: https://github.com/roboterclubaachen/xpcc/commit/8cc5c78 -[8f9b154]: https://github.com/roboterclubaachen/xpcc/commit/8f9b154 -[9018741]: https://github.com/roboterclubaachen/xpcc/commit/9018741 -[967c0a9]: https://github.com/roboterclubaachen/xpcc/commit/967c0a9 -[9940a65]: https://github.com/roboterclubaachen/xpcc/commit/9940a65 -[9d6620d]: https://github.com/roboterclubaachen/xpcc/commit/9d6620d -[a00d3cc]: https://github.com/roboterclubaachen/xpcc/commit/a00d3cc -[a27ca5d]: https://github.com/roboterclubaachen/xpcc/commit/a27ca5d -[a379e61]: https://github.com/roboterclubaachen/xpcc/commit/a379e61 -[a6519c3]: https://github.com/roboterclubaachen/xpcc/commit/a6519c3 -[a8a2322]: https://github.com/roboterclubaachen/xpcc/commit/a8a2322 -[a906c2d]: https://github.com/roboterclubaachen/xpcc/commit/a906c2d -[b21f502]: https://github.com/roboterclubaachen/xpcc/commit/b21f502 -[b77294e]: https://github.com/roboterclubaachen/xpcc/commit/b77294e -[bb3fa3a]: https://github.com/roboterclubaachen/xpcc/commit/bb3fa3a -[c12a69b]: https://github.com/roboterclubaachen/xpcc/commit/c12a69b -[c4ed672]: https://github.com/roboterclubaachen/xpcc/commit/c4ed672 -[c5f8170]: https://github.com/roboterclubaachen/xpcc/commit/c5f8170 -[c605416]: https://github.com/roboterclubaachen/xpcc/commit/c605416 -[c7adb48]: https://github.com/roboterclubaachen/xpcc/commit/c7adb48 -[cb0a11e]: https://github.com/roboterclubaachen/xpcc/commit/cb0a11e -[d949fee]: https://github.com/roboterclubaachen/xpcc/commit/d949fee -[da784bd]: https://github.com/roboterclubaachen/xpcc/commit/da784bd -[dd3639b]: https://github.com/roboterclubaachen/xpcc/commit/dd3639b -[e14ba68]: https://github.com/roboterclubaachen/xpcc/commit/e14ba68 -[e1efaf4]: https://github.com/roboterclubaachen/xpcc/commit/e1efaf4 -[e1f056a]: https://github.com/roboterclubaachen/xpcc/commit/e1f056a -[e2f9b4a]: https://github.com/roboterclubaachen/xpcc/commit/e2f9b4a -[e346020]: https://github.com/roboterclubaachen/xpcc/commit/e346020 -[e9591d5]: https://github.com/roboterclubaachen/xpcc/commit/e9591d5 -[f2ac1a0]: https://github.com/roboterclubaachen/xpcc/commit/f2ac1a0 -[f472f7f]: https://github.com/roboterclubaachen/xpcc/commit/f472f7f -[f780c2a]: https://github.com/roboterclubaachen/xpcc/commit/f780c2a -[fc2f33b]: https://github.com/roboterclubaachen/xpcc/commit/fc2f33b -[fc59fc0]: https://github.com/roboterclubaachen/xpcc/commit/fc59fc0 -[fcf27a1]: https://github.com/roboterclubaachen/xpcc/commit/fcf27a1 -[fd1b109]: https://github.com/roboterclubaachen/xpcc/commit/fd1b109 -[ffa4e1b]: https://github.com/roboterclubaachen/xpcc/commit/ffa4e1b diff --git a/docs/release/2018q3.md b/docs/release/2018q3.md new file mode 100644 index 0000000000..a2cc290e7d --- /dev/null +++ b/docs/release/2018q3.md @@ -0,0 +1,71 @@ +## 2018-10-01: Virtual 2018q3 release + +This is a virtual release only for reference that covers everything from +2018-07-01. + +Breaking changes: + +- Move build script generator modules from `modm:build.*` to `modm:build:*` . +- Move XPCC generator to own module `modm:communication:xpcc:generator`. + +Features: + +- Generate LED tables via lbuild. +- STM32F3/L4: Add comparator driver. +- Enable lbuild module for SAB2. +- OpenOCD customization via `openocd.cfg` file. +- Improved GDB TUI debugging with automatic background OpenOCD start/stop. +- A new Homepage! +- A lot of new module documentation. + +Fixes: + +- STM32: Compilation of ADC driver. +- ELF debug section cleanup. + +New development boards: + +- NUCLEO-F042K6 as `modm:board:nucleo-f042k6`. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Amarok McLion (@amarokmclion) 🎉 +- Antal Szabó (@Sh4rK) +- Benjamin Weps (@nesos) 🎉 +- Carl Treudler (@cajt) +- Christopher Durand (@chris-durand) +- Fabian Greif (@dergraaf) +- Jörg Hoffmann (@19joho66) 🎉 +- Kaelin Laundry (@WasabiFan) 🎉 +- Linas Nikiperavicius (@linasnikis) 🎉 +- Niklas Hauser (@salkinium) +- Niklas Meyer (@Zweistein885) 🎉 +- Patrick Servello (@patrick--) 🎉 +- Pavel Pletenev (@ASMfreaK) 🎉 +- Raphael Lehmann (@rleh) +- Sascha Schade (@strongly-typed) +- Sascha Schade (strongly-typed) 🎉 +- Sebastian Birke (@se-bi) 🎉 +- Thomas Figueroa (@OperativeF) 🎉 +- Zawadniak Pedro (@PDR5) 🎉 + +
+Detailed changelog + +#### 2019-08-08: Move XPCC generator to own module + +PR #58 -> cbbf3f6. +Tested by @salkinium. + +#### 2019-07-28: Add NUCLEO-F042K6 board + +PR #43 -> fd7b7a3. +Tested in hardware by @cajt. + +#### 2019-07-17: Add STM32F3/L4 comparator driver. + +PR #41 -> 10fdc3f. +Tested in hardware by @rleh. + +
diff --git a/docs/release/2018q4.md b/docs/release/2018q4.md new file mode 100644 index 0000000000..0980bd76cb --- /dev/null +++ b/docs/release/2018q4.md @@ -0,0 +1,81 @@ +## 2019-01-01: Virtual 2018q4 release + +This is a virtual release only for reference that covers everything from +2018-10-01. + +No breaking changes. + +Features: + +- SCons: Multi-repository build script generation. +- AVR: Add libstdc++ +- Doxygen: Refactor Doxygen groups to match lbuild structure. +- STM32F0/F3/F7/L0: Add I2C driver. +- STM32L4: Add SPI (via USART) driver. +- STM32F0: Add ADC driver. + +Fixes: + +- STM32: Timer dead time register mask. +- STM32L4: ADC driver fixed for L4x2. + +New device drivers: + +- PCA9548A I2C multiplex driver as `modm:driver:pca9548a`. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Antal Szabó (@Sh4rK) +- Benjamin Weps (@nesos) 🎉 +- Carl Treudler (@cajt) +- Christopher Durand (@chris-durand) +- Fabian Greif (@dergraaf) +- Jörg Hoffmann (@19joho66) 🎉 +- Kaelin Laundry (@WasabiFan) 🎉 +- Linas Nikiperavicius (@linasnikis) 🎉 +- Mike Wolfram (@mikewolfram) 🎉 +- Niklas Hauser (@salkinium) +- Niklas Meyer (@Zweistein885) 🎉 +- Patrick Servello (@patrick--) 🎉 +- Pavel Pletenev (@ASMfreaK) 🎉 +- Raphael Lehmann (@rleh) +- Sascha Schade (@strongly-typed) +- Sebastian Birke (@se-bi) +- Thomas Figueroa (@OperativeF) 🎉 +- Zawadniak Pedro (@PDR5) 🎉 + +
+Detailed changelog + +#### 2019-11-26: Add PCA9548A I2C multiplex driver + +PR #81 -> 77ae899. +Tested in hardware by @strongly-typed. + +#### 2019-11-26: Add ADC driver for STM32F0 + +PR #132 -> af2b352. +Tested in hardware by @cajt. + +#### 2019-11-10: Add USART-SPI driver for STM32L4 + +PR #122 -> 544f6d3. +Tested in hardware by @chris-durand. + +#### 2019-11-06: Add I2C driver for STM32F0/F3/F7/L0 + +PR #118 -> e46e7df. +Tested in hardware by @chris-durand. + +#### 2019-10-15: Refactor Doxygen groups to match lbuild structure + +PR #102 -> feb1f3c. +Tested by @salkinium. + +#### 2019-10-10: Add libstdc++ subset for AVR + +PR #82 -> eba68a4. +Tested in hardware by @chris-durand. + +
diff --git a/docs/release/2019q1.md b/docs/release/2019q1.md new file mode 100644 index 0000000000..34ab8c4889 --- /dev/null +++ b/docs/release/2019q1.md @@ -0,0 +1,96 @@ +## 2020-04-01: Virtual 2019q1 release + +This is a virtual release only for reference that covers everything from +2019-01-01. + +Breaking changes: + +- All inheritable lbuild board configs are moved from `modm:board:*` to `modm:*`. +- Split `modm:platform:core` module into `modm:platform:cortex-m` module. +- Refactor SysTick and RCC module. + +Features: + +- Black Magic Probe upload support. +- STM32: RCC driver with enable()/disable() functions for clocks. +- Cortex-M: Add option to link with flash offset for bootloaders. +- STM32G0 support! + +Fixes: + +- HD44780: 4-bit initialization. +- NUCLEO-F303K8: Fix SystemClock for CAN. + +New device drivers: + +- PAT9125EL motion sensor driver as `modm:driver:pat9125el`. +- MAX7219 LED matrix driver as `modm:driver:max7219`. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Christopher Durand (@chris-durand) +- Fabian Greif (@dergraaf) +- Niklas Hauser (@salkinium) +- Patrick Servello (@patrick--) 🎉 +- Pavel Pletenev (@ASMfreaK) 🎉 +- Raphael Lehmann (@rleh) +- Sascha Schade (@strongly-typed) +- Sebastian Birke (@se-bi) +- Thomas Figueroa (@OperativeF) 🎉 +- Zawadniak Pedro (@PDR5) 🎉 + +
+Detailed changelog + + +#### 2019-02-06: Add MAX7219 LED matrix driver + +PR #187 -> 5dd598c. +Tested in hardware by @dergraaf. + +#### 2019-03-26: Add MAX7219 LED matrix driver + +PR #187 -> 5dd598c. +Tested in hardware by @dergraaf. + +#### 2019-03-06: Add STM32G0 support + +PR #167 -> 399a533. +Tested in hardware by @salkinium. + +#### 2019-03-06: Refactor SysTick and RCC module + +Breaking changes: + +- `modm:platform:clock.cortex` -> `modm:platform:systick`. +- `Rcc::setFlashLatency(Frequency);` -> `Rcc::setFlashLatency();`. + +PR #180 -> c7b35ca with **high impact** on STM32 targets. +Tested in hardware by @salkinium. + +#### 2019-02-28: Add RCC driver + +PR #177 -> 4a82a94 with low impact on STM32 targets. +Tested in hardware by @salkinium. + +#### 2019-02-28: Move common Cortex-M code into own module + +Breaking changes: Some options move to `modm:platform:cortex-m` module. + +PR #176 -> dee5ea2 with **high impact** on STM32 targets. +Tested in hardware by @salkinium. + +#### 2019-02-20: Move lbuild board configs to repo namespace + +Breaking changes: Config inheritance renamed from `modm:board:*` to `modm:*` . + +PR #171 -> 564effa with **high impact** on all targets. +Tested by @salkinium. + +#### 2019-01-04: Add PAT9125EL motion sensor driver + +PR #136 -> 4f25cdf. +Tested in hardware by @chris-durand. + +
diff --git a/docs/release/2019q2.md b/docs/release/2019q2.md new file mode 100644 index 0000000000..9ce0c3547f --- /dev/null +++ b/docs/release/2019q2.md @@ -0,0 +1,82 @@ +## 2019-07-01: Virtual 2019q2 release + +This is a virtual release only for reference that covers everything from +2019-04-01. + +Breaking changes: + +- Upgrade to AWS a:FreeRTOS v10 with generic port to all Cortex-M devices. +- `modm::endl` does not flush the IOStream anymore. + +Features: + +- New printf implementation with better overall syntax support. +- Simple CRC32 implementation. +- Cortex-M: CrashCatcher integration for post-mortem debugging of HardFaults. +- Cortex-M: ITM driver with UART interface. +- Cortex-M: GNU Build ID integration. + +Fixes: + +- AVR: UART driver for some devices. + +New development boards: + +- Arduino NANO as `modm:board:arduino-nano`. +- NUCLEO-F446RE as `modm:board:nucleo-f446re`. + +New device drivers: + +- WS2812 RGB LED driver as `modm:driver:ws2812`. + +Many thanks to all our contributors: + +- Antal Szabó (@Sh4rK) +- Niklas Hauser (@salkinium) +- Pavel Pletenev (@ASMfreaK) +- Sascha Schade (@strongly-typed) +- Sebastian Birke (@se-bi) + +
+Detailed changelog + +#### 2019-06-06: Add NUCLEO-F446RE board and examples + +PR #228 -> 9381fd0. +Tested in hardware by @se-bi. + +#### 2019-06-06: Add GNU Build ID to firmware + +PR #219 -> a607613. +Tested in hardware by @salkinium. + +#### 2019-05-26: Add ITM driver + +PR #218 -> 47adfd6. +Tested in hardware by @salkinium. + +#### 2019-05-14: Integrate CrashCatcher + +Removes previous hard fault LED toggling in favor of much better solution. + +PR #210 -> 4ab28fe with low impact on STM32 targets. +Tested in hardware by @salkinium. + +#### 2019-05-09: Upgrade to AWS a:FreeRTOS v10 + +Breaking changes: Previous port only worked on STM32F4 with our own patches. + +PR #198 -> 66c0868 with **high impact** on STM32F4 targets. +Tested in hardware by @salkinium. + +#### 2019-05-03: Refactor printf implementation + +PR #199 -> 4ce1a47 with low impact on all targets. +Tested in hardware by @salkinium. + +#### 2019-04-06: Add WS2812 RGB LED driver + +PR #190 -> a6b4186. +Tested in hardware by @salkinium. + +
diff --git a/docs/release/2019q3.md b/docs/release/2019q3.md new file mode 100644 index 0000000000..5792c4a4a7 --- /dev/null +++ b/docs/release/2019q3.md @@ -0,0 +1,91 @@ +## 2019-10-01: Virtual 2019q3 release + +This is a virtual release only for reference that covers everything from +2019-07-01. + +Breaking changes: + +- Modularized CMSIS-DSP integration. +- Refactored CMake build script generator. +- Refactored NRF24 radio driver. +- Removal of deprecated TIPC XPCC backend. +- Removal of deprecated SDL display driver. + +Features: + +- Remove hardcoded OpenOCD programmer for some boards. +- AVR: size reporting. +- CMake: Support multi-repository builds. +- `HARDWARE_INIT` helper macro for linker section. + +Fixes: + +- STM32: Acknowledge external interrupt flags. +- STM32: Shared ADC interrupt. + +New device drivers: + +- BNO055 IMU driver as `modm:driver:bno055`. +- TLC594x PWM driver as `modm:driver:tlc594x`. +- APA102 RGB LED driver as `modm:driver:apa102`. +- SK6812 RGB LED driver as `modm:driver:sk6812`. + +Known bugs: + +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See #285. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Benjamin Weps (@nesos) +- Carl Treudler (@cajt) +- Jörg Hoffmann (@19joho66) 🎉 +- Kaelin Laundry (@WasabiFan) 🎉 +- Linas Nikiperavicius (@linasnikis) 🎉 +- Niklas Hauser (@salkinium) +- Pavel Pletenev (@ASMfreaK) +- Sascha Schade (@strongly-typed) + +
+Detailed changelog + + +#### 2019-08-07: Add APA102 and SK6812 LED drivers + +PR #267 -> 72d5ae9. +Tested in hardware by @salkinium. + +#### 2019-07-24: Refactor NRF24 radio driver + +PR #253 -> 22867e0. +Tested in hardware by @danielk. + +#### 2019-07-15: Refactor CMake build script generator + +PR #254 -> 00471ca. +Tested in hardware by @salkinium. + +#### 2019-07-15: Add TLC594x PWM driver + +PR #242 -> b570d07. +Tested in hardware by @linasnikis. + +#### 2019-07-11: Add BNO055 IMU driver + +PR #191 -> a8edbe8. +Tested in hardware by @salkinium. + +#### 2019-07-11: Modularize CMSIS-DSP + +Breaking changes: You need to choose the required submodules. + +PR #241 -> 022a60a. +Tested in hardware by @salkinium. + +#### 2019-07-11: Remove hardcoding of OpenOCD programmer + +PR #240 -> afbd533. +Tested in hardware by @salkinium. + +
diff --git a/docs/release/2019q4.md b/docs/release/2019q4.md new file mode 100644 index 0000000000..f7cb93d017 --- /dev/null +++ b/docs/release/2019q4.md @@ -0,0 +1,74 @@ +## 2020-01-01: Virtual 2019q4 release + +This is a virtual release only for reference that covers everything from +2019-10-01. + +Breaking changes: + +- `modm:target` option requires extended identifiers. + +Features: + +- STM32G4 support! +- DFU programmer support. +- STM32G0: Add ADC driver. + +Fixes: + +- NUCLEO-F303K8: SystemClock for USART1 and I2C1. +- STM32: I2C NACK interrupt. + +New development boards: + +- NUCLEO-G474RE as `modm:board:nucleo-g474re`. +- Black Pill F401 as `modm:board:mini-f401` +- Black Pill F411 as `modm:board:mini-f411` + +New device drivers: + +- SK9822 LED driver (via APA102) as `modm:driver:sk9822`. + +Known bugs: + +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See #285. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See #310. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Benjamin Weps (@nesos) +- Mike Wolfram (@mikewolfram) 🎉 +- Niklas Hauser (@salkinium) +- Raphael Lehmann (@rleh) + +
+Detailed changelog + +#### 2019-12-19: Add STM32G0 ADC driver and SK9822 LED driver + +PR #318 -> fb21f62. +Tested in hardware by @salkinium. + +#### 2019-10-20: Update of modm-devices + +Breaking changes: `modm:target` option requires longer identifier, however, it +will give you a list of ambiguous targets to choose from. + +PR #306 -> 62ccc26 with **high impact** in all targets. +Tested in hardware by @salkinium. + +#### 2019-10-12: Add Mini-F4x1 STM32 boards and examples + +PR #302 -> 64d177a with low impact in STM32 targets. +Tested in hardware by @rleh. + +#### 2019-10-09: Add STM32G4 support + +Also adds NUCLEO-G474RE board and examples. + +PR #287 -> afaea7f with low impact in STM32 targets. +Tested in hardware by @rleh. + +
diff --git a/docs/release/2020q1.md b/docs/release/2020q1.md new file mode 100644 index 0000000000..5c609dc081 --- /dev/null +++ b/docs/release/2020q1.md @@ -0,0 +1,97 @@ +## 2020-04-01: Virtual 2020q1 release + +This is a virtual release only for reference that covers everything from +2020-01-01. + +Breaking changes: + +- `modm_assert()` arguments, behavior and assertion handler arguments. +- STM32: `Rcc::enablePll(PllFactors&)` arguments. + +Features: + +- Doxypress support for API docs generation. +- Support for C11/C++11 atomics on ARMv6-M. +- Make heap module optional with linker failure when accidentally calling malloc. + +Fixes: + +- I2C NACK handling on STM32. +- Static initialization guard for C++. + +No new development boards. + +New device drivers: + +- CAT24AAxx I2C EEPROM as `modm:driver:cat24aa`. + +Known bugs: + +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See #285. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See #310. + +Many thanks to all our contributors: + +- Christopher Durand (@chris-durand) +- David Hebbeker (@dhebbeker) +- Mike Wolfram (@mikewolfram) +- Niklas Hauser (@salkinium) +- Raphael Lehmann (@rleh) +- Sascha Schade (@strongly-typed) + +
+Detailed changelog + +#### 2020-03-30: Add HX711 scale driver + +PR #372 -> d21e991. +Tested in hardware by @strongly-typed. + +#### 2020-03-19: Move heap into own module + +`modm:platform:heap` is optional and will cause the linker to fail if malloc is +called without this module. + +PR #364 -> b8648be with **medium impact** on Cortex-M targets. +Tested in hardware by @salkinium. + +#### 2020-03-19: Pass PLL configuration as struct + +Breaking changes: + +- Single arguments of `Rcc::enable()` now passed as struct. + +PR #361 -> e3ba913 with **high impact** on STM32 targets. +Tested in hardware by @rleh. + +#### 2020-03-19: Refactor modm_assert interface and implementation + +Breaking changes: + +- `modm_assert` signature. +- Additional `modm_assert_*` functions with new behaviors. +- Assertion handler signature and arguments. + +PR #351 -> 23ec952 with **high impact** on all targets. +Tested in hardware by @salkinium. + +#### 2020-03-13: Implement C11 atomics on ARMv6-M + +PR #346 -> 5332765. +Tested in hardware by @salkinium. + +#### 2020-03-12: Add C++ RTTI and Exception support + +As lbuild options in the `modm:stdc++` module. + +PR #343 -> 4ff604f. +Tested in hardware by @salkinium. + +#### 2020-01-20: Add CAT24AAxx I2C EEPROM driver + +PR #321 -> b721551. +Tested in hardware by @mikewolfram. + +
diff --git a/docs/release/2020q2.md b/docs/release/2020q2.md new file mode 100644 index 0000000000..525a1da454 --- /dev/null +++ b/docs/release/2020q2.md @@ -0,0 +1,141 @@ +## 2020-07-01: Virtual 2020q2 release + +This is a virtual release only for reference that covers everything from +2020-04-01. + +Breaking changes: + +- Move FCPU option to `modm:platform:core:f_cpu` lbuild option. +- `modm::Clock` reimplemented using `std::chrono`. +- ZeroMQ support removed as ZeroMQ is unmaintained. +- STM32 DMA driver rewritten for only STM32L4. + +Features: + +- `modm::delay()` is now `std::chrono` compatible. +- `modm::PreciseClock` with microsecond resolution. +- Containers derive from `std::iterator` to work with STL algorithms. +- Simple (stateless) CRC8, CRC16, CRC32 implementations. +- `.ramcode` linker section for Cortex-M. +- Use linkerscript via lbuild option. +- Simple Flash driver for STM32G0/F4. +- Basic DAC driver for STM32F4. + +Fixes: + +- Fix `` in AVR libstdc++. +- Cortex-M: Explicitly set the stack pointer on startup, since some bootloaders + forget to load the stackpointer from the image. +- TLSF `free()` ignores null pointers. +- STM32F0/F3: Correct Pll Source selection. + +New development boards: + +- NUCLEO-F303RE as `modm:board:nucleo-f303re`. +- Mega 2560 PRO as `modm:board:mega-2560-pro`. + +New device drivers: + +- LP503x LED driver as `modm:driver:lp503x`. +- Sx1276 LoRa Modem as `modm:driver:sx1276`. +- Bit-bang encoder output as `modm:driver:encoder.output`. + +Known bugs: + +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See #285. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See #310. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Benjamin Carrick (@nesos) 🎉 +- Christopher Durand (@chris-durand) +- Felix Petriconi (@FelixPetriconi) 🎉 +- Jeff McBride (@mcbridejc) 🎉 +- Kaelin Laundry (@WasabiFan) +- Mike Wolfram (@mikewolfram) +- Niklas Hauser (@salkinium) +- Pavel Pletenev (@ASMfreaK) +- Philipp Graf (@luxarf) 🎉 +- Raphael Lehmann (@rleh) +- Sascha Schade (@strongly-typed) +- Vivien Henry (@lukh) 🎉 + +
+Detailed changelog + +#### 2020-06-19: Add basic DAC driver for STM32F4 + +PR #420 -> 78d18f6. +Tested in hardware by @mcbridejc. + +#### 2020-06-14: Add bit-banged encoder output + +PR #153 -> 21af57b. +Tested in hardware by @rleh. + +#### 2020-06-13: Add Sx1276 LoRa Modem driver + +PR #418 -> 7d1f7cc. +Tested in hardware by @nesos. + +#### 2020-06-11: Add Flash driver for STM32G0/F4 + +PR #417 -> 9e285db. +Tested in hardware by @salkinium. + +#### 2020-05-12: Add LP503x LED driver + +PR #366 -> 6e5ebf4. +Tested in hardware by @chris-durand. + +#### 2020-05-12: Add NUCLEO-F746ZG board and example + +PR #396 -> c38550a. +Tested in hardware by @FelixPetriconi. + +#### 2020-05-12: Add NUCLEO-F746ZG board and example + +PR #396 -> c38550a. +Tested in hardware by @FelixPetriconi. + +#### 2020-05-08: Add DMA-capable SPI driver + +PR #400 -> 80a9c66 with low impact on STM32 targets. +Tested in hardware by @mikewolfram. + +#### 2020-05-06: Rewrite DMA implementation for STM32L4 + +The previous DMA implementation is replaced by a new STM32L4-only one. + +PR #371 -> 0217a19 with **high impact** on STM32 targets. +Tested in hardware by @mikewolfram. + +#### 2020-04-25: Add Mega 2560 PRO board and example + +PR #382 -> 11ffe92. +Tested in hardware by @chris-durand. + +#### 2020-04-16: Add NUCLEO-F303RE board and example + +PR #376 -> 141aa71. +Tested in hardware by @luxarf. + +#### 2020-04-09: Rewrite modm::Clock and add modm::PreciseClock + +Highly efficient implementation via SysTick on Cortex-M and TC0 on AVR. +Breaking changes: + +- `modm::Clock` now using `std::chrono` compatible interface. + +PR #217 -> c63a536 with **high impact** on AVR and STM32 targets. +Tested in hardware by @salkinium. + +#### 2020-04-06: std::chrono compatible modm::delay + +PR #374 -> b010775 with low impact on all targets. +Tested in hardware by @salkinium. + +
diff --git a/docs/release/2020q3.md b/docs/release/2020q3.md new file mode 100644 index 0000000000..23f052b9cd --- /dev/null +++ b/docs/release/2020q3.md @@ -0,0 +1,148 @@ +## 2020-10-01: Virtual 2020q3 release + +This is a virtual release only for reference that covers everything from +2020-07-01. + +No breaking changes. + +Features: + +- SAMD21 support with GPIO, UART, External Interrupt. +- A rewritten AMNB protocol. +- RaspberryPi support with GPIO (via Linux/WiringPi). +- Better Windows support incl. CI. +- Compliance with CMSIS SystemCoreClock interface. +- TinyUSB integration! + +Fixes: + +- STM32F3: Fix `Adc::isConversionFinished()`. +- STM32: Add missing BDTR register to TIM14. +- STM32: Fix RCC clock enable for Ethernet. +- STM32L1: Fix CMSIS Header selection for -A variants. +- STM32F0/G0: Add support for remapped pins. +- FreeRTOS: Make malloc thread-safe. + +New development boards: + +- NUCLEO-F334R8 as `modm:board:nucleo-f334r8`. +- Feather-M0 as `modm:board:feather-m0`. +- SAMD21 Mini as `modm:board:samd21-mini`. +- Raspberry Pi v3 as `modm:board:raspberrypi`. +- DevEBox STM32F4xx as `modm:board:devebox-stm32f4xx`. +- STM32_F32VE as `modm:board:stm32_f32ve`. + +New device drivers: + +- LSM6DS33 compass and gyroscope as `modm:driver:lsm6ds33`. +- LIS3MDL compass as `modm:driver:lis3mdl`. +- GPIO Sampler (STM32-only) as `modm:driver:gpio-sampler`. +- IS31FL3733 LED matrix driver as `modm:driver:is31fl3733`. +- ILI9341 Parallel/SPI display driver as `modm:driver:ili9341`. + +Known bugs: + +- STM32F7: D-Cache not enabled by default. See #485. +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See #285. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See #310. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Benjamin Carrick (@nesos) +- Christopher Durand (@chris-durand) +- delphi (@delphi) +- Erik Henriksson (@henrikssn) 🎉 +- Lukas Güldenstein (@gueldenstone) 🎉 +- Mike Wolfram (@mikewolfram) +- Niklas Hauser (@salkinium) +- Pavel Pletenev (@ASMfreaK) +- Raphael Lehmann (@rleh) +- Sascha Schade (@strongly-typed) +- Vivien Henry (@lukh) + +
+Detailed changelog + +#### 2020-09-30: Integrate TinyUSB for STM32 and SAMD + +PR #478 -> 3072005. +Tested in hardware by @salkinium. + +#### 2020-09-19: Add ILI9341 Parallel/SPI display driver + +PR #437 -> 43f32e6. +Tested in hardware by @mikewolfram and @delphi. + +#### 2020-09-18: Update FreeRTOS and make malloc thread-safe + +PR #475 -> cb82eec with low impact in ARM Cortex-M targets. +Tested in hardware by @strongly-typed and @salkinium. + +#### 2020-09-18: Add GPIO remap support for STM32F0/G0 + +PR #471 -> 48d73dc with low impact on STM32 targets. +Tested in hardware by @chris-durand and @salkinium. + +#### 2020-09-12: Add DevEBox STM32F4xx board and examples + +PR #462 -> 8082f69. +Tested in hardware by @strongly-typed. + +#### 2020-09-07: Add RaspberryPi support + +Wraps `` for GPIO driver. + +PR #444 -> d3496a3. +Tested in hardware by @henrikssn. + +#### 2020-08-30: Add FreeRTOS+TCP module + +PR #448 -> 821677b. +Tested in hardware by @mikewolfram. + +#### 2020-08-15: Add IS31FL3733 LED matrix driver + +PR #445 -> 9b6aeee. +Tested in hardware by @salkinium. + +#### 2020-07-31: Add GPIO Sampler driver for STM32 + +PR #96 -> 9d8bbfa. +Tested in hardware by @salkinium. + +#### 2020-07-20: Add rewrite of AMNB protocol + +PR #395 -> 8820d6b. +Tested in hardware by @salkinium. + +#### 2020-07-20: Add SAMD21 External Interrupt driver + +PR #436 -> cbce428. +Tested in hardware by @henrikssn. + +#### 2020-07-08: Add SAMD21 basic UART driver + +PR #430 -> 04688bc. +Tested in hardware by @henrikssn. + +#### 2020-07-07: Add LIS3MDL compass driver + +PR #428 -> 0994a55. +Tested in hardware by @nesos. + +#### 2020-07-05: Add SAMD21 modm port + +Also adds Feather-M0 and SAMD21 Mini BSPs. + +PR #194 -> d2d38a0. +Tested in hardware by @salkinium and @henrikssn. + +#### 2020-07-02: Add LSM6DS33 compass and gyroscope driver + +PR #426 -> e233708. +Tested in hardware by @nesos. + +
diff --git a/docs/release/2020q4.md b/docs/release/2020q4.md new file mode 100644 index 0000000000..daf6425ff5 --- /dev/null +++ b/docs/release/2020q4.md @@ -0,0 +1,76 @@ +## 2021-01-01: Virtual 2020q4 release + +This is a virtual release only for reference that covers everything from +2020-10-01. + +Breaking changes: + +- SAMD GPIO connector API is rewritten. + +Features: + +- Added a `.clang-format` for automated code styling. +- Update FatFS from v0.09 to v0.13. + +Fixes: + +- STM32F3: Fix missing HsiDiv2 in PllSource. +- FreeRTOS: Fix SystemCoreClock linking. +- Proper lookup of all IOStream `operator<<` overloads. + +New development boards: + +- NUCLEO-F334R8 as `modm:board:nucleo-f334r8`. +- NUCLEO-G431KB as `modm:board:nucleo-g431kb`. +- NUCLEO-G431RB as `modm:board:nucleo-g431rb`. + +No new device drivers. + +Known bugs: + +- Nanosecond delay may be inaccurate. See #495. +- STM32F7: D-Cache not enabled by default. See #485. +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See #285. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See #310. + +Many thanks to all our contributors: + +- Christopher Durand (@chris-durand) +- Erik Henriksson (@henrikssn) +- Jeff McBride (@mcbridejc) +- Mike Wolfram (@mikewolfram) +- Niklas Hauser (@salkinium) +- Raphael Lehmann (@rleh) +- Sascha Schade (@strongly-typed) + +
+Detailed changelog + +#### 2020-12-16: Add NUCLEO-G431RB board and example + +PR #490 -> 195f7e1. +Tested in hardware by @rleh. + +#### 2020-11-16: Add NUCLEO-G431KB board and example + +PR #499 -> 276f5b3. +Tested in hardware by @mcbridejc. + +#### 2020-11-04: Update FatFs to v0.13 + +PR #497 -> 7df2e7d with **medium impact** on all targets. +Tested in hardware by @salkinium. + +#### 2020-10-07: Rewrite of SAMD GPIO connector API + +PR #482 -> dc56af2 with **high impact** on SAMD targets. +Tested in hardware by @henrikssn. + +#### 2020-10-06: Add NUCLEO-F334R8 board and example + +PR #489 -> 85eec34. +Tested in hardware by @rleh. + +
diff --git a/docs/release/2021q1.md b/docs/release/2021q1.md new file mode 100644 index 0000000000..644a2981c7 --- /dev/null +++ b/docs/release/2021q1.md @@ -0,0 +1,157 @@ +## 2021-04-01: 2021q1 release + +This release covers everything from 2021-01-01 and has been tested with avr-gcc +v10.1.0 from Upstream and arm-none-eabi-gcc 2020q4 from Arm. + +Breaking changes: + +- `Uart::initialize()` arguments and behaviour changed on STM32. +- Complete rewrite of TCS34xx color sensor driver. + +Features: + +- Update AVR libstdc++ to C++20. +- Enable C++20 with GCC10. +- Ethernet support via FreeRTOS-TCP and LAN8720a. +- STM32: optional UART buffers per direction. +- Using relative paths in ELF files to easier archiving. +- Dark mode for Doxypress documentation. +- Makefile build system generator. +- Better Windows installation instructions. + +Fixes: + +- STM32F4/F7: Overdrive mode. +- STM32G4: TIM2 and TIM5 as 32-bit timer. +- STM32F0: ADC temperature calibration. +- STM32G4: ADC clock. +- SAMD21 Mini BSP fixes. +- Windows: Uploading via AvrDude. + +New development boards: + +- NUCLEO-F439ZI as `modm:board:nucleo-f439zi`. +- NUCLEO-F446ZE as `modm:board:nucleo-f446ze`. +- NUCLEO-F767ZI as `modm:board:nucleo-f767zi`. + +New device drivers: + +- MMC5603 compass as `modm:driver:mmc5603`. +- LAN8720a ethernet transceiver as `modm:driver:lan8720a`. +- STUSB4500 USB-PD controller as `modm:driver:stusb4500`. +- Bit-banged encoder input as `modm:driver:encoder_input.bitbang`. + +Known bugs: + +- C++20 is not fully implemented by GCC10 yet, however modm does not use all + features yet anyways. See #326. +- Nanosecond delay may be inaccurate. See #495. +- STM32F7: D-Cache not enabled by default. See #485. +- `lbuild build` and `lbuild clean` do not remove all previously generated files + when the configuration changes. See #285. +- Generating modm on Windows creates paths with `\` that are not compatible with + Unix. See #310. +- `arm-none-eabi-gdb` TUI and GDBGUI interfaces are not supported on Windows. + See #591. + +Many thanks to all our contributors. +A special shoutout to first timers 🎉: + +- Cerem Cem ASLAN (@ceremcem) 🎉 +- Christopher Durand (@chris-durand) +- David Hebbeker (@dhebbeker) +- Jacob Schultz Andersen (@jasa) 🎉 +- Mike Wolfram (@mikewolfram) +- Nicolai Bruhn (@nicoBruhn) 🎉 +- Niklas Hauser (@salkinium) +- Raphael Lehmann (@rleh) +- Sascha Schade (@strongly-typed) +- Thomas Sommer (@TomSaw) 🎉 +- Vivien Henry (@lukh) + +PR #597 -> 2021q1. + +
+Detailed changelog + +#### 2021-03-26: Add Makefile build system generator + +PR #557 -> df47974. +Tested by @salkinium. + +#### 2021-03-22: Add Bit-banged encoder input driver + +PR #580 -> df47974. +Tested in hardware by @TomSaw. + +#### 2021-03-16: Rewrite TCS34xx color sensors + +Breaking changes: Entire API was rewritten. + +PR #578 -> 850b554 with **high impact** on TCS34xx driver. +Tested in hardware by @TomSaw. + +#### 2021-03-06: Add STUSB4500 USB-PD controller driver + +PR #574 -> 1a11b08. +Tested in hardware by @rleh. + +#### 2021-03-06: Add NUCLEO-F439ZI board and example + +PR #571 -> 165adf0. +Tested in hardware by @rleh. + +#### 2021-02-26: Refactor SCons build system + +Adds relative paths in ELF file. + +PR #558 -> 1fc3805. +Tested by @salkinium. + +#### 2021-02-23: Refactor UART HAL + +Makes UART buffers individually optional by setting their size to zero. +Breaking changes: + +- `Uart::initialize(IrqPriority, Parity)` -> `Uart::initialize(Parity, WordLength)`. +- Word length is not automatically set to 9-bits when setting parity anymore. +- `UartHal::setLastBitClockPulse(LastBitClockPulse)` removed. +- `UartHal::setSpiClock(SpiClock)` -> `UartHal::setSpiClock(SpiClock, LastBitClockPulse)`. +- You must now manually call `UartHal::{en,dis}ableOperation()` before modifying UartHal. + +PR #564 -> 62b63f5 with **high impact** on STM32 targets. +Tested in hardware by @salkinium. + +#### 2021-02-18: Add Ethernet support via FreeRTOS-TCP and LAN8720a + +Also adds NUCLEO-F767ZI board. + +PR #466 -> d8be0a2. +Tested in hardware by @mikewolfram. + +#### 2021-01-14: Add MMC5603 compass driver + +PR #556 -> fb2ff58. +Tested in hardware by @salkinium. + +#### 2021-01-14: Fix STM32F0 ADC temperature sensor + +PR #526 -> 3ecad35 with low impact on STM32F0 targets. +Tested in hardware by @chris-durand. + +#### 2021-01-10: Add NUCLEO-F446ZE board and example + +PR #533 -> 02b1571. +Tested in hardware by @chris-durand. + +#### 2021-01-10: Enable C++20 + +PR #521 -> 8c322a2 with low impact on all targets. +Tested in hardware by all. + +#### 2021-01-10: Update avr libstdc++ submodule to C++20 version + +PR #535 -> 038657c with low impact on AVR targets. +Tested in hardware by @chris-durand. + +
diff --git a/docs/src/guide/custom-project.md b/docs/src/guide/custom-project.md index 367bca44af..519d9d93c6 100644 --- a/docs/src/guide/custom-project.md +++ b/docs/src/guide/custom-project.md @@ -242,7 +242,7 @@ one of our examples and then work your way into your specialization. to help you understand what code is pulled in when you generate your library. -### Generate, Compile, Upload +## Generate, Compile and Upload Once you have your `project.xml` set up, you can call `lbuild build`, which generates the target and configuration specific library from modm. diff --git a/tools/scripts/authors.py b/tools/scripts/authors.py index d1f20c5990..70fff952b9 100755 --- a/tools/scripts/authors.py +++ b/tools/scripts/authors.py @@ -21,44 +21,57 @@ "Andre Gilerson": "AndreGilerson", "Antal Szabó": "Sh4rK", "Arjun Sarin": None, + "Benjamin Carrick": "nesos", "Benjamin Weps": "nesos", "Carl Treudler": "cajt", + "Cerem Cem ASLAN": "ceremcem", "Christian Menard": "chrism333", "Christoph Rüdi": None, "Christopher Durand": "chris-durand", "Daniel Krebs": "daniel-k", "David Hebbeker": "dhebbeker", + "Erik Henriksson": "henrikssn", "Fabian Greif": "dergraaf", + "Felix Petriconi": "FelixPetriconi", "Georgi Grinshpun": "georgi-g", "Hans Schily": "RzwoDzwo", - "Jörg Hoffmann": "19joho66", + "Jacob Schultz Andersen": "jasa", + "Jeff McBride": "mcbridejc", "Julia Gutheil": None, + "Jörg Hoffmann": "19joho66", + "Kaelin Laundry": "WasabiFan", "Kevin Läufer": "ekiwi", "Linas Nikiperavicius": "linasnikis", "Lucas Mösch": "lmoesch", + "Lukas Güldenstein": "gueldenstone", "Marten Junga": "Maju-Ketchup", "Martin Esser": "Scabber", "Martin Rosekeit": "thundernail", "Michael Thies": "mhthies", + "Mike Wolfram": "mikewolfram", "Nick Sarten": "genbattle", "Niclas Rohrer": None, + "Nicolai Bruhn": "nicoBruhn", "Niklas Hauser": "salkinium", "Niklas Meyer": "Zweistein885", - "Thomas Figueroa": "OperativeF", - "Zawadniak Pedro": "PDR5", "Patrick Servello": "patrick--", + "Pavel Pletenev": "ASMfreaK", + "Philipp Graf": "luxarf", "Raphael Lehmann": "rleh", "Sascha Schade": "strongly-typed", "Sebastian Birke": "se-bi", "Sergiy Yevtushenko": "siy", "Tarik TIRE": "7Kronos", + "Thomas Figueroa": "OperativeF", + "Thomas Sommer": "TomSaw", "Thorsten Lajewski": "TheTh0r", "Tomasz Chyrowicz": "tomchy", - "Pavel Pletenev": "ASMfreaK", + "Vivien Henry": "lukh", + "Zawadniak Pedro": "PDR5", "Álan Crístoffer": "acristoffers", } -def get_author_log(since = None, until = None, handles = True, count = False): +def get_author_log(since = None, until = None, handles = False, count = False): sl_command = "git shortlog -sn" if since is not None: sl_command += " --since=\"{}\"".format(since) @@ -84,7 +97,7 @@ def get_author_log(since = None, until = None, handles = True, count = False): output = [] for (commits, author) in commit_tuples: - out = author + out = "- " + author if handles and author in author_handles and author_handles[author] is not None: out += u" (@{})".format(author_handles[author]) if count: @@ -101,22 +114,24 @@ def get_author_log(since = None, until = None, handles = True, count = False): help="adds and sorts authors by commit count") parser.add_argument("--shoutout", dest="with_shoutout", action="store_true", help="annotates first time contributers") - parser.add_argument("--since", dest="since", - help="evaluates the git history from this date until present") + parser.add_argument("--since", dest="since", default=None, + help="evaluates the git history from this date") + parser.add_argument("--until", dest="until", default=None, + help="evaluates the git history until this date") args = parser.parse_args() - since_date = args.since if args.since else None - log_authors = get_author_log(since=since_date, handles=args.with_handles, count=args.with_count) + log_authors = get_author_log(since=args.since, until=args.until, + handles=args.with_handles, count=args.with_count) new_authors = [] - if args.with_shoutout and since_date: - previous_authors = get_author_log(until=since_date, handles=False, count=False) - new_authors = get_author_log(since=since_date, handles=False, count=False) + if args.with_shoutout and args.since: + previous_authors = get_author_log(until=args.since) + new_authors = get_author_log(since=args.since, until=args.until) new_authors = [a for a in new_authors if a not in previous_authors] authors = [] for author in log_authors: if any(a in author for a in new_authors): - author += u" 🎉🎊" + author += u" 🎉" authors.append(author) print("\n".join(authors)) diff --git a/tools/scripts/generate_hal_matrix.py b/tools/scripts/generate_hal_matrix.py index bc1e1e4564..21717079d7 100755 --- a/tools/scripts/generate_hal_matrix.py +++ b/tools/scripts/generate_hal_matrix.py @@ -9,7 +9,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. # ----------------------------------------------------------------------------- -import lbuild, re, functools +import lbuild, re, functools, sys, subprocess from collections import defaultdict from jinja2 import Environment from pathlib import Path @@ -209,9 +209,23 @@ def hal_format_tables(): return tables -# if __name__ == "__main__": -# output = hal_format_tables() -# print(output["avr"]) -# print(output["stm32_all"]) -# print(output["stm32"]) -# print(output["sam"]) + +hal_tables = hal_format_tables() +readme = repopath("README.md") +readme.write_text(re.sub( + r".*?", + "{}".format(hal_tables["all"]), + readme.read_text(), flags=re.DOTALL | re.MULTILINE)) + +# Check git differences and fail +if "-d" in sys.argv: + differences = subprocess.run("git diff", shell=True, cwd=repopath("."), + stdout=subprocess.PIPE).stdout.decode("utf-8").strip(" \n") + if len(differences): + subprocess.run("git --no-pager diff", shell=True, cwd=repopath(".")) + print("\nPlease synchronize the HAL implementation table:\n\n" + " $ python3 tools/scripts/generate_hal_matrix.py\n\n" + "and then commit the results!") + exit(1) + +exit(0) diff --git a/tools/scripts/synchronize_docs.py b/tools/scripts/synchronize_docs.py index 57ea33263d..662d022e47 100755 --- a/tools/scripts/synchronize_docs.py +++ b/tools/scripts/synchronize_docs.py @@ -14,6 +14,7 @@ from jinja2 import Environment from os import listdir from os.path import isfile, join, abspath +from collections import defaultdict TABLE_TEMPLATE = \ r""" @@ -28,11 +29,7 @@ """ -def repopath(path): - return (Path(os.path.abspath(__file__)).parents[2] / path) - -with open(repopath("tools/scripts/generate_hal_matrix.py")) as hal_tables: - exec(hal_tables.read()) +repopath = lambda path: Path(__file__).parents[2] / path def run(where, command, stdin=None): print(command) @@ -97,24 +94,25 @@ def get_lbuild(root, target=None): target = {"avr": "atmega2560-16au", "stm32": "stm32f469nih6", "hosted": "hosted-linux"}[target] builder = lbuild.api.Builder(cwd=root, options=[":target={}".format(target)]) - builder.load(root / "repo.lb") + builder.load(repopath("repo.lb")) return builder.parser # All the paths -root = repopath(".") -board_path = root / "src/modm/board" -example_path = root / "examples" -ignored_path = root / "test/all/ignored.txt" -examples_readme_in_path = root / "examples/README.md" -examples_readme_path = root / "docs/src/guide/examples.md" -readme_path = root / "README.md" -index_in_path = root / "docs/index.md.in" -index_path = root / "docs/src/index.md" -whoweare_in_path = root / "docs/who-we-are.md.in" -whoweare_path = root / "docs/src/who-we-are.md" -modules_in_path = root / "docs/modules.md.in" -modules_path = root / "docs/src/reference/modules.md" +board_path = repopath("src/modm/board") +example_path = repopath("examples") +ignored_path = repopath("test/all/ignored.txt") +examples_readme_in_path = repopath("examples/README.md") +examples_readme_path = repopath("docs/src/guide/examples.md") +readme_path = repopath("README.md") +index_in_path = repopath("docs/index.md.in") +index_path = repopath("docs/src/index.md") +whoweare_in_path = repopath("docs/who-we-are.md.in") +whoweare_path = repopath("docs/src/who-we-are.md") +modules_in_path = repopath("docs/modules.md.in") +modules_path = repopath("docs/src/reference/modules.md") +changelog_in_paths = repopath("docs/release").glob("20*.md") +changelog_path = repopath("CHANGELOG.md") # We cannot use lbuild to enumerate the boards since they only make themselves available for certain devices boards = [re.search(r"modm:board:(.*?)", config.read_text()).group(1) @@ -131,7 +129,7 @@ def get_lbuild(root, target=None): example_table = format_table(examples, 2, "left") # Get all supported targets -targets = set(get_lbuild(root).find_option("modm:target").values) +targets = set(get_lbuild(repopath(".")).find_option("modm:target").values) ignored_devices = set(d for d in ignored_path.read_text().strip().splitlines() if "#" not in d) targets -= ignored_devices avr_count = len([t for t in targets if t.startswith("at")]) @@ -139,28 +137,21 @@ def get_lbuild(root, target=None): sam_count = len([t for t in targets if t.startswith("sam")]) all_count = avr_count + stm_count + sam_count -# get the author count -from authors import author_handles -author_count = len(author_handles) - # Get all the modules that are available for the STM32 # Get all drivers, we assume they are available for all devices -drivers = (get_lbuild(root, t).modules for t in {"avr", "stm32", "hosted"}) +drivers = (get_lbuild(repopath("."), t).modules for t in {"avr", "stm32", "hosted"}) drivers = {m for mg in drivers for m in mg if m.startswith("modm:driver:")} drivers = sorted(m.replace("modm:driver:", "") for m in drivers) drivers = [{"name": name(d), "url": driver_url(d)} for d in drivers if name(d)] driver_table = format_table(drivers, 6) # Read the repo README.md and replace these keys -hal_tables = hal_format_tables() readme = readme_path.read_text() -readme = replace(readme, "authorcount", author_count - 7) readme = replace(readme, "avrcount", avr_count) readme = replace(readme, "samcount", sam_count) readme = replace(readme, "stmcount", stm_count) readme = replace(readme, "allcount", all_count) readme = replace(readme, "bsptable", bsp_table) -readme = replace(readme, "alltable", hal_tables["all"]) readme = replace(readme, "drivertable", driver_table) readme_path.write_text(readme) @@ -179,6 +170,47 @@ def get_lbuild(root, target=None): # Copy the example readme over shutil.copy(examples_readme_in_path, examples_readme_path) +# Compose changelog +crlinks = set() +cchangelog = "\n\n" +for path in reversed(sorted(changelog_in_paths)): + content = path.read_text() + content = re.sub(r"as (`modm:[^:][^ ]+?`)\.\n", r"as [\1][].\n", content) + content = re.sub(r"(#\d+)", r"[\1][]", content) + content = re.sub(r"(@[\w\d\-_]+)", r"[\1][]", content) + content = re.sub(r"-> ([\da-f]{7})", r"-> [\1][]", content) + content = re.sub(r"(20[12]\dq[1-4])\.\n", r"[\1][].\n", content) + cchangelog += content + "\n\n" + crlinks.update(re.findall(r"\[(.*?)\]\[\]", content)) +# Generate appropriate link +clinks = defaultdict(dict) +for link in crlinks: + if link.startswith("@"): # user handle + clinks["@"][link] = "https://github.com/" + link[1:] + elif link.startswith("#"): # PR or Issue + clinks["#"][link] = "https://github.com/modm-io/modm/pull/" + link[1:] + elif link.startswith("`"): # lbuild module + clinks["`"][link] = "https://modm.io/reference/module/" + \ + link[1:-1].replace(".", "-").replace(":", "-") + elif link.startswith("20") and len(link) == 6: # Release tag + clinks["r"][link] = "https://github.com/modm-io/modm/releases/tag/" + link + elif len(link) == 7: # Commit + clinks["c"][link] = "https://github.com/modm-io/modm/commit/" + link + else: + print("Unknown changelog link:", link) +# Format the links +links = "" +links += "\n\n" + "\n".join(sorted("[{}]: {}".format(name, url) for name, url in clinks["r"].items())) +links += "\n\n" + "\n".join(sorted("[{}]: {}".format(name, url) for name, url in clinks["@"].items())) +links += "\n\n" + "\n".join(sorted("[{}]: {}".format(name, url) for name, url in clinks["`"].items())) +links += "\n\n" + "\n".join(sorted("[{}]: {}".format(name, url) for name, url in clinks["#"].items())) +links += "\n\n" + "\n".join(sorted("[{}]: {}".format(name, url) for name, url in clinks["c"].items())) +# Format the changelog file +changelog = changelog_path.read_text() +changelog = replace(changelog, "releases", cchangelog) +changelog = replace(changelog, "links", links + "\n\n") +changelog_path.write_text(changelog) + # Check git differences and fail if "-d" in sys.argv: differences = run(repopath("."), r"git diff")[1]