**Note: this release contains _major_ breaking changes to the Python API!**
New features
- **Support for STLinkV2 debug probes!**
- STLinkV2 probes appear in the list of available devices just like CMSIS-DAP probes.
- Currently, the board associated with an STLinkV2-1 probe is not detected and you must always use the `--target` option to manually specify the target type.
- To run the functional tests on STLink targets you need to create a `test/test_boards.yaml` config file that sets the `target_override` and `test_binary` session options for each probe to test. See the [session options](docs/SESSION_OPTIONS.md) documentation for details on config files.
- Reasonable start on documentation for pyOCD in the `docs/` folder.
- Breaking changes to board-related classes.
- New `Session` class is now the object graph root. This class holds references to the debug probe and board instances, and owns session user options.
- New `ConnectHelper` class with static methods previously in `MbedBoard`.
- New `DebugProbe` class hierarchy under `pyocd.probe` adds architectural support for multiple debug probe types and separates probe and board functionality.
- Moved pyDAPAccess under `pyocd.probe`.
- Breaking changes to API names, to bring names into PEP8 compliance. Even the package name changed from `pyOCD` to `pyocd`.
- Support for YAML config files and `--config` option for tools. See the [session options](docs/SESSION_OPTIONS.md) documentation for details.
Boards and targets
- Corrected LPC54608 flash size to 512 kB and correspondingly updated flash algorithm.
- Added board ID and test binary for ST Nucleo-F412ZG board.
- Added STM32L475xC, STM32L475xE, STM32L475xG target and ST-Discovery-L475E-IOT01A board.
- Added STM32F439xG, STM32F439xI target and u-blox EVK-ODIN-W2 board.
Changes
- In cases where the CPU ID cannot be read, such as locked STM32 devices, the CPU type is reported as "unknown" rather than throwing an exception.
- The CPU revision and patch are reported along with the CPU type, i.e. "CPU core is Cortex-M4 r0p1".
- Added -O command line option to all three pyOCD tools, which allows passing arbitrary session options.
- The `Board` class logs the selected target type, in particular to help users identify when pyOCD is using a generic cortex_m target for ST and other boards.
- Cleaned up thread descriptions. Thread names are now provided by the `name` attribute in the gdbserver threads XML report rather than the thread description. This attribute is supported in gdb 7.10 and later, and is ignored in earlier versions.
- RTX5 thread status for blocked threads uses "Waiting" terminology rather than "Blocked".
- Zephyr thread names will now be reported.
- xPSR registers (apsr, iapsr, eapsr, ipsr, epsr, iepsr) can be read and written with core register APIs.
- Made `DebugContext` and `Target` both subclasses of `MemoryInterface`.
- The active exception or interrupt is shown in the Handler mode thread description. For targets with an SVD file, the interrupt name is used.
Fixes
- Fixed the `lsbreak` command in `pyocd-tool` by adding missing `get_breakpoints()` method to `BreakpointManager`.
- Python 3 fix: disassembly in `pyocd-tool`.
- `setup.py` now uses environment markers on dependencies, and limits installation to supported Python versions.
- Excluding `enum34` dependency on Python version 3.4 or later.
- If gdb sends a vFlashDone command without having sent a vFlashWrite, pyOCD will no longer raise an exception.
- Corrected mask used to read IPSR from 0xff to 0x1ff.
- Disabled asserts in flash programming progress reports that were occasionally triggered depending on previous flash contents.
- Removed unused `elf_files` directory.
Testing
- `automated_test.py` accepts a `--board` option to select boards to test by unique ID.
- Python 3 fix: flash algo debug mode.
- `gdb_test.py` functional test fixes. ST boards will now pass the test.
- `RecordingLogHandler` correctly handles unicode for Python 2.