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:24] โ€“ 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 172: Line 207:
   * Updated ESP32Servo library to v1.2.0.   * Updated ESP32Servo library to v1.2.0.
   * Updated documentation.   * Updated documentation.
 +