<commit_before># Unreleased Features
Please add a note of your changes below this heading if you make a Pull Request.

## Unreleased
### Added
* Encoder position count "homed" to zero when index is found.

### Changed
* We now enforce encoder offset calibration must happen after index is found (if using index)

### Fixed
* Once you got an axis error `ERROR_INVALID_STATE` you could never clear it

# Releases
## [0.4.2] - 2018-08-04
### Added
* Hall sensor feedback
* Configurable RC PWM input
* Ability to read axis FET temperature
* Config settings for:
  * `motor.config.requested_current_range`
  * `motor.config.current_control_bandwidth` and `motor.set_current_control_bandwidth`. Latter required to invoke gain recalculation.
  * `encoder.config.bandwidth`

## [0.4.1] - 2018-07-01
### Fixed
* Encoder errors would show up as Axis error `ERROR_MOTOR_FAILED` instead of `ERROR_ENCODER_FAILED`.
* Various pip install dependencies
* Ability for python tools threads to quit properly
* dfuse error prints now python3 compatible

## [0.4.0] - 2018-06-10
### Added
* Encoder can now go forever in velocity/torque mode due to using circular encoder space.
* Protocol supports function return values
* bake Git-derived firmware version into firmware binary. The firmware version is exposed through the `fw_version_[...]` properties.
* `make write_otp` command to burn the board version onto the ODrive's one-time programmable memory. If you have an ODrive v3.4 or older, you should run this once for a better firmware update user experience in the future. Run the command without any options for more details. Once set, the board version is exposed through the `hw_version_[...]` properties.
* infrastructure to publish the python tools to PyPi. See `tools/setup.py` for details.
* Automated test script `run_tests.py`
* System stats (e.g. stack usage) are exposed under `<odrv>.system_stats`

### Changed
* DFU script updates<commit_msg>update changelog<commit_after># Unreleased Features
Please add a note of your changes below this heading if you make a Pull Request.

## Unreleased
### Added
* Encoder position count "homed" to zero when index is found.

### Changed
* We now enforce encoder offset calibration must happen after index is found (if using index)

### Fixed
* Once you got an axis error `ERROR_INVALID_STATE` you could never clear it
* Char to int conversion to read motornum on arduino example

# Releases
## [0.4.2] - 2018-08-04
### Added
* Hall sensor feedback
* Configurable RC PWM input
* Ability to read axis FET temperature
* Config settings for:
  * `motor.config.requested_current_range`
  * `motor.config.current_control_bandwidth` and `motor.set_current_control_bandwidth`. Latter required to invoke gain recalculation.
  * `encoder.config.bandwidth`

## [0.4.1] - 2018-07-01
### Fixed
* Encoder errors would show up as Axis error `ERROR_MOTOR_FAILED` instead of `ERROR_ENCODER_FAILED`.
* Various pip install dependencies
* Ability for python tools threads to quit properly
* dfuse error prints now python3 compatible

## [0.4.0] - 2018-06-10
### Added
* Encoder can now go forever in velocity/torque mode due to using circular encoder space.
* Protocol supports function return values
* bake Git-derived firmware version into firmware binary. The firmware version is exposed through the `fw_version_[...]` properties.
* `make write_otp` command to burn the board version onto the ODrive's one-time programmable memory. If you have an ODrive v3.4 or older, you should run this once for a better firmware update user experience in the future. Run the command without any options for more details. Once set, the board version is exposed through the `hw_version_[...]` properties.
* infrastructure to publish the python tools to PyPi. See `tools/setup.py` for details.
* Automated test script `run_tests.py`
* System stats (e.g. stack usage) are exposed under `<odrv>.system_stats`

### Changed
* DFU script updates
{'fraction_non_alphanumeric': 0.07940131912734652, 'fraction_numerical': 0.0182648401826484, 'mean_word_length': 4.545710267229254, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3040410', 'n_tokens_mistral': 1170, 'n_tokens_neox': 1074, 'n_words': 506}