# Changelog

All notable changes to this project will be documented in this file.

## [1.4.0] Soft- and Firmware updater

### New Features
- **Play/Pause Button:** Control execution flow without stopping.
- **Scheduled Running Hours:** Automate table operation.
- **Adaptive clear:** Select the appropriate clearing pattenr based on the starting coordinate
- **Table Info on Serial Connection:** Real-time metadata and status.
- **Table Status API:** Poll current status remotely.
- **Firmware Versioning:** Track and fetch firmware details.

### Fixes & Improvements
- **Quick Fixes:** Stability and performance improvements.
- **Firmware Updater (#34):** Version tracking, remote flashing, and bug fixes.
- **UI/UX Enhancements:** Improved "Currently Playing," settings overlay, and styling.
- **Software Updates:** Enhanced updater, dependency installation via `DockerFile`.
- **Performance:** Better serial locking, retry logic, and pattern execution handling.
- **ESP32_TMC2209 Support:** Added firmware flashing.

### Contributors
- **Thokoop** ([GitHub](https://github.com/Thokoop))
- **Fabio De Simone** (https://github.com/ProtoxiDe22)

## [1.3.0] Revamped UI

Massive thanks to Thokoop for helping us redesigning the UI just within a few days! The new design looks gorgeous on both PC and mobile. 

![New UI](./static/UI_1.3.png)

![New UI mobile](./static/IMG_9753.png)

## [1.2.0] - Playlist mode, Spirograph functionality

### Added

#### Playlist mode

- Added UI selection mode for single pattern run, create a playlist, and run a playlist. The UI is work in progress and will be changed in the near future.
- Created playlist will be saved as a JSON file on disk. There are options to:
  - Run the playlist once or on an indefinite loop
  - Shuffle the playlist
  - Add a clear pattern between files that will run immmidiately before each pattern. If you would like to customize the clear pattern, select None here and add clear patterns manually.
  - Add a pause time (in second) between each pattern.

#### Spirograph mode

- Added support for Spirograph mode for the arduino with DRV8825 or TMC2209 motor drivers
- Can be used if optional hardware (two potentiometers and a button) is connected.

### Changed

- Fixed a bug that created conflicting threads, leading to serial errors
- Fixed a bug that caused the speed setting functionality to not work
- Fixed a bug that caused the ball to move in slightly when a pattern starts at the perimeter and theta != 0

### Known issues

- Patterns with theta does not start with 0 will behave abnormally. To get around this, be sure to select start from center or perimeter when creating your pattern in sandify.org.

## [1.1.0] - Auto connect functionality

### Added
- **Auto-connect Serial Connection when app is started**
    - Automatically selected the first available serial port if none was specified.
- **Added Footer with:**
  - Links to github
  - Toggle button to show/hide the debug log

### Changed
- **Improved UI**
  - Certain buttons are now only visible when it's applicable for the current state.
  - Moved Stop button and Speed input to Quick Actions**
- **Pattern file prioritization:**
    - Updated the `/list_theta_rho_files` endpoint to:
        - Only display files with the `.thr` extension.
        - Include `custom_patterns/default_pattern.thr` at the top of the list if it exists.
        - Prioritize files in the `custom_patterns/` folder over other files.

## [1.0.0] - Initial Version
- Initial implementation of the Flask application to control the Dune Weaver sand table.
- Added core functionality for:
    - Serial port connection and management.
    - Parsing `.thr` files (theta-rho format).
    - Executing patterns via Arduino.
    - Basic Flask endpoints for listing, uploading, and running `.thr` files.
