From a52b31251c09b503f88e7748ffc42884dc8305fb Mon Sep 17 00:00:00 2001 From: Niklas Hauser Date: Tue, 30 Mar 2021 02:09:09 +0200 Subject: [PATCH] [release] 2021q1 --- .mailmap | 29 + CHANGELOG.md | 851 +++++++++++++++++++++ README.md | 5 +- docs/CHANGELOG.md | 1143 ----------------------------- docs/release/2020q1.md | 97 +++ docs/release/2020q2.md | 141 ++++ docs/release/2020q3.md | 148 ++++ docs/release/2020q4.md | 76 ++ docs/release/2021q1.md | 155 ++++ tools/scripts/authors.py | 45 +- tools/scripts/synchronize_docs.py | 88 ++- 11 files changed, 1592 insertions(+), 1186 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 docs/CHANGELOG.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/.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..4cd7ac10eb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,851 @@ +# 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. +- TCS34xx color sensor driver complete rewrite. + +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. + +Fixes: + +- STM32F4/F7: Overdrive mode. +- STM32G4: TIM2 and TIM5 as 32-bit timer. +- STM32F0: ADC temperature calibration. +- STM32G4: ADC clock. +- SAMD21 Mini BSP fixes. + +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: + +- STM32F7: D-Cache not enabled by default. See [#485][]. +- Nanosecond delay may be inaccurate. See [#495][]. +- C++20 is not fully implemented by GCC10 yet, however modm does not use all + features yet anyways. See [#326][]. +- `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 [#590][] -> [df47974][]. +Tested by [@salkinium][]. + +#### 2021-03-22: Add Bit-banged encoder input driver + +PR [#590][] -> [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: + +- STM32F7: D-Cache not enabled by default. See [#485][]. +- Nanosecond delay may be inaccurate. See [#495][]. +- `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][]. + +
+ + + + +## Changes previous to 2020 + +Please interpret the git history for older changes. + + + +[2021q1]: https://github.com/modm-io/modm/releases/tag/2021q1 + +[@ASMfreaK]: https://github.com/ASMfreaK +[@FelixPetriconi]: https://github.com/FelixPetriconi +[@TomSaw]: https://github.com/TomSaw +[@WasabiFan]: https://github.com/WasabiFan +[@ceremcem]: https://github.com/ceremcem +[@chris-durand]: https://github.com/chris-durand +[@delphi]: https://github.com/delphi +[@dhebbeker]: https://github.com/dhebbeker +[@gueldenstone]: https://github.com/gueldenstone +[@henrikssn]: https://github.com/henrikssn +[@jasa]: https://github.com/jasa +[@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 +[@rleh]: https://github.com/rleh +[@salkinium]: https://github.com/salkinium +[@strongly-typed]: https://github.com/strongly-typed + +[`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-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-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: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: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:mmc5603`]: https://modm.io/reference/module/modm-driver-mmc5603 +[`modm:driver:stusb4500`]: https://modm.io/reference/module/modm-driver-stusb4500 +[`modm:driver:sx1276`]: https://modm.io/reference/module/modm-driver-sx1276 + +[#153]: https://github.com/modm-io/modm/pull/153 +[#194]: https://github.com/modm-io/modm/pull/194 +[#217]: https://github.com/modm-io/modm/pull/217 +[#285]: https://github.com/modm-io/modm/pull/285 +[#310]: https://github.com/modm-io/modm/pull/310 +[#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 +[#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 +[#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 +[#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 +[#590]: https://github.com/modm-io/modm/pull/590 +[#591]: https://github.com/modm-io/modm/pull/591 +[#597]: https://github.com/modm-io/modm/pull/597 +[#96]: https://github.com/modm-io/modm/pull/96 + +[0217a19]: https://github.com/modm-io/modm/commit/0217a19 +[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 +[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 +[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 +[3ecad35]: https://github.com/modm-io/modm/commit/3ecad35 +[43f32e6]: https://github.com/modm-io/modm/commit/43f32e6 +[48d73dc]: https://github.com/modm-io/modm/commit/48d73dc +[4ff604f]: https://github.com/modm-io/modm/commit/4ff604f +[5332765]: https://github.com/modm-io/modm/commit/5332765 +[62b63f5]: https://github.com/modm-io/modm/commit/62b63f5 +[6e5ebf4]: https://github.com/modm-io/modm/commit/6e5ebf4 +[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 +[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 +[b010775]: https://github.com/modm-io/modm/commit/b010775 +[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 +[cb82eec]: https://github.com/modm-io/modm/commit/cb82eec +[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 +[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 +[fb2ff58]: https://github.com/modm-io/modm/commit/fb2ff58 + + diff --git a/README.md b/README.md index 78d0d92a03..83d462b917 100644 --- a/README.md +++ b/README.md @@ -292,8 +292,9 @@ 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)) +and many more contributors. ## Folder structure 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/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..05c1026ce8 --- /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..80d8797005 --- /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..fd6294cde5 --- /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: + +- STM32F7: D-Cache not enabled by default. See #485. +- Nanosecond delay may be inaccurate. See #495. +- `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..af2e4e20aa --- /dev/null +++ b/docs/release/2021q1.md @@ -0,0 +1,155 @@ +## 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. +- TCS34xx color sensor driver complete rewrite. + +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. + +Fixes: + +- STM32F4/F7: Overdrive mode. +- STM32G4: TIM2 and TIM5 as 32-bit timer. +- STM32F0: ADC temperature calibration. +- STM32G4: ADC clock. +- SAMD21 Mini BSP fixes. + +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: + +- STM32F7: D-Cache not enabled by default. See #485. +- Nanosecond delay may be inaccurate. See #495. +- C++20 is not fully implemented by GCC10 yet, however modm does not use all + features yet anyways. See #326. +- `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 #590 -> df47974. +Tested by @salkinium. + +#### 2021-03-22: Add Bit-banged encoder input driver + +PR #590 -> 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/tools/scripts/authors.py b/tools/scripts/authors.py index d1f20c5990..0eef836896 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,9 +97,9 @@ 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]) + out += u" ([@{}][])".format(author_handles[author]) if count: out = u"{:4} {}".format(commits, out) output.append(out) @@ -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/synchronize_docs.py b/tools/scripts/synchronize_docs.py index a48654673f..f79aa3bab8 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""" @@ -27,9 +28,7 @@ """ - -def repopath(path): - return (Path(os.path.abspath(__file__)).parents[2] / path) +repopath = lambda path: Path(__file__).parents[2] / path def run(where, command, stdin=None): print(command) @@ -86,26 +85,27 @@ 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_path = root / "examples/README.md" -readme_path = root / "README.md" -getting_started_in_path = root / "docs/getting-started.md.in" -getting_started_path = root / "docs/src/guide/getting-started.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_path = repopath("examples/README.md") +readme_path = repopath("README.md") +getting_started_in_path = repopath("docs/getting-started.md.in") +getting_started_path = repopath("docs/src/guide/getting-started.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 = (b.relative_to(board_path) for b in board_path.glob('**/board.xml')) @@ -120,20 +120,16 @@ 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")]) stm_count = len([t for t in targets if t.startswith("stm32")]) sam_count = len([t for t in targets if t.startswith("sam")]) -# 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": None} for d in drivers if name(d)] @@ -141,7 +137,6 @@ def get_lbuild(root, target=None): # Read the repo README.md and replace these keys 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) @@ -169,6 +164,47 @@ def get_lbuild(root, target=None): getting_started = Environment().from_string(getting_started_in_path.read_text()).render({"examples": extract(readme, "examples")}) getting_started_path.write_text(getting_started) +# Compose changelog +crlinks = set() +cchangelog = "\n\n" +for path in reversed(sorted(changelog_in_paths)): + content = path.read_text() + content = re.sub(r"(`modm:[^:].+?`)\.\n", r"[\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]