Release 10.16.0
Changelog
--------------------------------------
- (Release) Update J-Link installers to v7.66a
- (Release) Changed architecture of RPM installer from amd64 to x86_64.

- (nrfjprog.exe) Added missing registers in readregs command for Cortex-M33 and Cortex-M4 targets.
- (nrfjprog.exe) Add support for specifying register(s) to read in readregs command.
- (nrfjprog.exe) Fix issue where devices with updated approtect failed in --verify if hex file covered UICR->APPROTECT or UICR->SECUREAPPROTECT.
- (nrfjprog.exe) Fix issue where --qspisectorerase did not erase pages from the external memory.
- (nrfjprog.exe) Fixed issue where nRF51 recover could become stuck and fail when using J-Link version v7.58e and newer.
- (nrfjprog.exe) Changed minimum allowed value of --clockspeed argument from 125kHz to 4kHz.
- (nrfjprog.exe) Fix issue where generated .bin files became too large.

- (nrfjprog.dll) Added missing register enumerators for cpu_registers_t enumerator.
- (nrfjprog.dll) Support new registers in NRFJPROG_read_cpu_register and NRFJPROG_write_cpu_register methods.
- (nrfjprog.dll) Fix issue where devices with updated approtect failed in verify_file if hex file covered UICR->APPROTECT or UICR->SECUREAPPROTECT.
- (nrfjprog.dll) Check device voltage when connecting to device instead of when connecting to debug probe.
                 This fixes an issue where some methods would fail when connecting to a debug probe with no connected device.
- (nrfjprog.dll) Fix issue where NRFJPROG_pin_reset() could lead to a fault state where no further commands succeeded on nRF51
                 devices with J-Link version 7.58e and newer.
- (nrfjprog.dll) Fixed issue where NRFJPROG_erase_file did not erase external memory with qspi_erase_mode set to ERASE_PAGES.
- (nrfjprog.dll) Fixed issue where nRF51 recover could become stuck and fail when using J-Link version v7.58e and newer.
- (nrfjprog.dll) Changed JLINKARM_SWD_MIN_SPEED_KHZ from 125kHz to 4kHz in DllCommonDefinitions.h

- (pynrfjprog) In Lowlevel API, support new registers in read_cpu_register and write_cpu_register methods.
- (pynrfjprog) In Lowlevel API, fixed erase_file not erasing external memory when using qspi erase mode set to ERASE_SECTOR.
- (pynrfjprog) Fixed issue where pynrfjprog did not bundle the nrfdfu shared library.
- (pynrfjprog) Fixed issue where nRF51 recover could become stuck and fail when using J-Link version v7.58e and newer.
- (pynrfjprog) Parameters.py: Added values from DllCommonDefinitions.h: JLINKARM_SWD_MIN_SPEED_KHZ, JLINKARM_SWD_DEFAULT_SPEED_KHZ, and JLINKARM_SWD_MAX_SPEED_KHZ.

- (highleveldll) Fixed issue where NRFJPROG_get_connected_probes may return wrong serial number.
- (highleveldll) Fixed issue where NRFJPROG_program did not erase external memory when using program option ERASE_PAGES for qspi_erase_mode.
- (highleveldll) Fixed issue where nRF51 recover could become stuck and fail when using J-Link version v7.58e and newer.

- (WindowsRelease) Fixed issue where J-Link installer was not always triggered when needed.

Release 10.15.4
Changelog
--------------------------------------
- (pynrfjprog) Fixed issue introduced in 10.15.3 where pynrjfprog did not install shared libraries for some architectures.

- (nrfjprog.dll) Fixed issue where NRF52833_xxAA_REV2 weren't correctly identified.
- (nrfjprog.dll) Fixed issue where the program to keep hardened ap-protect devices open after recover was not working as intended.

Release 10.15.3
Changelog
--------------------------------------
- (Release) Provide support for Linux ARM64.
- (Release) Include JLink installers with the RPM file type for x86_64 architecture.

- (nrfjprog.dll) Added logging of the progress of modem updates in nrf91 family devices.
- (nrfjprog.dll) Fixed issue where NRF52810_xxAA_REV3, NRF52811_xxAA_REV2, NRF52805_xxAA_REV2, and NRF52820_xxAA_REV3 weren't correctly identified.
- (nrfjprog.dll) Fixed issue where certain nrf52 devices weren't treated as having hardened ap-protect when identified as revision FUTURE.
- (nrfjprog.dll) Optimized QSPI reading algorithm.

- (pynrfjprog) Fixed issue where logging handles were not closed when the API was closed.

- (pynrfjprog) Fixed bug where all log messages from different instances of the same API were written to the log files of all of the instances.

Release 10.15.2
Changelog
--------------------------------------
- (nrfjprog.exe) Fixed issue where --program printed "Verified OK" even if no verification was requested.
- (nrfjprog.exe) Updated bundled modem UART DFU firmware for Thingy:91 board to "nrf9160_pca20035_firmware_upgrade_app_0.1.1.hex".
                    The updated fixes a compatibility issue where the app would not work with bootloaders built with NCS 1.5.0 and newer.

- (pynrfjprog) Updated bundled modem UART DFU firmware for Thingy:91 board to "nrf9160_pca20035_firmware_upgrade_app_0.1.1.hex".
                The updated fixes a compatibility issue where the app would not work with bootloaders built with NCS 1.5.0 and newer.

Release 10.15.1
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v7.58b

- (nrfjprog.exe) Fixed wrong values displayed in error log message after hex file verification failure (with --log).
- (nrfjprog.exe) Fixed issue where a simultaneous --recover and --program would fail if device was protected.
- (nrfjprog.exe) Fixed issue where some error messages would display the chosen coprocessor as a number instead of a string.

- (nrfjprog.dll) Fixed wrong values displayed in error log message after hex file verification failure.
- (nrfjprog.dll) On Windows, a cmd popup will no longer appear when using the DLL from a GUI program.

- (highleveldll) Fixed wrong values displayed in error log message after hex file verification failure.
- (highleveldll) On Windows, a cmd popup will no longer appear when using the DLL from a GUI program.

- (pynrfjprog) Fixed wrong values displayed in error log message after hex file verification failure.
- (pynrfjprog) Added armhf libraries.

Release 10.15.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v7.56a

- (OSXRelease) Fixed issue where "J-Link installer for Mac M1" link in .dmg installed Intel version.
- (OSXRelease) Fixed broken J-Link installer for Mac M1.
- (OSXRelease) Notarized .dmg files to prevent Gatekeeper from blocking install.
- (OSXRelease) Log a warning when nRFJProg tries to load the JLink library in Rosetta 2 mode.

- (nrfjprog.exe) Added option "--ip" and "--port" for connecting to a network enabled debugger.
- (nrfjprog.exe) Added option "--iface" that can be used to specify which interface to use search for debuggers (IP and/or USB).
- (nrfjprog.exe) Added option "--expand" that will make "--ids" print additional information. This option can be used to find
                 the IP and MAC address of network discovered debuggers/emulators.
- (nrfjprog.exe) Added option "--force" to skip confirmation questions.
- (nrfjprog.exe) Added option "--hardreset" for NRF52 family devices to reset the device using the watchdog timer. 
                 This option can be used to protect devices with hardened AP protect without using pin reset.
- (nrfjprog.exe) Fixed issue where external memory (QSPI) programming algorithms did not check to see if bprot / spu protections were enabled for the read / write buffers located in RAM.
- (nrfjprog.exe) Fixed issue where --pinresetenable wrote the wrong value to UICR->PSELRESET for some device revisions.
- (nrfjprog.exe) Bug where --verify cast an exception if given a .bin file, fixed.
- (nrfjprog.exe) Fixed issue where not all sections were included when parsing an elf file.
- (nrfjprog.exe) For OSX M1 machines, fixed bug where in some cases QSPI operations would stall.
- (nrfjprog.exe) FlashNotErasedError will no longer be raised when writing to non-empty addresses.
                 nRFJProg will serve a prompt to ask for confirmation to continue writing to a non-empty address.
                 The prompt may be skipped using the "--force" option.

- (nrfjprog.dll) Added function NRFJPROG_connect_to_emu_with_ip() for connecting to a network enabled debugger.
- (nrfjprog.dll) Added function NRFJPROG_enum_emu_con_info() for getting a list of emulators discovered by J-Link DLL.
- (nrfjprog.dll) Added definition for NRFJPROG_INVALID_EMU_SNR to DllCommonDefinitions.h, that defines an invalid debugger/emulator serial number.
- (nrfjprog.dll) Added definition for types emu_con_info_t and emu_connection_t to DllCommonDefinitions.h. These are used with the new function NRFJPROG_enum_emu_con_info().
- (nrfjprog.dll) Added function NRFJPROG_hard_reset() to perform a hard reset without using pin reset for NRF52 family devices.
- (nrfjprog.dll) Fixed issue where external memory (QSPI) programming algorithms did not check to see if bprot / spu protections were enabled for the read / write buffers located in RAM.
- (nrfjprog.dll) Updated function NRFJPROG_is_qspi_init() to also check the state of the QSPI peripheral of the connected device.
- (nrfjprog.dll) Bug where verify_file() cast an exception if given a .bin file, fixed.
- (nrfjprog.dll) Fixed issue where not all sections were included when parsing an elf file.
- (nrfjprog.dll) For OSX M1 machines, fixed bug where in some cases QSPI operations would stall.

- (pynrfjprog) LowLevel.py: Added function connect_to_emu_with_ip for connecting to a network enabled debugger.
- (pynrfjprog) LowLevel.py: Added function hard_reset to perform a hard reset without using pin reset for NRF52 family devices.
- (pynrfjprog) LowLevel.py: Added function enum_emu_con_info for getting a list of emulators discovered by J-Link DLL.
- (pynrfjprog) LowLevel.py: Updated function is_qspi_init() to also check the state of the QSPI peripheral of the connected device.
- (pynrfjprog) HighLevel.py: Added a new reset action RESET_HARD to perform a hard reset for NRF52 family devices.
- (pynrfjprog) HighLevel.py: InvalidOperationError will no longer be raised when writing to non-empty addresses.
- (pynrfjprog) Parameters.py: Added definitions for NRFJPROG_INVALID_EMU_SNR, EMUConnection, and EMUConInfo to reflect changes in DllCommonDefinitions.h.
- (pynrfjprog) Fixed issue where not all sections were included when parsing an elf file.
- (pynrfjprog) For OSX M1 machines, fixed bug where in some cases QSPI operations would stall.
- (pynrfjprog) Fixed search order in highlevel_program example.
- (pynrfjprog) Fixed search order in program example.

- (highleveldll) Fixed issue where sending a zip file to program() while using ModemUARTDFUProbe, would fail.
- (highleveldll) Fixed issue where external memory (QSPI) programming algorithms did not check to see if bprot / spu protections were enabled for the read / write buffers located in RAM.
- (highleveldll) For OSX M1 machines, fixed bug where in some cases QSPI operations would stall.
- (highleveldll) InvalidOperationError will no longer be raised when writing to non-empty addresses.


Release 10.14.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v7.52d
- (OSXRelease) Provide universal binaries for MacOS M1 and x86_64.

- (LinuxRelease) Provide binaries for armhf raspbian targets.
- (LinuxRelease) Removed 32bit deliveries for Linux.

- (WindowsRelease) Update windows installer.
- (WindowsRelease) Windows binaries depended on MSVC toolset v142, but v140 vas bundled in the installer. Introduced in 10.13.0. VC Redistributable has been updated toolset v142.
- (WindowsRelease) Add an optional pynrfjprog component to installer.
- (WindowsRelease) Fixed bug where 32-bit installer was bundled with 64-bit Segger JLink installer on Windows.

- (highleveldll) Improved modem serial DFU resilience to UART data loss by introducing re-sending of unacknowledged packages.
- (highleveldll) Added function NRFJPROG_find_jlink_path. Allows user to get auto-detected JLinkARM shared library path without initializing highlevel dll.
- (highleveldll) Fixed sector-erase in program function erased too many pages when provided image had data at the end of a page.
- (highleveldll) Fixed issue where mfw packages containing unsegmented update image would not update nrf9160 modem successfully.
- (highleveldll) Image program/read/verify operations will now return an error at an earlier stage if the format is unrecognized.

- (nrfjprog.dll) Added function NRFJPROG_find_jlink_path. Allows user to get auto-detected JLinkARM shared library path without initializing nrfjprog dll.
- (nrfjprog.dll) Fixed erase_file function erased too many pages when provided image had data at the end of a page.
- (nrfjprog.dll) Image program/read/verify operations will now return an error at an earlier stage if the format is unrecognized.

- (pynrfjprog) HighLevel.py: Added function API.find_jlink_path. Allows user to get auto-detected JLinkARM shared library path.
- (pynrfjprog) LowLevel.py: Added function API.find_jlink_path. Allows user to get auto-detected JLinkARM shared library path.
- (pynrfjprog) JLink.py: Redirect find_latest_dll() to HighLevel.API.find_jlink_path.
- (pynrfjprog) Improved modem serial DFU resilience to UART data loss by introducing re-sending of unacknowledged packages.
- (pynrfjprog) HighLevel.py: Fixed program function with sector-erase option erased too many pages when provided image had data at the end of a page.
- (pynrfjprog) LowLevel.py: Fixed erase_file function erased too many pages when provided image had data at the end of a page.
- (pynrfjprog) Fixed issue where mfw packages containing unsegmented update image would not update nrf9160 modem successfully.
- (pynrfjprog) Image program/read/verify operations will now return an error at an earlier stage if the format is unrecognized.

- (nrfjprog.exe) Fixed --sectorerase with --program option erased too many pages when provided image had data at the end of a page.
- (nrfjprog.exe) Fixed issue where mfw packages containing unsegmented update image would not update nrf9160 modem successfully.
- (nrfjprog.exe) Improved helptext and logging regarding supported hex/image formats. File operations will now return an error at an earlier stage if the format is unrecognized.


Release 10.13.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v7.50a

- (nrfjprog.exe) Made --coprocessor flag with CP_APPLICATION as the argument available for all devices.
- (nrfjprog.exe) When an error condition occurs, nrfjprog.exe now prints the last error messages from nrfjprog.dll as part of the error output if logging is enabled.
- (nrfjprog.exe) Fixed issue where not all memory layouts were correctly discovered.
- (nrfjprog.exe) Deprecated QSPI .ini parse error codes.
- (nrfjprog.exe) --program no longer checks if flash is erased before writing in order to improve performance. The user can append option "--verify" to check memory after write operation.
- (nrfjprog.exe) --program can now be used perform modem firmware upgrade using debugger on nRF91 devices by passing the modem firmware .zip file as argument.
- (nrfjprog.exe) Added field "RetainRAM" to QSPI ini file.

- (nrfjprog.dll) Made functions NRFJPROG_select_coprocessor(), NRFJPROG_is_coprocessor_enabled(), and NRFJPROG_enable_coprocessor() available for all families.
- (nrfjprog.dll) Function NRFJPROG_select_coprocessor() no longer requires the debug probe to be disconnected from the device.
- (nrfjprog.dll) Added functions NRFJPROG_read_memory_descriptors and NRFJPROG_read_page_sizes for reading device memory information.
- (nrfjprog.dll) Added function NRFJPROG_select_family(). Allows switching from UNKNOWN family to other family dll interfaces when using nrfjprog.dll.
- (nrfjprog.dll) Added function NRFJPROG_qspi_configure(). Configures, but does not start QSPI.
- (nrfjprog.dll) Added function NRFJPROG_qspi_configure_ini(). Configures QSPI settings based on .ini file.
- (nrfjprog.dll) Added function NRFJPROG_qspi_start(). Starts QSPI based on previously configured settings.
- (nrfjprog.dll) Added function NRFJPROG_qspi_set_size(). Sets the size of the external memory.
- (nrfjprog.dll) Added function NRFJPROG_qspi_get_size(). Gets the size of the external memory.
- (nrfjprog.dll) Added function NRFJPROG_program_file(). Programs file or files to device. Can be used to perform modem firmware upgrade on nRF91 devices.
- (nrfjprog.dll) Added function NRFJPROG_read_to_file(). Reads memories from device to file.
- (nrfjprog.dll) Added function NRFJPROG_verify_file(). Verifies memories against file.
- (nrfjprog.dll) Added function NRFJPROG_erase_file(). Erases non-volatile memories covered by file.
- (nrfjprog.dll) Added NRFJPROG_*_inst versions of all functions. These functions allow a user to connect to multiple debug probes simultaneously by maintaining separate backend instances.
- (nrfjprog.dll) Each instance created by NRFJPROG_open_dll_inst creates a jlinkarm_nrf_worker process executable that hosts the jlink connection. unless a corresponding 
                    NRFJPROG_close_inst is called, this process will remain, and may prevent your program from closing.
- (nrfjprog.dll) Removed implementation of deprecated function NRFJPROG_is_ram_powered, deprecated since 9.2.0. The function now returns NOT_IMPLEMENTED_ERROR.
- (nrfjprog.dll) Added definitions for NRFJPROG_INVALID_ADDRESS and NRFJPROG_INVALID_RESET_PIN to DllCommonDefinitions.h.
- (nrfjprog.dll) Some devices with hardened AP PROTECT were not correctly unlocked with NRFJPROG_recover().
- (nrfjprog.dll) Add new return value JLINKARM_DLL_TIMEOUT_ERROR. This error indicates that the J-Link communication timed out.
- (nrfjprog.dll) Add new return values FILE_PARSING_ERROR, FILE_UNKNOWN_FORMAT_ERROR, FILE_INVALID_ERROR, UNKNOWN_MEMORY_ERROR, used for indicating file operation errors (hex parsing).

- (highleveldll) Add NRFJPROG_*probe_init_ex functions that use msg_callback_ex with an optional argument param instead of log_callback. This allows easier logging of multiple probe instances.
- (highleveldll) Added support for pipelined updates of nrf9160 modem in supported bootloaders.
- (highleveldll) NRFJPROG_set_coprocessor no longer executes a NRFJPROG_disconnect_from_device() in the background.
- (highleveldll) When using NRFJPROG_*probe_init_ex constructors, SWD-based probe connections can now set clock speeds manually.
- (highleveldll) Fixed issue where not all memory layouts were correctly discovered.
- (highleveldll) get_device_info now allows a partially populated device_info_t struct to in order to handle situations where device version, family and memory layout are not all available at the same time.
- (highleveldll) Added support for performing modem firmware update on nRF91 devices using DebugProbe->program and DebugProbe->verify.
- (highleveldll) NRFJPROG_program() no longer checks if flash is erased before writing in order to improve performance. Enable verification to check result after writing.

- (pynrfjprog) APIError now contains the last error messages reported from the dll if logging is enabled.
- (pynrfjprog) Removed deprecated function NRFJPROG_is_ram_powered, deprecated since 9.2.0
- (pynrfjprog) Drop support for deprecated Python versions 2.7, 3.4, and 3.5
- (pynrfjprog) MultiAPI.MultiAPI is now deprecated and will be removed in a future major version of pynrfjprog. It redirects to LowLevel.API that fulfills the same purpose.
- (pynrfjprog) HighLevel: DebugProbe and IPCDFUProbe constructors can set SWD clock speed through keyword argument clock_speed.
- (pynrfjprog) HighLevel: get_device_info no longer throws an exception, but stores the dll return code in the DeviceInfo class.
- (pynrjfprog) Parameters.py: Added definitions for NRFJPROG_INVALID_ADDRESS and NRFJPROG_INVALID_RESET_PIN.
- (pynrfjprog) LowLevel.py: Updated with new functions from nrfjprog.dll, adding program_file(), read_to_file(), verify_file(), erase_file(),
                    qspi_init_ini(), qspi_start(), qspi_configure() and qspi_configure_ini.
- (pynrfjprog) Parameters.py: Added NrfjrpogdllLogLevel, wrapping nrfjprogdll_log_level enum from DllCommonDefinitions.h.
- (pynrfjprog) APIError.py: Added return values JLINKARM_DLL_TIME_OUT_ERROR, FILE_PARSING_ERROR, FILE_UNKNOWN_FORMAT_ERROR, UNKNOWN_MEMORY_ERROR, reflecting changes in DllCommonDefinitions.h.
- (pynrfjprog) Update JLink.py find_latest_jlink script to support windows installs with J-Link sw pack installs in both program files and program files(x86)

- (nrfdfu) Removed IPCHandler type. This DFU mechanism is now covered by nrfjprog.dll.

- (warning) Please note, it is now more important than before to always explicitly close a connection using the appropriate function call. 
            Failure to properly clean up a session will lead to leftover jlinkarm_nrf_worker processes remaining in the system. 
            This may prevent your program from exiting. This may also prevent future nrfjprog or J-Link sessions from working correctly.

Release 10.12.2
Changelog
--------------------------------------
- No changes, updated to synchronize with mergehex.

Release 10.12.1
Changelog
--------------------------------------
- (highleveldll) Fixed issue where NRFJPROG_get_connected_probes would not find connected probes on some versions of OSX.

Release 10.12.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v6.88a

- (nrfjprog.exe) In certain devices, ap protect did not stay disabled after calling nrfjprog.exe --recover. Fixed by programming in a fw that unlocks the device.
- (nrfjprog.exe) In certain devices, the code memory will contain a small fw after nrfjprog.exe --recover, which must be erased when programming.
- (nrfjprog.exe) Added support for flag --recover in combination with --program. For devices needs to be unlocked when blank, this avoids programming the unlock fw.
- (nrfjprog.exe) Support programming and generation of .elf, .axf, and .bin files in addition to .hex.
- (nrfjprog.exe) Fixed bug where all log messages were prefixed 'Debug' regardless of log level.
- (nrfjprog.exe) Added RxDelay parameter to QSPIDefault.ini file.
- (nrfjprog.exe) Nrfdfu.h was missing in install folder, fixed.

- (highleveldll) Added function NRFJPROG_probe_setup_qspi_ini().
- (highleveldll) Support programming and generation of .elf, .axf, and .bin files in addition to .hex.
- (highleveldll) Fixed bug where 'NRFJPROG_get_device_info' returned error 'NOT_AVAILABLE_BECAUSE_PROTECTION' for all readback protected devices regardless of being able to read the device information.
- (highleveldll) Added functions NRFJPROG_is_eraseprotect_enabled() and NRFJPROG_enable_eraseprotect().
- (highleveldll) NRFJPROG_get_connected_probes no longer loads the jlink dll to detect connected J-Link debug probes.
- (highleveldll) Deprecation: Parameter default_jlink_path to NRFJPROG_dll_open() is deprecated, and will be removed in a future major release of nrfjprog.

- (nrfjprog.dll) Added NRFJPROG_qspi_set_rx_delay() function.
- (nrfjprog.dll) Fixed bug where all log messages were prefixed 'Debug' regardless of log level.
- (nrfjprog.dll) Fixed bug where certain commands could fail with JLINKARMDLL_ERROR if target debug power was disabled during an open nrfjprogdll session.
- (nrfjprog.dll) NRFJPROG_select_coprocessor no longer checks if the coprocessor is enabled. Instead, the selected coprocessor is automatically enabled when 
                 NRFJPROG_connect_to_device, or another function that connects to the device is called.
- (nrfjprog.dll) If the target page for a call to NRFJPROG_erase_page was protected by the MPU, the operation would previously fail silently on some devices.

- (pynrfjprog) Added function LowLevel.qspi_set_rx_delay()
- (pynrfjprog) Added function HighLevel.probe_setup_qspi_ini()
- (pynrfjprog) Added functions HighLevel.is_eraseprotect_enabled() and HighLevel.enable_eraseprotect()
- (pynrfjprog) Added optional argument 'log_suffix' to HighLevel probes to improve control over python logging.

Release 10.11.1
Changelog
--------------------------------------
- (nrfjprog.exe) Fixed issue where nrfjprog could not be called thorugh a symlink on unix systems. Introduced in 10.11.0.
- (nrfjprog.exe) Fixed bug where --erasepage would erase too many pages when only start address was provided by user.

- (nrfjprog.dll) Fixed bug where DLL loading did not detect missing functions in target DLL.

Release 10.11.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v6.86f.

- (nrfjprog.dll) Updated doc string for NRFJPROG_erase_all to make the note about NVM block protection more clear.
- (nrfjprog.dll) Add function NRFJPROG_is_eraseprotect_enabled(). In devices that does not support erase protection (nrf51, nrf52), this function returns false.
- (nrfjprog.dll) If erase protection is enabled, erase functions will now return NOT_AVAILABLE_BECAUSE_PROTECTION if the target operation is not possible.
- (nrfjprog.dll) NRFJPROG_recover() can now disable erase protection if no readback protection is enabled.
- (nrfjprog.dll) Fixed issue where in nRF53 devices, NRFJPROG_readback_protect(SECURE) did not enable secure ap protection.
- (nrfjprog.dll) Fixed issue where in devices with trustzone, nrfjprog could select NVMC_NS for erase operations, causing the erase operation to fail silently.
- (nrfjprog.dll) Fixed issue where if SECURE readbackprotection was enabled, certain functions would fail with NOT_AVAILABLE_BECAUSE_PROTECTION even though the operation was possible.

- (pynrfjprog) Added functions is_eraseprotect_enabled() and enable_eraseprotect().
- (pynrfjprog) Added missing enumerator SECURE to ReadbackProtection enumerator.

Release 10.10.0
Changelog
--------------------------------------
- (nrfjprog.dll) Fixed bug where nrfjprog did not correctly handle debug power. NRFJPROG_close now always ensures that debug power is disabled.
- (nrfjprog.dll) Fixed issue where nrfjprogdll failed to find the jlinkarm library if it was not located in the default install path on linux and OS X. 

- (pynrfjprog) Fixed bug where nrfjprog did not correctly handle debug power. LowLevel.Close and DebugProbe.uninit now always ensures that debug power is disabled.
- (pynrfjprog) Added enumerator values for QSPI speeds 64MHz and 96MHz to Parameters.py.
- (pynrfjprog) Stopped testing with python 3.4.
- (pynrfjprog) Update example scripts so they work even if pynrfjprog is not available as a module named pynrfjprog.
- (pynrfjprog) Add an api synchronization primitive to MultiAPI to fix issue where two threads could be using MultiAPI concurrently and the wrong thread got the result package from the runner thread.
- (pynrfjprog) Added optional argument api_lock_factory to MultiAPI.MultiAPI constructor.
                This argument can be modified to replace the locking primitive used to make MultiAPI thread safe if your python threading framework will not lock correctly with a threading.Lock object.

- (nrfjprog.exe) Fixed bug where nrfjprog did not correctly handle debug power.
- (nrfjprog.exe) nrfjprog.exe now attempts to create any intermediate folders if the folder pointed to by --log doesn't exist.
- (nrfjprog.exe) Fixed bug where nrfjprog did not erase all pages touched with unaligned end in --erasepage.
- (nrfjprog.exe) Previously, numbers passed as arguments in non-hex format had to be less than 2147483647 (0x7FFFFFFF). This restriction no longer applies.
- (nrfjprog.exe) Deprecated QSPI pin selection values in QspiDefault.ini for nRF53 devices. nRF53 does not support changing the pins used for QSPI.

- (highleveldll) Fixed bug where nrfjprog did not correctly handle debug power.
- (highleveldll) Fixed issue where highlevel dll could lock up in when used by multiple users of the same computer.
- (highleveldll) Fixed bug where some highlevel dll api functions were not thread safe.
- (highleveldll) Fixed bug where in some circumstances erase_page would not erase pages.


Release 10.9.1
Changelog
--------------------------------------
- (Release) Executables and DLLs are now being signed to prevent a Windows "unknown publisher" warning message.

- (nrfjprog.exe) Fixed bug where under special circumstances nrf5340_xxaa_engb would not be identified correctly.
- (nrfjprog.exe) Fixed issue where trying to read addresses from before ram to after ram would not check if ram was powered.

- (nrfjprog.dll) Fixed bug where under special circumstances nrf5340_xxaa_engb would not be identified correctly.

Release 10.9.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v6.80a.

- (nrfjprog.exe) Fixed bug where the network core of nrf5340 could be reported as secure protected when it was not.
- (nrfjprog.exe) Add support for QSPI frequency up to 96MHz in devices that support it.
- (nrfjprog.exe) Fixed bug where custom instructions with only one argument in QSPI INI file caused a crash
- (nrfjprog.exe) nRF9160_XXAA: Introduced split between Engineering A (nRF9160_XXAA_rev1) and Revision 1 (nRF9160_XXAA_rev2)
- (nrfjprog.exe) In special circumstances, pin resets could cause debug power to be enabled. Fixed.

- (nrfjprog.dll) If jlink_path argument to NRFJPROG_open_dll is NULL or nullptr, the dll will attempt to search for a J-Link dll automatically.
- (nrfjprog.dll) Add support for QSPI frequency up to 96MHz in devices that support it.
- (nrfjprog.dll) Internal restructuring may cause log message changes.
- (nrfjprog.dll) QSPI_custom had inconsistent argument types across dlls. Fixed.
- (nrfjprog.dll) Some QSPI commands could loop forever. They now time out after 15 minutes.
- (nrfjprog.dll) nRF9160_XXAA: Introduced split between Engineering A (nRF9160_XXAA_rev1) and Revision 1 (nRF9160_XXAA_rev2)
- (nrfjprog.dll) Fixed bug where the network core of nrf5340 could be reported as secure protected when it was not.
- (nrfjprog.dll) In special circumstances, pin resets could cause debug power to be enabled. Fixed.

- (pynrfjprog)   nRF9160_XXAA: Introduced split between Engineering A (nRF9160_XXAA_rev1) and Revision 1 (nRF9160_XXAA_rev2)
- (pynrfjprog)   Fixed bug where the network core of nrf5340 could be reported as secure protected when it was not.
- (pynrfjprog)   In special circumstances, pin resets could cause debug power to be enabled. Fixed.
- (pynrfjprog)   Fixed MCUBootProbe serial timing issue that caused the mcuboot process to time out.

- (highleveldll) nRF9160_XXAA: Introduced split between Engineering A (nRF9160_XXAA_rev1) and Revision 1 (nRF9160_XXAA_rev2)
- (highleveldll) Fixed bug where the network core of nrf5340 could be reported as secure protected when it was not.
- (highleveldll) In special circumstances, pin resets could cause debug power to be enabled. Fixed.
- (highleveldll) Fixed MCUBootProbe serial timing issue that caused the mcuboot process to time out.

- (nrfdfu.dll)   Fixed mcuboot serial timing issue that caused the process to time out.

Release 10.8.0
Changelog
--------------------------------------
- (Release) Added SHA1, SHA256, and md5 hashes for all release files
- (Release) Update bundled Segger installers and tar balls to v6.70d.

- (LinuxRelease) Fixed symlink path in readme text
- (LinuxRelease) Fixed issue where release contained a tar ball with the same name as the parent tar ball.

- (nrfjprog.exe) Added unicode support for CLI arguments
- (nrfjprog.exe) Added support for nRF5340_xxAA_ENGB
- (nrfjprog.exe) Increased readability in logs
- (nrfjprog.exe) Added --deviceversion CLI argument
- (nrfjprog.exe) Fixed issue where some versions of nrf9160 would not be recognized when nrfjprog.exe was called without a -f or --family argument.

- (nrfjprog.dll) Added support for nRF5340_xxAA_ENGB
- (nrfjprog.dll) Increased readability in logs
- (nrfjprog.dll) Improved the logging on jlink function failure.
- (nrfjprog.dll) Fixed issue where some versions of nrf9160 were not detected as NRF91 family by unknowndll.

- (pynrfjprog)   Added support for nRF5340_xxAA_ENGB
- (pynrfjprog)   Increased readability in logs
- (pynrjfprog)   Add aliases for PC, LR, and SP registers in CpuRegister enumerator.

- (highleveldll) Added support for nRF5340_xxAA_ENGB
- (highleveldll) Increased readability in logs
- (highleveldll) Fixed issue where some versions of nrf9160 would not be recognized by probe init functions.

- (DllCommonDefinitions) Add aliases for PC, LR, and SP registers in cpu_registers_t enumerator.

Release 10.7.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v6.62b.

- (WindowsRelease) Included .lib files for all dlls.

- (OSXRelease) Fixed issue where OSX release contained a tar ball with the same name as the parent tar ball.

- (nrfjprog.exe) Added support for nRF52820_xxAA_REV2

- (nrfjprog.dll) Fix issue where nRF9160 targets could be identified as nRF9160_FUTURE.
- (nrfjprog.dll) Fix issue where nRF52 targets were not halted during page erase.
- (nrfjprog.dll) nRFJProg now updates the debug probe fw without user interaction again (changed in 10.6.0). Note that this may lead to issues with J-Link Dll versions v6.60 to v6.60f.
- (nrfjprog.dll) Added support for nRF52820_xxAA_REV2
- (nrfjprog.dll) NRFJPROG_connect_to_emu_with_snr() will fail with WRONG_FAMILY_FOR_DEVICE if the target device debug port IDR does not match the one expected by the dll.
- (nrfjprog.dll) NRFJPROG_connect_to_emu_without_snr() will fail with WRONG_FAMILY_FOR_DEVICE if the target device debug port IDR does not match the one expected by the dll.

- (pynrfjprog)   Added support for nRF52820_xxAA_REV2

- (highleveldll) Added support for nRF52820_xxAA_REV2

Release 10.6.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v6.60e.

- (nrfjprog.dll) Fixed issue where NRFJPROG_open_dll did not properly update internal state when it failed, leading to segmentation faults in subsequent NRFJPROG_close_dll calls.
- (nrfjprog.dll) Known issue: nRFJProg previously updated the debug probe fw without user interaction. Due to an issue with J-Link, a popup will now appear on connection if a fw update is available.

- (dfudll) Added support for modem firmware upgrade for nRF91 over serial port communication.
- (dfudll) Added NRFDFU_connect_to_modemdfu_target() function that initializes a session for a nRF91 modem DFU target.

- (pynrfjprog) Added HighLevel.ModemUARTDFUProbe.
- (pynrfjprog) Added example for doing nRF91 modem firmware upgrade over serial port using HighLevel.ModemUARTDFUProbe.
- (pynrfjprog) Fixed issue where passing argument log_str in LowLevel.API caused an exception on first log.
- (pynrfjprog) Bug where pynrfjprog could not be called from inside a folder containing utf characters, fixed.

- (highleveldll) Added function NRFJPROG_modemdfu_dfu_serial_init that initializes communication to a nRF91 modem DFU target via serial port.
- (highleveldll) Added file "nrf9160_pca20035_firmware_upgrade_app_0.1.0.hex" for use with nRF91 modem DFU functionality.

- (nrfjprog.exe) Bug where nrfjprog could not be called from inside a folder containing utf characters, fixed.
- (nrfjprog.exe) Fixed issue where nrfjprog exe caused segmentation faults if an unsupported JLink Dll was loaded.
- (nrfjprog.exe) Updated error message for error code NrfjprogOutdatedError to better describe the possible causes of the error.
- (nrfjprog.exe) Documented "--log" flag.
- (nrfjprog.exe) Added argument option for "--log" to set log file location.
- (nrfjprog.exe) Added return values LogParentDirDoesNotExistWarning (-110) LogWritePermissionWarning(-111).
- (nrfjprog.exe) Deprecated return value NoLogWarning (-102).


Release 10.5.0
Changelog
--------------------------------------
- (Release) Update bundled Segger installers and tar balls to v6.54c.

- (dfudll) Fixed UART RX buffer processing that caused crash

- (nrfjprog.exe) Added support for nRF5340_xxAA_ENGA

- (nrfjprog.dll) Added support for nRF5340_xxAA_ENGA

- (pynrfjprog)   Added support for nRF5340_xxAA_ENGA

- (highleveldll) Added support for nRF5340_xxAA_ENGA

- (highleveldll) Add function NRFJPROG_is_rtt_started(Probe_handle_t handle, bool * started)
- (highleveldll) Add function NRFJPROG_rtt_set_control_block_address(Probe_handle_t handle, uint32_t address)
- (highleveldll) Add function NRFJPROG_rtt_start(Probe_handle_t handle)
- (highleveldll) Add function NRFJPROG_rtt_is_control_block_found(Probe_handle_t handle, bool * is_control_block_found)
- (highleveldll) Add function NRFJPROG_rtt_stop(Probe_handle_t handle)
- (highleveldll) Add function NRFJPROG_rtt_read(Probe_handle_t handle, uint32_t up_channel_index, char * data, uint32_t data_len, uint32_t * data_read)
- (highleveldll) Add function NRFJPROG_rtt_write(Probe_handle_t handle, uint32_t down_channel_index, const char * data, uint32_t data_len, uint32_t * data_written)
- (highleveldll) Add function NRFJPROG_rtt_read_channel_count(Probe_handle_t handle, uint32_t * down_channel_number, uint32_t * up_channel_number)
- (highleveldll) Add function NRFJPROG_rtt_read_channel_info(Probe_handle_t handle, uint32_t channel_index, rtt_direction_t dir, char * channel_name, uint32_t channel_name_len, uint32_t * channel_size)

Release 10.4.1
Changelog
--------------------------------------
- (nrfjprog.exe) In some cases when nrfjprog was called through an indirection (ie. PATH or symlink), it could not find its local resources. Fixed.

- (dfudll) For Linux and OSX, file had changed name. Fixed.

- (OSXRelease) Installing fails for nrf command line tools on OSX. Fixed

Release 10.4.0
Changelog
--------------------------------------
- (ALL)          Update bundled Segger installers and tar balls to v6.50b.

- (nrfjprog.exe) Fixed newlines in commandline help text
- (nrfjprog.exe) In devices with SPU, if a page was set as NonSecure, erasepage and sectorerase failed silently. Fixed.
- (nrfjprog.exe) Remove option --licenses. See the "nRF Command Line Tools" documentation at https://www.nordicsemi.com/ for a comprehensive list of open source licenses in use.
- (nrfjprog.exe) In devices with Trustzone, if AIRCR.SYSRESETREQS was set and the core was running NonSecure code, operations that required a call to disable_bprot could fail silently. Fixed.
- (nrfjprog.exe) In special circumstances if family was not supplied, family detection could fail for nRF9160. Fixed.

- (highleveldll) Add function NRFJPROG_probe_set_coprocessor(Probe_handle_t debug_probe, coprocessor_t coprocessor)

- (nrfjprog.dll) In devices with SPU, if a page was set as NonSecure, erasepage and sectorerase failed silently. Fixed.
- (nrfjprog.dll) In special circumstances family detection in unknown dll could fail for nRF9160. Fixed.
- (nrfjprog.dll) Change in behavior, in some families NRFJPROG_pin_reset reset the coprocessor selection to CP_APPLICATION.
- (nrfjprog.dll) Change in behavior, connect_to_device previously could fail with NOT_AVAILABLE_BECAUSE_COPROCESSOR_DISABLED. Now enables coprocessor if neccessary.
- (nrfjprog.dll) In devices with Trustzone sys_reset failed silently after attempting a pin reset if AIRCR.SYSRESETREQS was set and the core was running NonSecure code. Fixed.

- (pynrfjprog) In devices with SPU, if a page was set as NonSecure, erase_page and sectorerase failed silently. Fixed.
- (pynrfjprog) Fixed issue where functions in HighLevel.py did not accept pathlib objects
- (pynrfjprog) Added HighLevel.MCUBootDFUProbe.

- (highleveldll) Added function NRFJPROG_mcuboot_dfu_init that initializes communication to a Zephyr-MCUBoot target via serial port.

- (dfudll) Added MCUBoot support for Zephyr targets over serial port communication.
- (dfudll) Added NRFDFU_connect_to_mcuboot_target() function that initializes a session for an MCUBoot target.

Release 10.3.0
Changelog
--------------------------------------
- (highleveldll) When programming using page erase or page and UICR erase and early flash pages were protected by block protection mechanisms, block protection was not disabled before erasing.

- (nrfjprog.exe) When programming using --sectorerase or --sectoranduicrerase and early flash pages were protected by block protection mechanisms, block protection was not disabled before erasing.

- (nrfjprogdll) NRFJPROG_erase_page() now returns UNAVAILABLE_BECAUSE_BPROT if block protection is enabled for the page to erase.
- (nrfjprogdll) Added nrfjprogdll_err_t enum UNAVAILABLE_BECAUSE_BPROT for when an operation is expected to fail due to block protection mechanisms.
- (nrfjprogdll) Removed undocumented sys_reset side effect of erase_page function in nRF91 dll. Introduced in 10.2.1.

- (pynrfjprog)  erase_page() now returns UNAVAILABLE_BECAUSE_BPROT if block protection is enabled for the page to erase.
- (pynrfjprog)  Added NrfjprogdllErr enum UNAVAILABLE_BECAUSE_BPROT for when an operation is expected to fail due to block protection mechanisms.

Release 10.2.1
Changelog
--------------------------------------
- (nrfjprog.exe) Bug where in some circumstances page erase would not erase pages, fixed

- (nrfjprogdll) Bug where in some circumstances page erase would not erase pages, fixed

Release 10.2.0
Changelog
--------------------------------------
- (nrfjprogdll) Added function NRFJPROG_read_device_info()
- (nrfjprogdll) Added function NRFJPROG_is_coprocessor_enabled()
- (nrfjprogdll) Added function NRFJPROG_enable_coprocessor()
- (nrfjprogdll) Added function NRFJPROG_disable_coprocessor()
- (nrfjprogdll) Added function NRFJPROG_select_coprocessor()
- (nrfjprogdll) Added function NRFJPROG_is_bprot_enabled()

- (dfudll) Updated ipc_dfu bootloader.

- (highleveldll) Fixed issue where if BPROT, ACL, SPU or other similar mechanisms were used to protect memory, program might silently fail.
- (highleveldll) Fixed issue where debug probe connections would generate temporary folders in the users current working directory instead of temporary folders. Introduced in 10.1.0.

- (nrfjprog.exe) Fixed issue where if BPROT, ACL, SPU or other similar mechanisms were used to protect memory, program might silently fail.
- (nrfjprog.exe) Change in behavior: If UICR->APPROTECT is non-zero, but AP protection is not yet active, --eraseall, --erasepage, and --program
                    may fail with UnavailableOperationBecauseProtectionError if memory block protection mechanisms like SPU flash regions, ACL, or BPROT need to be disabled.

- (pynrfjprog) Added LowLevel.CoProcessor enumerator.
- (pynrfjprog) Added function LowLevel.is_coprocessor_enabled()
- (pynrfjprog) Added function LowLevel.enable_coprocessor()
- (pynrfjprog) Added function LowLevel.disable_coprocessor()
- (pynrfjprog) Added function LowLevel.select_coprocessor()
- (pynrfjprog) Added function LowLevel.is_bprot_enabled()
- (pynrfjprog) Fixed issue where HighLevel.go() was not implemented correctly. It has been replaced with the function run(sp, pc) to correctly mirror the DLL functionality.
- (pynrfjprog) Segger J-Link install folder on Windows changed with v6.46, update detection scheme in JLink.py.
                    Now assumes newest J-Link version is installed in folder "_DEFAULT_SEGGER_ROOT_PATH\JLink" before continuing to folders that match "_DEFAULT_SEGGER_ROOT_PATH\JLink_v*".

Release 10.1.2
Changelog
--------------------------------------
- (pynrfjprog) Fix issue where pynrfjprog didn't bundle required file LICENSE.txt, introduced in 10.0.0

Release 10.1.1
Changelog
--------------------------------------
- (dfudll) Updated ipc_dfu bootloader.

Release 10.1.0
Changelog
--------------------------------------
- (LinuxRelease) Released Zip files used to have long internal folder structures. Fixed.

- (OSXRelease) Released Zip files used to have long internal folder structures. Fixed.

- (highleveldll) Added support for IPC DFU opperations.
- (highleveldll) Change in behaviour, NRFJPROG_dll_open() no longer takes in prog_cb parameter.
- (highleveldll) Change in behaviour, NRFJPROG_probe_init() requires prog_cb parameter.
- (highleveldll) New function added: NRFJPORG_dfu_init().

- (nrfjprog.dll) For some devices in the nRF91 family, nrfjprog was unable to detect the family automatically. Fixed.

- (nrfjprog.exe) For some devices in the nRF91 family, nrfjprog was unable to detect the family automatically. Fixed.

- (dfudll) Initial release of dfudll.

- (pynrfjprog) Added support for IPC DFU operations.
- (pynrfjprog) Modify HighLevel class structure. All interactions with Probe now goes through Probe interface child classes IPCDFUProbe and DebugProbe.

Release 10.0.0
Changelog
--------------------------------------
- (LinuxRelease) Initial release of Linux .deb package.
- (LinuxRelease) Bundle license file in zip, tar.gz, and .deb deliveries.
- (LinuxRelease) Update bundled Segger installers and tar balls to v6.44e.

- (OSXRelease) Initial release of OS X .dmg and .pkg packages.
- (OSXRelease) Bundle license file in tar, .dmg, and .pkg deliveries.
- (OSXRelease) Update bundled Segger installer to v6.44e.

- (WindowsRelease) Install license file in installation folder.
- (WindowsRelease) Update bundled Segger installer to v6.44e.
- (WindowsRelease) Only run Segger J-Link installer package if a newer version is not installed.

- (Known bug) Introduced previously, but identified in 10.0.0. In highly parallelized workloads (ie. many processes/threads calling nrfjprog library functions), NRFJPROG_close_dll() may cause a segfault or access violation in third party libraries.
- (Known bug) New functions HighLevel.probe_reset() and LowLevel.reset_connected_emu() may fail with segmentation faults on OSX.

- (nrfjprog.exe) Added support for nRF9160_xxAA_REV1
- (nrfjprog.exe) Added support for nRF52840_xxAA_REV2
- (nrfjprog.exe) Added support for nRF52811_xxAA_REV1
- (nrfjprog.exe) Added support for nRF52810_xxAA_REV2
- (nrfjprog.exe) Change license to Nordic 5-Clause. See attached license file for new license agreement.
- (nrfjprog.exe) Add license heading to nrfjprog.h header file.
- (nrfjprog.exe) Change in behavior: On windows, J-Link probe fw updates are now performed automatically and silently. This matches unix client behavior.
- (nrfjprog.exe) Change in behavior: nrfjprog always executes qspi custom initialization methods when present in the loaded QSPI ini file. Read QspiDefault.ini for more details.
- (nrfjprog.exe) Deprecated command --qspicustominit, this flag now does nothing.

- (nrfjprog.dll) Added support for nRF9160_xxAA_REV1
- (nrfjprog.dll) Added support for nRF52840_xxAA_REV2
- (nrfjprog.dll) Added support for nRF52811_xxAA_REV1
- (nrfjprog.dll) Added support for nRF52810_xxAA_REV2
- (nrfjprog.dll) Fixed missing possible OUT_OF_MEMORY return value in functions NRFJPROG_qspi_custom() and NRFJPROG_qspi_erase() for nRF52 devices.
- (nrfjprog.dll) Fixed memory allocation error in NRFJPROG_write() function. New OUT_OF_MEMORY return value in NRFJPROG_write() function documented. Issue introduced in version 9.8.0.
- (nrfjprog.dll) Fixed issue in nRF52 series where a race condition could occur in NRFJPROG_readback_protect() when NRFJPROG_debug_reset() was called.
- (nrfjprog.dll) Change in behavior: In NRFJPROG_debug_reset(), a CTRL-AP reset is now always performed. Previously, a system reset was attempted if the debug probe was connected to the device.
- (nrfjprog.dll) Add license heading to all header files.
- (nrfjprog.dll) Change license to Nordic 5-Clause. See attached license file for new license agreement.
- (nrfjprog.dll) In nRF91, improve support for use cases where secure debugging is not available.
- (nrfjprog.dll) In nRF91, improve support for use cases where peripheral security mapping is modified.
- (nrfjprog.dll) In nRF52_recover(), always perform a CTRL-AP eraseall if a CTRL-AP is present in the device.
- (nrfjprog.dll) In nRF52, nRF53, nRF91, don't switch interface type when performing a pin reset.
- (nrfjprog.dll) In nRF52, don't assume a device isn't protected if we're already connected.
- (nrfjprog.dll) Fixed an issue where certain usage scenarios could cause a J-Link race condition that resulted in a lock-up in the DLL logger mechanism.
- (nrfjprog.dll) Add new function NRFJPROG_reset_connected_emu(), which resets the currently connected debug probe. Must be called after NRFJPROG_connect_to_emu_with_snr() or NRFJPROG_connect_to_emu_without_snr().
- (nrfjprog.dll) Change in behavior: On windows, J-Link probe fw updates are now performed automatically and silently. This matches unix client behavior.
- (nrfjprog.dll) Remove device type enums NRF51_XLR1, NRF51_XLR2, NRF51_XLR3, NRF51_L3, NRF51_XLR3P, NRF51_XLR3LC, NRF52_FP1_ENGA, NRF52_FP1_ENGB,
                    NRF52_FP1, NRF52_FP1_FUTURE, NRF52_FP2_ENGA, NRF52_FP2_FUTURE, replaced by other names in version 9.4.0.

- (highleveldll) Add new function NRFJPROG_probe_reset(probe_handle), which resets the debug probe.
- (highleveldll) Add new function NRFJPROG_probe_replace_fw(probe_handle), which replaces the fw on debug probe.
- (highleveldll) Change in behavior: On windows, J-Link probe fw updates are now performed automatically and silently. This matches unix client behavior.
- (highleveldll) Change in behavior: nRFJProg and Segger sub-libraries are now copied to a temporary folder before loading.
                    - This allows a single instance of the highleveldll to be used with multiple probes concurrently without spawning a new process.
- (highleveldll) Change in behavior: An active debugger connection is kept for each probe instance from probe_init() to probe_uninit().
                    - This may cause conflicts if other J-Link connections are attempted in parallel to the same probe.
                    - This reduces the runtime of all functions that take a probe handle.
- (highleveldll) Change in behavior: Two probe handles pointing to the same debug probe can no longer be created.
- (highleveldll) dll_open() and probe_initialize() may now fail with the error FILE_OPERATION_FAILED if generating temporary library files failed.
- (highleveldll) Added support for nRF9160_xxAA_REV1
- (highleveldll) Added support for nRF52840_xxAA_REV2
- (highleveldll) Added support for nRF52811_xxAA_REV1
- (highleveldll) Added support for nRF52810_xxAA_REV2
- (highleveldll) Add license heading to all header files.
- (highleveldll) Change license to Nordic 5-Clause. See attached license file for new license agreement.
- (highleveldll) Fixed an issue where certain usage scenarios could cause a J-Link race condition that resulted in a lock-up in the DLL logger mechanism.
- (highleveldll) Remove device type enums NRF51_XLR1, NRF51_XLR2, NRF51_XLR3, NRF51_L3, NRF51_XLR3P, NRF51_XLR3LC, NRF52_FP1_ENGA, NRF52_FP1_ENGB,
                    NRF52_FP1, NRF52_FP1_FUTURE, NRF52_FP2_ENGA, NRF52_FP2_FUTURE, replaced by other names in version 9.4.0.

- (pynrfjprog)   Added support for nRF9160_xxAA_REV1
- (pynrfjprog)   Added support for nRF52840_xxAA_REV2
- (pynrfjprog)   Added support for nRF52811_xxAA_REV1
- (pynrfjprog)   Added support for nRF52810_xxAA_REV2
- (pynrfjprog)   Add function reset_connected_emu, which resets the currently connected debug probe.
- (pynrfjprog)   Add function replace_connected_emu_fw, which replaces the firmware on the currently connected debug probe.
- (pynrfjprog)   Change in behavior: On windows, J-Link probe fw updates are now performed automatically and silently. This matches unix client behavior.
- (pynrfjprog)   Remove device type enums NRF51_XLR1, NRF51_XLR2, NRF51_XLR3, NRF51_L3, NRF51_XLR3P, NRF51_XLR3LC, NRF52_FP1_ENGA, NRF52_FP1_ENGB,
                    NRF52_FP1, NRF52_FP1_FUTURE, NRF52_FP2_ENGA, NRF52_FP2_FUTURE, deprecated and replaced by other names in version 9.4.0.
- (pynrfjprog)   In MultiAPI, use forkservers to spawn new threads when available.
- (pynrfjprog)   Improve MultiAPI performance by using pipes instead of queues to communicate with the child process.
- (pynrfjprog)   Note: The following changes require no modification of scripts already using pynrfjprog.
- (pynrfjprog)   Renamed API.py to LowLevel.py.
- (pynrfjprog)   Added HighLevel.py module, a python API for the nrfjprog.exe-like highlevelnrfjprog library.
- (pynrfjprog)   Moved enumerators and objects common to HighLevel.py and LowLevel.py to shared module Parameters.py.
- (pynrfjprog)   Moved APIError class to module APIError.py.
- (pynrfjprog)   Added dummy module API.py that maintains compatibility with previous module interface.
- (pynrfjprog)   Added imports in LowLevel.py to preserve old naming of objects moved to Parameters.py and APIError.py.
- (pynrfjprog)   Change license to Nordic 5-Clause. See attached license file or pip wheel license details for new license agreement.
- (pynrfjprog)   Fixed an issue where certain usage scenarios could cause a J-Link race condition that resulted in a lock-up in the DLL logger mechanism.
- (pynrfjprog)   Bundle LICENSE file with release.

Release 9.8.0
Changelog
--------------------------------------
- (WindowsRelease) Released 64-bit Windows installer for nRF5x-Command-Line-Tools.
- (WindowsRelease) Bundled Visual C redistributable installer v14.15.26706.0 with nRF5x-Command-Line-Tools.
- (WindowsRelease) Renamed dll header file nrf52_nrfjprogdll.h to jlinkarm_nrf52_nrfjprogdll.h
- (WindowsRelease) Renamed dll header file nrf51_nrfjprogdll.h to jlinkarm_nrf51_nrfjprogdll.h
- (WindowsRelease) Renamed dll header file unknown_nrfjprogdll.h to jlinkarm_unknown_nrfjprogdll.h

- (nrfjprog.exe) Fixed a race condition that could occur in the nrfjprog Logger class when asynchronous J-Link threads accessed a log buffer. Introduced in 9.7.3.
- (nrfjprog.exe) Fixed logging mechanism. Extended logging was disabled after certain operations. Introduced in 9.7.3.
- (nrfjprog.exe) Added timestamps to the logging printouts.
- (nrfjprog.exe) Updated compiler for windows platforms. Will no longer work on Windows versions predating Windows 7.
- (nrfjprog.exe) Fixed a memory leak that occurred when searching for the J-Link DLL on windows. Introduced in 9.5.0.
- (nrfjprog.exe) Modified --program option to be able to flash hex files with address-unaligned records.

- (nrfjprog.dll) Fixed header file for NRFJPROG_qspi_custom() function for NRF52 devices. Parameter instruction_length was reported as a uint8_t when it was a uint32_t parameter.
- (nrfjprog.dll) Fixed a race condition that could occur in the nrfjprog Logger class when asynchronous J-Link threads accessed a log buffer. Introduced in 9.7.3.
- (nrfjprog.dll) Fixed logging mechanism. Extended logging was disabled after certain operations. Introduced in 9.7.3.
- (nrfjprog.dll) Updated compiler for windows platforms. Will no longer work on Windows versions predating Windows 7.
- (nrfjprog.dll) Modified NRFJPROG_write() function. Now unaligned addresses can be passed as location for the write.

- (highleveldll) Fixed a race condition that could occur in the nrfjprog Logger class when asynchronous J-Link threads accessed a log buffer. Introduced in 9.7.3.
- (highleveldll) Fixed logging mechanism. Extended logging was disabled after certain operations. Introduced in 9.7.3.
- (highleveldll) Added timestamp to the logging printouts.
- (highleveldll) Updated compiler for windows platforms. Will no longer work on Windows versions predating Windows 7.
- (highleveldll) Fixed a memory leak that occurred when searching for the J-Link DLL on windows. Introduced in 9.6.0.
- (highleveldll) Updated header for NRFJPROG_write() to reflect changes in dll.

- (pynrfjprog)   Moved loadable library files (.dll-s, .so-s, .dylib-s) from OS-specific folders into common folders lib_x86 and lib_x64 depending on architecture.
- (pynrfjprog)   Added timestamp to the logging printouts.

Release 9.7.3
Changelog
--------------------------------------
- (Segger DLL)   Updated Segger JLinkARM installer to JLink_Windows_V622g.exe

- (nrfjprog.exe) nrfjprog failed to read .hex files encoded in UTF-8 with BOM. Fixed.
- (nrfjprog.exe) Under certain circumstances nRF52 devices would not exit debug mode, leading to higher than normal power consumption.
- (nrfjprog.exe) nrfjprog failed with NoReadPermissionError when programing read-only hex files on windows. Fixed.
- (nrfjprog.exe) Windows version could fail to automatically find a valid JLinkArm DLL if the Segger software pack was downgraded. Now finds the most recent valid installation.
- (nrfjprog.exe) Fixed issue where --fast verify option could fail to verify hex files with data blocks that didn't start at a section boundary.
- (nrfjprog.exe) Fixed bug in the use of QSPI peripheral for nRF52840 device. If the QSPI peripheral was used, the peripheral was not disabled properly and the device was left with higher current consumption.

- (highleveldll) highleveldll failed to read .hex files encoded in UTF-8 with BOM. Fixed.
- (highleveldll) Under certain circumstances nRF52 devices would not exit debug mode after an operation, leading to higher than normal power consumption.
- (highleveldll) Windows version could fail to automatically find a valid JLinkArm DLL if the Segger software pack was downgraded. Now finds the most recent valid installation.
- (highleveldll) Fixed bug in the use of QSPI peripheral for nRF52840 device. If the QSPI peripheral was used, the peripheral was not disabled properly and the device was left with higher current consumption.

- (nrfjprog.dll) Fixed bug in NRFJPROG_qspi_uninit(). QSPI peripheral was not properly uninitialized.
- (nrfjprog.dll) Fixed bug in NRFJPROG_close_dll(). nRF52 devices would not always exit debug mode completely, leading to higher than normal power consumption.
- (nrfjprog.dll) Increased amount of information present in the logging output.
- (nrfjprog.dll) Added log message that explains why an nRF52832_xxAA is selected when connecting to any device in the nRF52 family.

- (pynrfjprog)   Example code can now be run with an optional argument to specify serial number.
- (pynrfjprog)   Example program_hex.py now checks for a supported device family when searching for example binary.

Release 9.7.2
Changelog
--------------------------------------
- (Segger DLL)   Updated Segger JLinkARM installer to JLink_Windows_V620i.exe

- (nrfjprog.exe) Added support for NRF52840_xxAA_ENGB.

- (nrfjprog.dll) Added support for NRF52840_xxAA_ENGB.

- (pynrfjprog)   Added support for NRF52840_xxAA_ENGB.


Release 9.7.1
Changelog
---------------------------------------
- (highleveldll) Fixed bug in jlinkarm dll detection on Linux and OS X. Some cases were not covered by 9.7.0 update.


Release 9.7.0
Changelog
---------------------------------------
- (WindowsRelease) Fixed issue where /q quiet flag was not propagated to Segger J-Link installer.

- (Segger DLL)   Updated Segger JLinkARM installer to JLink_Windows_V620b.exe

- (nrfjprog.exe) Added --ini option.
- (nrfjprog.exe) Fixed bug in --sectorerase option. Under certain circumstances some sectors were not erased.
- (nrfjprog.exe) Fixed bug in --qspisectorerase option. Under certain circumstances some sectors were not erased.
- (nrfjprog.exe) Fixed bug in memory management. Under certain circumstances the program could crash when memory allocation failed.
- (nrfjprog.exe) Fixed bug in jlinkarm dll detection on Linux and OS X. If segger install folder existed, but was empty, wrong output code could be returned.
- (nrfjprog.exe) Added support for nRF52832_xxAA_Rev2 and nRF52832_xxAB_Rev2 devices.
- (nrfjprog.exe) Corrected help for --erasepage option.
- (nrfjprog.exe) Fixed bug in --qspiini and --qspicustominit options. It could not be combined with --readqspi option.
- (nrfjprog.exe) Removed possible error return code NrfjprogIniQspiIniFileMissingError.
- (nrfjprog.exe) Removed the possibility to define the QSPI settings file in the nrfjprog.ini file. Option --qspiini should be used instead.

- (highleveldll) Fixed bug in memory management. Under certain circumstances the program could crash when memory allocation failed.
- (highleveldll) Fixed bug in jlinkarm dll detection on Linux and OS X. In some cases, dll path was mistakenly treated as non-valid.
- (highleveldll) Fixed bug in jlinkarm dll detection on Linux and OS X. If segger install folder existed, but was empty, wrong output code could be returned.
- (highleveldll) Deprecated NRFJPROG_get_snr() function. Functionality replaced by NRFJPROG_get_jlink_info().
- (highleveldll) Deprecated NRFJPROG_get_jlinkarm_version() function. Functionality replaced by NRFJPROG_get_jlink_info().
- (highleveldll) Added NRFJPROG_get_library_info() function. Allows readout of jlinkarm version and path to library file.
- (highleveldll) Added NRFJPROG_get_probe_info() function. Allows readout of debug probe serial number, firmware version and requested clockspeed.

- (nrfjprog.dll) Fixed bug in NRFJPROG_qspi_custom() function. Under certain circumstances, more data was read from or written to the input pointer parameters.
- (nrfjprog.dll) Fixed bug in memory management. Under certain circumstances the program could crash when memory allocation failed.
- (nrfjprog.dll) Added support for nRF52832_xxAA_Rev2 and nRF52832_xxAB_Rev2 devices.
- (nrfjprog.dll) Corrected documentation for NRFJPROG_erase_page() function.

- (pynrfjrpog)   Fixed bug in importing examples module. Bug introduced in version 9.5.0.
- (pynrfjprog)   Added support for nRF52832_xxAA_Rev2 and nRF52832_xxAB_Rev2 devices.
- (pynrfjprog)   Improved automatic location of SEGGER JLinkARM dll.
- (pynrfjprog)   Improved help for API.pin_reset() function.
- (pynrfjprog)   Corrected help for API.erase_page() function.
- (pynrfjprog)   Changed logging file management. Log files now are opened with append instead of truncate.
- (pynrfjprog)   Fixed bug where MultiAPI AttributeError message was missing information about the missing attribute. Introduced in 9.5.0.
- (pynrfjprog)   Added is_alive() and terminate() functions to multiAPI interface. Allows user to stop background MultiAPI threads and processes immediately.


Release 9.6.0
Changelog
---------------------------------------
- (nrfjprog.exe) Added support for nRF52840_xxAA_Rev1 device.

- (highleveldll) Initial release of highlevelnrfjprog.dll. Use with care. As an initial release, interface changes may occur.

- (nrfjprog.dll) Added support for nRF52840_xxAA_Rev1 device.
- (nrfjprog.dll) Added support for long frames in NRFJPROG_qspi_custom() function.
- (nrfjprog.dll) Change data type of parameter instruction_length from uint8_t to uint32_t in NRFJPROG_qspi_custom() function.
- (nrfjprog.dll) Fixed bug in NRFJPROG_recover() function. If NRFJPROG_recover() function is used after a write to UICR.RBPCONF
                 to enable protection without a reset to activate the protection, the first call to NRFJPROG_recover function will fail.

- (pynrfjrpog)   Added support for nRF52840_xxAA_Rev1 device.
- (pynrfjprog)   Added support for long frames in API.qspi_custom() function.
- (pynrfjprog)   Adapted API.qspi_custom() function to the change of parameter type in DLL NRFJPROG_qspi_custom() function.


Release 9.5.0
Changelog
---------------------------------------
- (Segger DLL)   Updated Segger JLinkARM installer to JLink_Windows_V616a.exe

- (nrfjprog.exe) Changed default family for operations in nrfjprog.ini to UNKNOWN for automatic detection of the device's family. This will add 80ms to every operation, so it is recommended in order to reduce testing time the use of the command line option -f if family is known and nrfjprog is used for automatic testing.
- (nrfjprog.exe) Added support for nRF52810_xxAA_REV1 device.
- (nrfjprog.exe) Added --qspicustominit for sending of QSPI custom commands after initialization of the external memory device for operations that use the external memory.
- (nrfjprog.exe) Fixed bug in stand-alone --verify operation. If data was present in the XIP region the operation erroneously failed with InvalidHexFileError error.
- (nrfjprog.exe) Added PPSize parameter to QSPIDefault.ini file.
- (nrfjprog.exe) Added an example of custom instructions to QSPIDefault.ini to be executed if --qspicustominit option is used. If used, it will reduce the erase time of the nRF52840 DK external memory from 120s to 45s.
- (nrfjprog.exe) Added CR to last line of QSPIDefault.ini file.

- (nrfjprog.dll) Added support for nRF52810_xxAA_REV1 device.
- (nrfjprog.dll) Added support for 512 bytes page size in PP, PP2O, PP4O and PP4IO operations by adding new member in qspi_init_params_t init_params parameter in NRFJPROG_qspi_init() function.
- (nrfjprog.dll) Fixed bug in NRFJPROG_qspi_read(). If the read length was less than 4 bytes the function could fail if using certain Segger JLinkARM DLL versions.

- (pynrfjprog)   Added support for nRF52810_xxAA_REV1 device.
- (pynrfjprog)   Added support for Python 3.6.
- (pynrfjprog)   Modify API.DeviceVersion enumeration to support Python 3.6.1 enum type changes.
- (pynrfjprog)   Added QSPIPPSize enum for support of new PPSize functionality.
- (pynrfjprog)   Corrected commentary of function API.rtt_read_channel_info(). Type and meaning of return value was wrong.
- (pynrfjprog)   Added release notes (this file) into the documentation folder of the pynrfjprog module.
- (pynrfjprog)   Removed program_multiple_hex_files.py example.
- (pynrfjprog)   Updated examples to make use of automatic family detection feature introduced in version 9.4.0.
- (pynrfjprog)   Modified log file creation to provide line buffering in API.py. In Python3 it was cached and contents could be lost in case of crash.
- (pynrfjprog)   Modified hex file opening to align to modifications in API.py. Should have no effect.
- (pynrfjprog)   Refactor MultiAPI interface.
- (pynrfjprog)   Fixed bug where MultiAPI would not pass on named arguments of function calls.
- (pynrfjprog)   Fixed discovery of 64-bit DLL for v6.16 and later of Segger's JLinkARM dll on Windows.


Release 9.4.0
Changelog
---------------------------------------
- (Exe)     Fixed minor bug in loading of nrfjprog.dll. Under some circumstances, the handle for the DLL was not cleared.
- (Exe)     Added auto-detect of family if any function is called with family option UNKNOWN. Remember that it can also be specified in the nrfjprog.ini file.
- (Exe)     Optimised for changes in NRFJPROG_erase_all() for nRF51 devices.
- (Exe)     Added handling of return value RECOVER_FAILED from nrfjprog.dll. Added new return code RecoverFailed.
- (Exe)     Adapted to device type name change (see DLL changes).
- (Exe)     Added --fast option to increase speed of --verify by calculating the hash of the on-chip flash instead of reading it, reducing MCU-computer communication.
- (Exe)     Corrected error in --program for nRF52840 devices when used to program XIP and RAM areas with the same hex file and --verify was used.
- (Exe)     Added support for the nRF52832_QFAB device.
- (Exe)     Added support for the nRF51801_QCAB device.

- (DLL)     Optimized NRFJPROG_read_ram_sections_power_status() function.
- (DLL)     Fixed minor bug in NRFJPROG_open_dll() function. When JLinkARM DLL loading failed, the wrong error was returned.
- (DLL)     Fixed minor bug in NRFJPROG_open_dll() function. Under some circumstances, when the load of a DLL failed the DLL could be left open.
- (DLL)     Added new family UNKNOWN that can be used in the call to NRFJPROG_open_dll() function. When used, only functions NRFJPROG_dll_version(), NRFJPROG_is_dll_open(), NRFJPROG_open_dll(), NRFJPROG_close_dll(), NRFJPROG_enum_emu_snr(), NRFJPROG_is_connected_to_emu(), NRFJPROG_connect_to_emu_with_snr(), NRFJPROG_connect_to_emu_without_snr(), NRFJPROG_read_connected_emu_snr(), NRFJPROG_read_connected_emu_fwstr(), NRFJPROG_disconnect_from_emu(), NRFJPROG_read_device_family(), NRFJPROG_read_debug_port_register(), NRFJPROG_write_debug_port_register(), NRFJPROG_read_access_port_register() and NRFJPROG_write_access_port_register() are available.
- (DLL)     Added new function NRFJPROG_read_device_family(). It can only be used when NRFJPROG_open_dll() function is called with UNKNOWN as family parameter.
- (DLL)     Modified NRFJPROG_erase_all() for nRF51 devices. It will now erase the user available flash and UICR regions when the device is preprogrammed with a SoftDevice at Nordic factory.
- (DLL)     Added new function NRFJPORG_disconnect_from_device().
- (DLL)     Added check for family in NRFJPROG_connect_to_device() function. If the family of the device is different to the one used to open the DLL, WRONG_FAMILY_FOR_DEVICE is returned.
- (DLL)     Added new possible return value WRONG_FAMILY_FOR_DEVICE to all functions that automatically call NRFJPROG_connect_to_device().
- (DLL)     Added new return value RECOVER_FAILED and removed return values JLINKARM_DLL_ERROR, NVMC_ERROR, WRONG_FAMILY_FOR_DEVICE and CANNOT_CONNECT from NRFJPROG_recover() function.
- (DLL)     Renamed device type enumerators to ease readability. Old values kept for compatibility.
- (DLL)     Added support for the nRF52832_QFAB device.
- (DLL)     Added support for the nRF51801_QCAB device.

- (Python)  Adapted to match new available family UNKNOWN.
- (Python)  Added read_device_family() function to give support to new DLL function.
- (Python)  Minor bug fixed. Corrected error feedback variable name in functions API.read_debug_port_register(), API.write_debug_port_register(), API.read_access_port_register() and API.write_access_port_register().
- (Python)  Added disconnect_from_device() function to give support to new DLL function.
- (Python)  Added RECOVER_FAILED to NrfjprogdllErr enumeration.
- (Python)  Minor bug fixed in qspi_custom() function. The bug had no effect on behaviour.
- (Python)  Adapted to device type name change (see DLL changes).
- (Python)  Added support for the nRF52832_QFAB device.
- (Python)  Added support for the nRF51801_QCAB device.
- (Python)  Fix bug in MultiAPI.py qspi_custom() function. Under some circumstances output parameter was not passed on.

Release 9.3.1
Changelog
---------------------------------------
- (Exe)     Added the possibility to combine --eraseall and --qspieraseall option.
- (Exe)     Added the options --qspisectorerase and --qspichiperase for the --program operation.
- (Exe)     Accelerated --program operation when the target was an external memory device connected through QSPI.
- (Exe)     Updated QSPIDefault.ini file with new configuration options.
- (Exe)     Added function --readqspi.
- (Exe)     Updated default values for Frequency, WriteMode and ReadMode in  QSPIDefault.ini.

- (Dll)     Eliminated pop-up for unprotect action introduced in JLinkARM.dll version 6.13a or later for nRF51 devices. The default action is to not unprotect the device.
- (Dll)     Added function NRFJPROG_is_dll_open().
- (Dll)     Added function NRFJPROG_is_rtt_started().
- (Dll)     Added function NRFJPROG_is_qspi_init().
- (Dll)     Removed the 4k limitation on NRFJPROG_qspi_write() and NRFJPROG_qspi_read() functions to speed QSPI operation.
- (Dll)     Expanded qspi_init_params_t to include new parameters.
- (Dll)     Added missing return value INVALID_OPERATION to the documentation for functions NRFJPROG_debug_reset(), NRFJPROG_qspi_init(), NRFJPROG_qspi_uninit(), NRFJPROG_qspi_read(), NRFJPROG_qspi_write(), NRFJPROG_qspi_erase(), NRFJPROG_qspi_custom() for nRF51 devices.
- (Dll)     Added missing return value INVALID_OPERATION to the documentation for function NRFJPROG_read_region_0_size_and_source() for nRF52 devices.
- (Dll)     Optimized functions NRFJPROG_read_debug_port_register() and NRFJPROG_write_debug_port_register() use of the DP.SELECT register.
- (Dll)     Optimized function NRFJPROG_write() for nRF52 devices.
- (Dll)     Made function NRFJPROG_readback_status() more robust for nRF52. If the function was called exactly at the same moment a soft_reset occurred in the device, protection status ALL was returned independently of the actual readback status.
- (Dll)     Solved issue in NRFJPROG_read_debug_port_register(), NRFJPROG_write_debug_port_register(), NRFJPROG_read_access_port_register() and NRFJPROG_write_access_port_register(). Now these functions cannot be called after NRFJPROG_connect_to_device() is called. Note that many functions implicitly call NRFJPROG_connect_to_device().
- (Dll)     Limited the use of NRFJPROG_rtt_stop() operation. It can only be used when NRFJPROG_rtt_start() function has been called.
- (Dll)     Modified NRFJPROG_debug_reset() to perform a the soft reset using the core AIRCR register if we had already established a connection, since NRFJPROG_write_access_port_register() is not available then.

- (Python)  Added is_open(), is_rtt_started() and is_qspi_init() functions to give support to new DLL functions.
- (Python)  Fixed minor bug in Hex.py module when parsing a file. The file parsed was not closed automatically so it was consuming more resources than necessary, and producing warnings if used in unittest module in Python 3.
- (Python)  Fixed bug in Jlink.py module. The default location for the search for JLinkARM.dll in 32-bit Windows Operating System was wrong.
- (Python)  Adapted to match new QSPI configuration options.
- (Python)  Updated default values of QSPI configuration options.


Release 9.2.1
Changelog
---------------------------------------
- (WindowsRelease)    Updated Segger JLinkARM installer to JLink_Windows_V612a.exe


Release 9.2.0
Changelog
---------------------------------------
- (Exe)     Clarified help for --readuicr, --readcode and --readram, --recover, --program and --ramwr operations.
- (Exe)     Added support for NRF52840 device.
- (Exe)     Modified options --program, --verify, --erasepage, --memrd and --memwr to work with external memories through the QSPI peripheral.
- (Exe)     Added --qspiini and --qspieraseall to work with external memories through the QSPI peripheral.
- (Exe)     Repurposed error UnavailableOperationInFamilyError for operations also unavailable in your device.

- (Dll)     Added support for NRF52_FP2_ENGA device.
- (Dll)     Fixed minor bug in NRFJPROG_readback_status() function. Values outside the valid range were accepted but the function did nothing. INVALID_PARAMETER error is returned instead.
- (Dll)     Adapted function NRFJPROG_disable_bprot() for nRF52840 device. BPROT is not available in that device and ACL should be used instead. New return code for NRFJPROG_recover() and NRFJPROG_disable_bprot() functions due to this change.
- (Dll)     NRFJPROG_read_device_version() function will now update the output parameter to NRF5x_FPx_FUTURE if a newer unknown version of a known device is found. Only applicable for NRF52 devices or later. See DllCommonDefinitions.h for possible values of x.
- (Dll)     NRFJPROG_read_device_version() function will now update the output parameter version to UNKNOWN if the device is not of the family used. WRONG_FAMILY_FOR_DEVICE return error is still being returned.
- (Dll)     Modified behaviour for unknown revisions of known devices. If a newer unknown revision of a known device is found, the dll will behave as the latest known revision of that device. Only applicable for NRF52 devices or later.
- (Dll)     Added functions NRFJPROG_qspi_init(), NRFJPROG_qspi_uninit(), NRFJPROG_qspi_read(), NRFJPROG_qspi_write(), NRFJPROG_qspi_erase() and NRFJPROG_qspi_custom().
- (Dll)     Deprecated NRFJPROG_is_ram_powered() function.
- (Dll)     Documented a missing side-effect and return value for NRFJPROG_is_ram_powered() function for nRF51 devices.
- (Dll)     Added functions NRFJPROG_read_ram_sections_count(), NRFJPROG_read_ram_sections_size() and NRFJPROG_read_ram_sections_power_status() to substitute deprecated function.

- (Python)  Added support for 64bit on Windows. Pynrfjprog will now work with 64 bits python.
- (Python)  Added support for NRF52_FP2_ENGA device.
- (Python)  Added new devices NRF52_FP1_FUTURE and NRF52_FP2_FUTURE to DeviceVersion enum.
- (Python)  Added support for loading nrfjprog DLLs by name if the nrfjprog DLLs cannot be located in the default pynrfjprog installation directory.
- (Python)  Added qspi_init(), qspi_uninit(), qspi_read(), qspi_write() qspi_erase() and qspi_custom() to give support for new DLL functions.
- (Python)  Added read_ram_sections_count(), read_ram_sections_size() and read_ram_sections_power_status() to give support for new DLL functions.


Release 9.1.0
Changelog
---------------------------------------
- (Exe)     Provided option --jdll to manually select desired Segger's JLinkARM dll instead of automatically search for latest installed Segger's JLinkARM dll.

- (Dll)     Added NRFJPROG_read_connected_emu_fwstr() function to read emulator firmware string.

- (Python)  Added support for NRFJPROG_read_connected_emu_fwstr().


Release 9.0.0
Changelog
---------------------------------------
- (WindowsRelease)    Updated Segger JLinkARM installer to Setup_JLinkV512g.exe

- (Exe)     Provided better feedback when --eraseuicr operation fails due to missing pre-programmed ANT softdevice for nRF51.
- (Exe)     Corrected minor bug in opening hex file in --program. If the user has no read permission on the file, a new error NoReadPermissionError is thrown, instead of InvalidHexFileError.
- (Exe)     Modified error NrfjprogIniFormatError. That error was used in very different situations. Now possible errors of ini file parsing are NrfjprogIniCannotBeOpenedError, NrfjprogIniFamilyMissingError and NrfjprogIniClockspeedMissingError.
- (Exe)     Modified parsing of nrfjprog.ini files to be performed only if needed.
- (Exe)     Fixed --recover for nRF52 devices. In rare circumstances, --recover failed and did not unportect the device.

- (Dll)     Added NRFJPROG_read_connected_emu_snr() function.
- (Dll)     Fixed error in NRFJPPROG_recover() function. In rare circumstances, NRFJPPROG_recover() failed and did not unportect the device.
- (Dll)     Documented a missing side-effect of NRFJPROG_recover() function for nRF51 devices. All peripherals will be reset.
- (Dll)     Documented a missing side-effect of NRFJPROG_recover() function for nRF52 devices. If the device was readback protected, the RAM will be erased.
- (Dll)     Added a side-effect to NRFJPROG_recover() function. Register RESETREAS in POWER peripheral will be cleared after the operation.
- (Dll)     Added new possible error return in NRFJPROG_erase_uicr() NRFJPROG_erase_all functions for nRF51. Returning NOT_AVAILABLE_BECAUSE_MPU_CONFIG instead of NOT_AVAILABLE_BECAUSE_PROTECTION error.

- (Python)  Moved MultiAPI class to its own module MultiAPI.py.
- (Python)  Added read_connected_emu_snr() function.
- (Python)  Added optional parameter encoding to rtt_read and rtt_write data. Different encodings can be now used to write and interpret the read data from the device. If None, they will not be interpreted.
- (Python)  Corrected error in log functionality. Previous release changes set the default error output to sys.stdout.
- (Python)  Corrected error in log functionality. Previous release had b'' in the log in Python 3.
- (Python)  Added new possible error NOT_AVAILABLE_BECAUSE_MPU_CONFIG to API.NrfjprogdllErr enums.


Release 8.5.0
Changelog
---------------------------------------
- (WindowsRelease)    Updated Segger JLinkARM installer to Setup_JLinkV512f.exe

- (Exe)     Added the possibility to perform --reset as part of the --program operations.
- (Exe)     Added the possibility to perform --debugreset as part of the --program operations.
- (Exe)     Corrected bug in getting correct SEGGER .dylib version in OS X.

- (Dll)     Corrected bug in NRFJPROG_rtt_start() function for NRF51_XLR3P devices. If the RTT buffer address was in the range 0x20004000-0x20008000, the RTT buffer was never discovered.
- (Dll)     Corrected bug in NRFJPROG_rtt_start() function for NRF52_FP1_ENGA devices. If the RTT buffer address was in the range 0x08000000-0x08008000, the RTT buffer was never discovered.
- (Dll)     Added WRONG_FAMILY_FOR_DEVICE as a possible return value for NRFJPROG_rtt_start() function.

- (Python)  Fixed problem in JLink.py. In Linux Segger release V5.10s or latter, the 64-bit and 32-bit shared objects were both included. The wrong one was selected.
- (Python)  Fixed problem in JLink.py. If Segger installation folder does not exist, return None.
- (Python)  Corrected bug in JLink.py getting correct SEGGER .dylib version in OS X.
- (Python)  Added optional log, log_str and log_file_path parameters to API and MultiAPI class's constructors so user can define logging, a log string to precede debug output and/or a file where all debug output should be redirected.
- (Python)  Removed log_str_cb parameter from MultiAPI class's constructor as it was not functional.
- (Python)  Performed a general refactor of the code with no effect on API or performance.
- (Python)  Allow arrays and other containers to be passed to write() instead of just lists and tuples.
- (Python)  Deprecated Hex.py. We recommend using intelhex for parsing hex files. Hex.py is still available for compatibility with old scripts.


Release 8.4.0
Changelog
---------------------------------------
- (WindowsRelease)    Added nrf51_nrfjprogdll.h and nrf52_nrfjprogdll.h headers to the release.

- (OSXRelease)        Added nrf51_nrfjprogdll.h and nrf52_nrfjprogdll.h headers to the release.

- (LinuxRelease)      Added nrf51_nrfjprogdll.h and nrf52_nrfjprogdll.h headers to the release.

- (Exe)     Added --pinresetenable option.

- (Dll)     Eliminated undesired side effect in NRFJPROG_go() function. If the device CPU was not halted when NRFJPROG_go() function was called, the device CPU was temporarily halted and restarted again.
- (Dll)     Corrected error in NRFJPROG_open_dll() function when detecting that the JLinkARM.dll version was too old.
- (Dll)     Required device connection for function NRFJPROG_read_device_version() for nRF52 devices. It will therefore fail if the device is readback protected.
- (Dll)     Modified reset performed during NRFJPROG_readback_protect() from NRFJPROG_sys_reset() to NRFJPROG_debug_reset() to avoid problems when just protecting for nRF52 devices.
- (Dll)     Fixed wrong return in NRFJPROG_readback_protect() function for nRF52 Engineering Sample A devices. Now it correctly fails with INVALID_DEVICE_FOR_OPERATION.
- (Dll)     Disable trace resources when performing a NRFJPROG_readback_protect() to avoid current consumption until a hard reset was performed for nRF52 devices.
- (Dll)     Eliminated the check for correct family in NRFJPROG_readback_protect(), NRFJPROG_recover(), NRFJPROG_disable_bprot(), NRFJPROG_erase_all(), NRFJPROG_erase_page(), NRFJPROG_erase_uicr(), NRFJPROG_write_u32(), NRFJPROG_write(), NRFJPROG_read_u32(), NRFJPROG_read(), NRFJPROG_is_ram_powered(), NRFJPROG_power_ram_all() and NRFJPROG_unpower_ram_section() functions for nRF52 devices.
- (Dll)     Eliminated the check for correct family in NRFJPROG_readback_protect(), NRFJPROG_readback_status(), NRFJPROG_read_region_0_size_andsource(), NRFJPROG_disable_bprot(), NRFJPROG_erase_all(), NRFJPROG_erase_page(), NRFJPROG_erase_uicr(), NRFJPROG_write_u32(), NRFJPROG_write(), NRFJPROG_read_u32(), NRFJPROG_read(), NRFJPROG_power_ram_all() and NRFJPROG_unpower_ram_section() functions for nRF51 devices.

- (Python)  Added nrf51_nrfjprogdll.h and nrf52_nrfjprogdll.h headers to the docs folder.
- (Python)  Updated setup.py with OSX information.


Release 8.3.0
Changelog
---------------------------------------
- (Exe)     Fixed bug in parsing a hex file in --program and --verify when hex file contained a line with less than 4 bytes of data.

- (Dll)     Improved NRFJPROG_write() function to handle non multiple of 4 write lengths.
- (Dll)     Added NRFJPROG_rtt_is_control_block_found() function.
- (Dll)     Fixed bug in NRFJPROG_rtt_stop(). If the sequence NRFJPROG_rtt_start() -> NRFJPROG_rtt_stop() -> NRFJPROG_rtt_start() was executed, the second
            NRFJPROG_rtt_start () only searched for the RTT Control Block in the address the block was found in the first NRFJPROG_rtt_start().  The side-effect
            of this fix is that if you were performing NRFJPROG_rtt_start() -> NRFJPROG_rtt_stop() -> NRFJPROG_rtt_start() with the RTT Control Block in the
            same address, the second NRFJPROG_rtt_start() will take longer than before.
- (Dll)     Modifed the way devices are identified.

- (Python)  Change made in API.py to remove Python 3 warning of deprecated os function call.
- (Python)  Added rtt_is_control_block_found() function.


Release 8.2.0
Changelog
---------------------------------------
- (WindowsRelease)    Updated Segger JLinkARM installer to Setup_JLinkV510i.exe

- (OSXRelease)  Added OSX release in nRF5x-Command-Line-Tools_8_2_0_OSX.tar

- (Exe)     Ported to OSX.
- (Exe)     Fixed bug in --recover for NRF52 devices.
- (Exe)     Fixed bug in --reset and --run. The CPU core was halted some ms after the operation took effect and restarted restart later.

- (Dll)     Ported to OSX.
- (Dll)     Fixed bug in NRFJPROG_recover() function for NRF52 devices.
- (Dll)     Corrected header file documentation for function NRFJPROG_disconnect_from_emulator(). One possible return value for nRF52 devices was missing.

- (Python)  Ported to OSX.
- (Python)  Added object MultiAPI to be able to debug more than one device at the same time.
- (Python)  Fixed bug in get_latest_dll() in file JLink.py. In Python 3 this function failed because you cannot compare an int to a string.


Release 8.1.0
Changelog
---------------------------------------
- (Exe)     Eliminated sys_reset when performing --erasepage operation.
- (Exe)     Fixed small bug in --memrd. If the device was an nRF52 EngA version, the checking of the power state of the RAM was wrong. See Errata-65 for nRF52 devices for details.
- (Exe)     Fixed small bug in --memwr. If the device was an nRF52 EngA version, the checking of the power state of the RAM was wrong. See Errata-65 for nRF52 devices for details.
- (Exe)     Fixed small bug in --ramwr. If the device was an nRF52 EngA version, the checking of the power state of the RAM was wrong. See Errata-65 for nRF52 devices for details.

- (Dll)     Added NRFJPROG_step() function.
- (Dll)     Updated commentary in NRFJPROG_unpower_ram_section() function. Referenced Errata-65 for nRF52 devices EngA version.
- (Dll)     Updated commentary in NRFJPROG_is_ram_powered() function. Referenced Errata-65 for nRF52 devices EngA version.

- (Python)  Added step() function.
- (Python)  Fixed mix of tabs and spaces in program_multiple_hex_files.py.

Release 8.0.0
Changelog
---------------------------------------
- (WindowsRelease)    Renamed installer to nRF5x-Command-Line-Tools_x_x_x_Installer.exe.
- (WindowsRelease)    Added nrfjprog.h to release.
- (WindowsRelease)    Updated installer to Setup_JLinkV510d.exe

- (LinuxRelease)    Added nrfjprog.h to release.
- (LinuxRelease)    Changed structure of release.
- (LinuxRelease)    Included 32-bit versions of tools.

- (Exe)     Fixed bug in --sectoranduicrerase option for NRF51.
- (Exe)     Changed how shared libraries are found on Linux.
- (Exe)     Fixed minor bug in Segger JLinkARM dll version when minor version was 0x in --version.
- (Exe)     Added 32-bit support for Linux.
- (Exe)     Updated help text for clockspeed option.
- (Exe)     Added --debugreset option.
- (exe)     Improved detection of error in --family parameter.

- (Dll)     Fixed bug in enum_emu_snr() and connect_to_emu_without_snr(). Could sometimes cause a freeze of the Segger emulator.
- (Dll)     Sped up read_u32() and write_u32() functions.
- (Dll)     Added functions for RTT.
- (Dll)     Renamed exported functions to avoid collision with a C++ library in OSX.
- (Dll)     Renamed device NRF52_FP1_MPW3 to NRF52_FP1_ENGA and NRF52_FP1 to NRF52_FP1_ENGB.
- (Dll)     Added device NRF52_FP1.
- (Dll)     Added 32-bit support for Linux.
- (Dll)     Changed JLINKARM_SWD_MAX_SPEED_KHZ from 12000 to 50000.
- (Dll)     Change all functions calls that are with connection to the device to return a new error if the device is not of the family used in open_dll() function.

- (Python)  Added functions for RTT.
- (Python)  Adapted to name change in exported functions.
- (Python)  Changed location of dll in installation.
- (Python)  Renamed DeviceVersion enumerations NRF52_FP1_MPW3 to NRF52_FP1_ENGA and NRF52_FP1 to NRF52_FP1_ENGB.
- (Python)  Added DeviceVersion enumeration NRF52_FP1.
- (Python)  Added 32-bit support for Linux.
- (Python)  Added debug_reset function.
- (Python)  Added new error from the dll.
- (Python)  Updated examples to changes from the dll.
- (Python)  In Windows, JLink.py now finds most recent JLinkARM.dll in default SEGGER directory when folders other than Jlink software packs are present.




Release 7.7.0
Changelog
---------------------------------------
- (Exe)     Ported to linux.
- (Exe)     Clockspeed default is now read from the nrfjprog.ini file.

- (Dll)     Ported to linux.
- (Dll)     Added fix for write function for FPGA problem.

- (Python)  Ported to linux.
- (Python)  Changed import of nrfjprog dll from ordinal linking to symbolic linking.


Release 7.6.0
Changelog
---------------------------------------
- (Bundle)  Updated installer to Setup_JLinkV502.exe

- (Exe)     Added --sectoranduicrerase for --program operations and NRF52.
- (Exe)     Added --verify as a stand alone operation.
- (Exe)     Improved the --help output.

- (Dll)     Updated minimum JLinkARM.dll version to 5.02.
- (Dll)     Eliminated disabling of Supply Power to device in connexion to the emulator.
- (Dll)     Cleared the header commentaries.

- (Python)  Added new example for pynrfjprog (program_multiple_hex_files.py).
- (Python)  Updated hex files used by program_hex.py to work on development boards.
- (Python)  Cleared the commentaries.

Release 7.5.2
Changelog
---------------------------------------
- (Exe)     Changed functionality of --program --sectorerase with respects to UICR.

- (Dll)     Fixed problem in dll closing.

Release 7.5.1
Changelog
---------------------------------------
- (Exe)     Fixed problem with programming files whose length of segments were not multiple of 4.
- (Exe)     Eliminated --clean option in --program.
- (Exe)     Added --chiperase and --sectorerase in --program.

- (Dll)     Added disabling of trace resources when disconnecting.
- (Dll)     Improved speed.
- (Dll)     Corrected problems in recover() for nrf52.
- (Dll)     Corrected problems in pin_reset() for nrf52.
- (Dll)     Workaround for Errata 44 "Read flash after erase is unpredictable" added for nrf52.

- (Python)  Added BSD license to project.
- (Python)  Fixed api for function disconnect_from_emu().
- (Python)  Updated Hex.py with extended segment address.
- (Python)  Added comments and new example.


Release 7.5.0
Changelog
---------------------------------------
- (Bundle)  Updated installer to Setup_JLinkV498c.exe. Corrects a bug in OBD for our device programming.

- (Msi)     Pynrfjprog is no longer copied with nrfjprog installation. Own installation will be provided.
- (Msi)     Solved problem of installing into older versions.
- (Msi)     Added documentation folder for the release notes.
- (Msi)     Added header folder for the dll header files.

- (Exe)     Modified default family, it is now taken from nrfjprog.ini file.
- (Exe)     Modified --family and --rbp to accept the parameters in any combination of lower and upper case.
- (Exe)     Added --quiet option.
- (Exe)     Eliminated change introduced in 7.3.2 to avoid problems with our OBD. Program is fast again.
- (Exe)     Fixed bug in --eraseuicr. It could not be executed.
- (Exe)     Made return codes for nrfjprog POSIX compliant.
- (Exe)     Added --erasepage function.
- (Exe)     Eliminated --erasecode function.
- (Exe)     Enforcing that PC address in --run must be thumb mode.
- (Exe)     It is now possible to make unaligned reads. Default width depends on the alignment.
- (Exe)     Fixed bug in --ficrwr. It will not masserase if it is not necessary.
- (Exe)     Modified --memwr so it fails if the area to write is not erased.

- (Dll)     Renamed power_ram() function to power_ram_all().
- (Dll)     Added unpower_ram_section() function.
- (Dll)     Modified read() function so addresses no longer need to be word aligned.
- (Dll)     Corrected bug in readback_protect for XLR and XLR2 devices.

- (Python)  Adapted to dll api changes.
- (Python)  Eliminated Enums.py. Used library available in Python 2.7.9 enum34. Installed automatically by the egg.
- (Python)  Eliminated unnecessary check for length 0 in read(). The dll already takes care of that case.
- (Python)  Added header files to the egg.
- (Python)  Added examples to egg.
- (Python)  Moved headers to own folder.


Release 7.4.0
Changelog
---------------------------------------
- (Bundle)  Updated installer to Setup_JLinkV498b.exe
- (Exe)     Corrected bug introduced in 7.2.2 release. -d will reset the device and run.
- (Exe)     Eliminated --disablepinreset and --enablepinreset. The functionality is not going to be present in the ASIC.
- (Dll)     Updated minimum JLinkARM.dll version to 4.98.
- (Dll)     Extending waiting time for NVMC operations hundredfold. Some operations were failing.
- (Dll)     Eliminated disable_pin_reset() and enable_pin_reset(). The functionality is not going to be present in the ASIC.
- (Dll)     Eliminated read_debug_register(). Added read_debug_port_register() and read_access_port_register() instead.
- (Dll)     Eliminated write_debug_register(). Added write_debug_port_register() and write_access_port_register() instead.
- (Python)  Adapted to dll api changes.
- (Python)  Added JLink.py that helps in finding the latest dll.
- (Python)  Modified open() function api. Eliminated redundant parameter, since the constructor already receives it.


Release 7.3.2
Changelog
---------------------------------------
- (Exe)     Fixed bug in --program for NRF51 introduced in 7.3.1
- (Exe)     Modified --program to avoid problems with the OBD debugger in our boards. Side effect is that now program uses more time.


Release 7.3.1
Changelog
---------------------------------------
- (Exe)     Adapted for NRF52_FP1.
- (Dll)     Eliminated all use of pin_reset() for NRF52. It might not be enabled in the UICR.
- (Dll)     Added NRF52_FP1 type device.
- (Python)  Make a proper package installation for pynrfjprog.


Release 7.2.3
Changelog
---------------------------------------
- (Exe)     Corrected bug introduced in 7.2.2 release. -r and -p will reset the device and run. all other operations will not.
- (Python)  Optimized Hex.py to accelerate downloading.


Release 7.2.2
Changelog
---------------------------------------
- (Exe)     Corrected serious bug. When closing the core was restarted. If there was no code in the device, a hardfault and lockup reset was produced, resetting the device and clearing write operations.


Release 7.2.1
Changelog
---------------------------------------
- (Exe)     Corrected serious bug. When the Dll returned error, the close_dll() function was not called. After several errors the Segger emulator needed to be unpowered since there were too many connexions open to it.
- (Exe)     Corrected minor bug. After erasing an nRF51 device protected by MPU, a reset was not performed, so the device still thought it was protected. A sys_reset is performed after --eraseall and --clean during program.


Release 7.2.0
Changelog
---------------------------------------
- (Exe)     Renamed --rawwr to --ramwr.
- (Dll)     recover() functions now switches on all RAM.
- (Dll)     Segger debugger unpowers the debug port when close_dll() is called.
- (Python)  Added Hex.py to parse hex files to use with API.API.write function.


Release 7.1.0
Changelog
---------------------------------------
- (Exe) Added --clean option to --program. --clean erases all user available flash (including UICR).
- (Exe) RAM is turned on in the --program operation.
- (Exe) Added error and corresponding user feedback for a too old version of JLinkARM.dll used in the machine.
- (Exe) Added warning when --family is not used.
- (Exe) A --memrd, --memwr, --rawwr and --readram will fail if the target RAM is unpowered.
- (Dll) Added function is_ram_powered().
- (Dll) Added function power_ram().
- (Dll) Added function read_debug_register().
- (Dll) Added function write_debug_register().
- (Dll) Function open_dll() returns new error JLINKARM_DLL_TOO_OLD.
- (Dll) Fixed connexion problems under certain circumstances. Device selection was missing.
- (Dll) Fixed caching problems when reading after erase.


Release 7.0.0
Changelog
---------------------------------------
- (Exe) Added support for NRF52. In order to accomplish this, required option --family is added.
- (Exe) Added used JLinkARM.dll version to --version output.
- (Exe) Simplified interface. No longer is possible to concatenate program, erase and reset operations.
- (Exe) Simplified interface. Eliminated all options that dealt with SoftDevice: --programs, --recovers, --eraseapp, --erasecr1 and --programapp.
- (Exe) Simplified interface. --program can no longer have two hex files as parameters.
- (Exe) --program does not automatically erase target area. --clean option added to --program to erase all flash (same as --eraseall) before programming.
- (Exe) Eliminated --quiet option.
- (Exe) Eliminated --logids option. Use pipes for the same effect.
- (Exe) Eliminated deprecated option --dso.
- (Exe) Modified --eraseall. Now it erases all user available flash. It will automatically handle SoftDevice programmed at Nordic factory.
- (Exe) Added --erasecode operation.
- (Exe) Eliminated --erasepage operation.
- (Exe) Eliminated --hexuicrinfo operation.
- (Exe) Memory operations do not automatically check result. Added --verify for verification. Eliminated --ramwr since it does not have sense any more.
- (Dll) Published dll interface and python bindings for use by customer.


Release 5.1.3
Changelog
---------------------------------------
- (Micro) Now nrfjprog.dll and nrfjprog.exe versions upgrade together.


Release 5.1.1
Changelog
---------------------------------------
- (Major) Corrected error with --dfu option of --programs.


Release 5.1.0
Changelog
---------------------------------------
- (Dll.Minor) Eliminated all pop-ups.
- (Dll.Micro) Corrected minor error in loading several JLinkARM.dll functions that were not used.
- (Dll.Micro) Added loading of JLinkARM.dll GetHWInfo() function.


Release 5.0.1
Changelog
---------------------------------------
- (EXE.Micro) Corrected bug in new SDV download (SDV.hex does not contain UICR values). Version 5.0.0 is useless for the purpose it was intended.

Release 5.0.0
Changelog
---------------------------------------
- (EXE.Major) Changed to look for the location of the nrfjprog.dll in the local directory of the executable, not in the registry.
- (EXE.Major) Adapted --recovers, --eraseapp,  --eraseall, --eraseuicr, --erasecr1, programapp and --programs to take into account the new SDV Info struct and maybe no protection.
- (EXE.Minor) Eliminated options --clenr0 and --fwid to --programs.
- (EXE.Micro) Added several parameters for the SoftDevice information. Memory buffers now take into account the size of the SDV, not of region 0.
- (EXE.Micro) Cleaned --ids and --logids to prepare for future changes.
- (EXE.Micro) Cleaned the initialization of path strings.
- (EXE.Micro) Corrected the feedback with incompatible arguments in the --help option.
- (EXE.Micro) Corrected the loading of the nrfjprog dll library. It now occurs with LoadLibraryW as it should.
- (DLL.Major) Added new function read_softdevice_info().
- (DLL.Micro) Corrected minor bug in length of the m_jlink_arm_dll_path array.
- (DLL.Micro) Eliminated extra popup window when disabling system off.
- (DLL.Micro) Changed default value for no emulator selected.
- (DLL.Micro) Disabled caching of the flash.


Release 4.0.5
Changelog
---------------------------------------
- (Micro) Adapted to XLR3+ device.
- (Micro) UICR is not read from the device when programming unless the hex file(s) provided have UICR. Speeds programming.


Release 4.0.4
Changelog
---------------------------------------
- (Micro) Optimized the dynamic memory allocation and deallocation.
- (Micro) Optimized the information functions to DeviceInfo.
- (DLL) Made function pin_reset_ignore_pall work for Quark MPW1.

Release 4.0.3
Changelog
---------------------------------------
- (Micro) Eliminated some safety check that was not needed.
- (Micro) Eliminated a deprecated safety check.
- (Micro) For some device FICR and UICR sizes and code page sizes are different. Now really changed everywhere.

Release 4.0.2
Changelog
---------------------------------------
- (Micro) For some device FICR and UICR sizes and code page sizes are different. Changed everywhere.

Release 4.0.1
Changelog
---------------------------------------
- (DLL)   Fixed problem identifying MPW1.
- (DLL)   Added a lot of functionality related to the MPU to the nrf51dll.dll.

Release 4.0.0
Changelog
---------------------------------------
- (DLL)   Adapted to deprecation in SIZERAMBLOCK[i] registers.
- (Major) Added Quark MPW1 as one of the valid devices.
- (Micro) Eliminated several bugs in parsing the page number in --erasepage.
- (Micro) Added some formating to log.log and error.log so we can see the different commands. Command line is also written.
- (Micro) Corrected default values of RAM and Flash size depending on the device.

Release 3.1.1
Changelog
---------------------------------------
- (DLL)   --pinreset makes now a system reset, halts and then pinresets to avoid a problem with emulated system off.
- (Micro) System Reset is perfrom before any erase operations to avoid problems with emulated system off.

Release 3.1.0
Changelog
---------------------------------------
- (DLL)   Added function check_region_access_ignore_protenset.
- (DLL)   Hardcoded protenset to 4kb as is in XLR2, XLR3 and L3.
- (DLL)   Solved problem with download of programs in XLR in certain circumstances. RAM was off after certain resets.
- (Minor) Added --halt option.
- (Minor) Disable protenset during a memory write operation will only happen during a --memwr to flash area.
- (Micro) Added some information to the help of erase and program operations.
- (Micro) Disable protenset during a program operation will only happen if there is a download to flash area.
- (Micro) Disable protenset will not happen during check flash region access operations.

Release 3.0.1
Changelog
---------------------------------------
- (Micro) Corrected typo in --programs help.

Release 3.0.0
Changelog
---------------------------------------
- (Major) Pin reset and reset cannot be combined.
- (Major) Added --deviceversion option.
- (Minor) Improved recover operation again.
- (Minor) Now --help and --version can be combined.
- (Minor) Corrected error with --pinreset when we have just protected with PALL.
- (Minor) Improved all erase operations, including adding system reset after them.
- (Minor) Added check for PALL protection before programming.
- (Minor) Better check for UICR conflicts when programming.
- (Micro) Corrected bug in programming under weird circunstances. Probably nobody hit this error.
- (Micro) Corrected typo in name of our company.
- (Micro) Cleaned up the calls for the information functions.
- (Micro) Corrected bug with pinreset when PALL. Now I inform the user that it may not work.
- (Micro) Eliminated bug, by checking PALL before calling disable_proten.
- (Micro) Corrected several errors in --programapp check for correctness.
- (Micro) Corrected bug in fwid option.
- (Micro) Updated device info after erasing.
- (Micro) Using default values for flash and ram sizes if the FICR is a little wrong.
- (Micro) Corrected bug in --fwid option check.
- (Micro) Corrected bug --recovers and --eraseapp. BOOTLOADERADDR in UICR was not being erased.
- (Micro) Corrected return value when only a secondary argument is given.
- (Micro) Corrected bug in --recovers.
- (Micro) Corrected bug in --memwr, --ramwr and --rawwr trying to write into FICR area.
- (Micro) Improve feedback on failed --recover.
- (Micro) Corrected small bug with --memrd and wrong --n parameter.
- (Micro) Corrected error when --memwr and PALL for certain registers.


Release 2.6.0
Changelog
---------------------------------------
- (Minor) Improved recover operation. Several attempts are made to recover the device, not just one.
- (Micro) Corrected some erros in error reporting.


Release 2.5.0
Changelog
---------------------------------------
- Clarified error messages and help of --programs.
- Added --fwid secondary option to --programs option.
- Corrected minor bug in --logids activity report.
- Corrected typo in error MisalignedOperation name.
- Corrected minor typo in --version report.
- Improved --ficrwritereg to avoid the erasing when only 1s are changed.
- Corrected typos in error reporting.
- Provided warnings with meaningless erase operations in the presence of --eraseall.
- UICR locations to download are checked during --program, --programapp and --programs to see if they are erased.
    If not, it will give an error.
- Removed bug in --ficrwritereg CLENR0 values.

Release 2.4.0
Changelog
---------------------------------------
- Corrected help for coderead.
- Added hexdump printing to memrd functionality.
- Corrected 2 typos in user feedback printing.
- Correct error in --quiet option. One command was not quiet.
- Provided popup window if several devices are present but none is sellected by -s or --snr in options.

Release 2.2.0
Changelog
---------------------------------------
- Corrected bug in --program checking the last byte is in code.
- Added --readregs function into the nrfjprog.
- Improved the check of the erased region when programming.

Release 2.1.1
Changelog
---------------------------------------
- Corrected bug in --readcode under certain conditions.
- Corrected bug in reporting of error in programs for missing CLENR0.

Release 2.1.0
Changelog
---------------------------------------
- Added support for old FICR files.
- Added read code area function, including checking if the user has read access tot he area requested.

Release 2.0.4
Changelog
---------------------------------------
- Registry search for the nrfjprog.dll location takes into account the version of nrfjprog.

Release 2.0.3
Changelog
---------------------------------------
- Beta release of new nrfjprog. Complete redesign of nrfjprog tool.

Release 1.0.7
Changelog
---------------------------------------
- Fixed the crash caused when using --verify option.
- --verify option speed optimized to be 4 times faster.

Release 1.0.6
Changelog
---------------------------------------
- Recompilation.

Release 1.0.5
Changelog
---------------------------------------
- Fixed a problem in --program and --programs.

Release 1.0.4
Changelog
---------------------------------------
- Fixed an incorrect parameter when reading a registry value.
- Fixed minor typos in the std out comment.
- Fixed pin reset bug.


Release 1.0.3
Changelog
---------------------------------------
- Fixed the utility to work again with WinXP-32-bit machines
- Added verify option that can verify device memory contents with given hex file.


Release 1.0.2
Changelog
---------------------------------------
- Minor bug fix.


Release 1.0.1
Changelog
---------------------------------------
- fixing bug with buffer size.


Release 1.0.0
Changelog
---------------------------------------
- Code Reviewed: Bug fixes + optimizations.
- default output for --memrd + --n option, when not using --w, is changed from 8-bit to 32-bit as that will be used more.
- adding -q --quiet option (do not print any log)
- adding --dso disable system off until next reset.
- fixing bug with pin reset that did not switch the debug mode back to SWD from JTAG

Release 0.2.5
Changelog
---------------------------------------
-- removing uicrwritereg option as same functionality can be achieved using memwr option.
-- using --memwr for non-flash addresses will not configure nvmc for write/read/erase enable.
-- adding --hexuicrinfo that reads the hex file and dumps (to stdout) UICR-> CR0, RBPCONF and/or FWID if they are to be programmed from hex file
-- changed the default J-Link speed to 10MHz (previous 1MHz) if not set expplicitly by --clockspeed option
-- added --dmemwr option, dumb write instruction to cpu. This option is not flash aware. It takes the same arguments like memwr,

Known Issuees
----------------------
-- writing to a flash memory using --memwr option is erasing the page first before write, this is done within segger dll and this issue
   will be addressed very soon.

Release 0.2.4
Differences from the previous release
---------------------------------------
-- implemented --w option for --memrd. you can dump values in either 8(Default). 16 or 32 bit format
-- implemented --recover option which can be used to disable system off and erase code regions and then enable system off again
       can be used to recover chips in system off without wakeup source configured

Release 0.2.3
Differences from the previous release
---------------------------------------
- fixed a bug that is causing the pop up window with multiple seggers connected and even if serial number was given as argument.

Release 0.2.2
Differences from the previous release
---------------------------------------
 - fixed bug that --n option (as in --memrd 0XSomething --n 20) was considering the number in hex, its a number of bytes
       in decimal radix 10.
 - added -p, --pinreset option to do a hard pin reset
 - adding --run option to set --pc (program counter) and --sp (stack pointer)
 - added  --hexuicrinfo    <hex_file>         Reads the hex file and dumps (to stdout) UICR-> CR0, RBPCONF and/or FWID if they are to be programmed from hex file
                                              Note: only those registers are shown whose addresses exist in the hex file
 - more bug fixes.


Release 0.2.1
Differences from the previous release
---------------------------------------
 - bug with the utility that did not work on XP (now fixed)
 - "--rbp CR0" is not allowed when CR0 is not defined in FICR or UICR. (use --clenr0 to set the CR0 first)
 - --rbp is allowed to be used with --program (application) option
 - auto backup file extention changed from .txt to .log which are easy for auto clean operations.
 - --eraseuicr option added
 - added info that -e, --eraseall is not available for factory programmed chips
 - added more checks for eraseall and eraseuicr for factory programmed and non factory programmed.
 - added --memrd option (courtesy nrfprog, works exactly the same way)
 - added --memwr option

Release 0.2
Differences from the previous release
---------------------------------------
 - Adding -v or --version option to know the version of this utility
 - EraseAll will not do an implicit reset (but --programs will do implicit eraseall and a reset)
 - --clenr0 and/or --rbp options cannot be used with --program
 - cannot use --clenr0 option with --programs if the hex file is programming to UICR->CLENR0
 - cannot use --rbp option with --programs if the hex file is programming to UICR->RBP
 - hex files can now contain uicr address ranges (usable only by --programs).
 - bufferring all flash segment writes so that user sees only one write operation per hex file
 - check first in the local directory for JLinkARM.dll (useful for standalone apps) before checking registry for its installed path.
 - hex files cannot contain uicr address range with --program option
 - check application base address to match CR1 base address (on protected chips), if not match then return error with flash untouched.
 - removing --bin option to keep it simple
 - added few more error codes
 - wrong serial number given as the argument will return error and the program will quit


Release 0.1.3
Differences from the previous release
----------------------------------------
 - added error codes to handle different errors and return to the caller (for error codes @ref nrfjprog.h)
 - added --rbp option to enable readback protection for cr0 and cr0+cr1
 - when using --programs option readback protection is not changed (in earlier version using this option would set RBPCONF to CR0)
 - --clenr0 option must now be used with --programs to protect the softdevice else programming softdevice will fail
 - added --readuicr option to read uicr page into given file
 - removed flashing binary file check and support for --program
 - able to read uicr address range from hex file and write to UICR page

Release 0.1.2
differences from the previous release
---------------------------------------
 - few bug fixes
 - reducing wait time for each operation by correctly waiting on the ready flag
 - adding reset -r option (-e option does an reset implicitly)
 - added --uicrwritereg value to write to uicr register (remember only 1's can be changed to 0's)
 - Searching segger installation in HKEY_LOCAL_MACHINE also for buildservers to work properly. Segger will include
            in their next release to add a key to HKEY_LOCAL_MACHINE root

