Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:dev:tailcontrol-release-notes [2026/09/21 20:21] โ€“ darkgrueen:dev:tailcontrol-release-notes [2026/09/25 20:35] (current) โ€“ darkgrue
Line 1: Line 1:
 ====== TailControl Release Notes ====== ====== TailControl Release Notes ======
 +
 +
 +===== TailControl v5.4.8 =====
 +
 +==== Fixed ====
 +  * Removed duplicated line in console banner logo.
 +  * **Serial console dropping characters and lines on ESP32-S3 boards (EarGear 2 v4.1, ClawGear v4.1).** The Arduino-ESP32 3.3.7 HW USB CDC driver silently discards up to 64 bytes when ''Serial'' is written from a task running on the other core from its interrupt handler. Its ISR ignores a short FIFO write while ''HWCDC::write()'' commits the FIFO from the calling core. All console output now goes through a single writer task pinned to the ISR core, and application tasks are pinned to ''ARDUINO_RUNNING_CORE'' on USB CDC builds.
 +  * **Console lines losing their beginning after brief USB link dropouts.** The HW USB CDC TX buffer is increased from 256 to 2048 bytes (''USB_CDC_TX_BUFFER_SIZE''), which absorbs the periodic 2โ€“6 ms host SOF dropouts instead of evicting queued output.
 +  * **ClawGear: Tilt and Clap Mode only responded while a move was running.** The accelerometer servicing condition was inverted. The fix from ''b093b59'' was lost in revert ''6d8cfb6''. Detection now runs while idle and is suspended during moves, when servo motion disturbs the readings.
 +  * **ClawGear: uninitialized ''clapModeIsOn'' and ''prevClapModeIsOn''** could cause a spurious or missed ''CLAP ARMED'' edge on startup.
 +  * **ClawGear: the tilt classifier low-pass filter is reseeded after missed updates** (a move running or modes off), so stale readings can't trigger a tilt right after a move.
 +  * **ClawGear: the tilt state is reset when Tilt Mode is armed**, so the current tilt triggers immediately, as on EarGear 2.
 +
 +==== Added ====
 +  * Added ''ARMED'' and ''DISARMED'' console messages to Clap, Listen, and Tilt Modes that now emits correctly on the edge detection of those modes transitioning state.
 +  * ''Log'' module (''include/Log.h'', ''src/Log.cpp'') for thread-safe console output:
 +    * Each message is formatted in full and queued as one item. A single writer task performs every ''Serial.write()'', so lines from different tasks can't interleave.
 +    * Uses a 2 KB queue with a static ring buffer, a static writer task and no heap allocation.
 +    * API: ''logPrintf()'', ''logPrintln()'', ''logPuts()'', and ''logFlush()'' to drain the queue before a blocking operation or power-off.
 +    * The ''LOG_DEBUG*'' (''FDEBUG'') and ''LOG_TERM*'' (''FDEBUG || TERMINAL'') macros replace the per-call ''#if defined(...)'' guards.
 +    * Output loss is now visible: a cut line ends in ''~'', and ''FDEBUG'' builds print ''~ LOG: N message(s) dropped or truncated ~''.
 +
 +==== Changed ====
 +  * All console output in ''src/'' is migrated from ''Serial.print*'' to ''Log.h''. The printed text is unchanged; lines that were built from several ''Serial.print()'' calls are now sent as one message.
 +  * ''DBG_PRINTLN'' (and therefore ''SEND_MSG'') uses ''logPrintln()''.
 +  * ''logFlush()'' is called before every ''PIN_HOLD'' power-off, and replaces ''Serial.flush()'' before blocking homing.
 +  * The startup banner no longer calls ''Serial.flush()'' between pieces.
 +  * Application tasks are created with ''xTaskCreatePinnedToCore(..., RTOS_APP_TASK_CORE)''. The pin applies to USB CDC builds only; UART builds (Flutter, Mini, MiTail) keep no core affinity.
 +
 +==== Removed ====
 +  * **ClawGear:** the unused global ''lpf_s'' instance and its pre-loop seed call. Both were orphaned in ''9f25f3a'' when the classifier got its own filter state.
 +
 +==== Internal ====
 +  * Native test mocks: added logger stubs, since ''Definitions.h'' now includes ''Log.h''.
 +  * Fixed warnings in release builds (no ''FDEBUG''): deprecated ''++'' on ''volatile'', an unused static function, and debug-only variables in ''initServos()''.
  
  
Line 79: Line 114:
   * Added move mappings for FlutterWings.   * Added move mappings for FlutterWings.
   * Documented new commands and command changes.   * Documented new commands and command changes.
 +
 +
 +===== TailControl v5.2.8 =====
 +
 +  * Rebranded "TailCoNTROL" to "TailControl" (under duress).
 +  * Add full EarGear 2 support:
 +    * Add dedicated firmware moves for EarGear 2.
 +    * Set EarGear 2 to maintain servo holding at all times to facilitate assembly (as per staff request).
 +    * New I2S support added.
 +    * Set configuration item for Listen Mode to send responses only.
 +    * Set configuration item for Tilt Mode to send responses only.
 +    * Add I2S debug task for Ear Gear.
 +    * Add configuration parameter for Listen and Tilt mode to send triggers only (allows application to manage movements).
 +    * Add configuration parameter for Listen move group selection.
 +    * Support EG2 Tilt and Listen Mode in No-phone Mode.
 +  * Move TailCoNTROL to new BLE UUIDs.
 +  * Reorganized code units and functions to improve organization and readability.
 +  * Add Device Information Service (DIS) BLE characteristics.
 +  * Add SETHOLDONSTOP and RELEASEHOLDONSTOP commands.
 +  * Fixed BATT characteristic response truncation (thank you Code-L).
 +  * Implement simple message queue for ISR debug tracing.
 +  * Fixed unsigned long int sprintf format strings.
 +  * Improved commenting for hardware/platform variants.
 +  * Fixed JLed invocation to address timer conflict.
 +  * Clean up debug logging to make format consistent.
 +  * Added Conference Mode and associated configuration settings.
 +  * Fix move group selection logic.
 +  * Fix LIS2DW12 library to support non-hardcoded SPI bus wiring.
 +  * Rework button press servicing and visual indicators.
 +  * Add new function to perform factory reset on extended button hold.
 +  * Rename some variables and functions to better reflect their purpose.
 +  * Reverted undesirable MiTail easing function settings for some moves.
 +  * Refactored NVS options and compilation units.
 +  * Added persistent setting for automatic power off when BLE is disconnected (default is OFF).
 +  * Added persistent setting for home on POWEROFF command (default is ON).
 +  * CONFRD command removed, replaced by READCONF and READNVS.
 +  * CONFWR command replaced with WRITECONF.
 +  * Added SETHOME command (and persistent setting) for FlutterWings, and EarGear 2 [feature requested by @AleinaTravyre].
 +  * Added REBOOT command.
 +  * Improved BLE MTU settings for iOS.
 +  * Split RTOS tasks into separate unit files.
 +  * Fix race condition between updateMoves() and setMove() / setDSSPMove() that caused stuttering/short moves (thank you Mrs. Tailer for spotting this).
 +  * Improved debug messages.
 +  * Update ESP32Servo library to 1.2.1.
 +  * Updated JLed library to v4.15.0.
 +  * Updated NimBLE-Arduino library to v2.1.2 (made transitions for breaking changes).
 +  * Updated ServoEasing library to v3.4.0 (made transitions for breaking changes).
 +  * Updated BLE_OTA_Python scripts and documentation.
 +  * Added script to build unified binary for EarGear 2 firmware.
 +  * Added ESP Web Tools configuration for writing EarGear 2 firmware.
 +  * Fix PlatformIO $extra_scripts to be cumulative.
 +  * Update Tail Control Protocol to reflect as-built.
 +  * Add additional details to Service Notes about the Glow Tip.
  
  
Line 119: Line 207:
   * Updated ESP32Servo library to v1.2.0.   * Updated ESP32Servo library to v1.2.0.
   * Updated documentation.   * Updated documentation.
 +