Skip to content

Usermods that need fixing for compatibility with 16bit effect IDs #5019

Description

@coderabbitai

Overview

This issue tracks usermods that require updates to support 16-bit effect IDs WLED-MM PR 270. The migration from 8-bit to 16-bit effect IDs affects usermods that store, compare, or iterate over effect/mode IDs.

Critical Issues

1. usermod_v2_rotary_encoder_ui_ALT - Incomplete 16-bit support

Location: usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h

While effectCurrentIndex and knownMode were updated to uint16_t in PR 270, several critical issues remain:

  • Line 141: byte *modes_alpha_indexes - Array uses byte (uint8_t) to store mode indexes, limiting values to 0-255
  • Line 354-358: re_initIndexArray() allocates and initializes a byte array with byte loop counter
  • Line 633: Loop counter is uint8_t i but iterates up to strip.getModeCount() which now returns uint16_t

Fix: Change modes_alpha_indexes from byte* to uint16_t* and update all related loops to use uint16_t counters.

Usermods with uint8_t knownMode Variables

The following usermods still use uint8_t for storing mode IDs and need to be updated to uint16_t:

2. usermod_v2_four_line_display_ALT

Location: usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h:161

  • uint8_t knownMode needs to be uint16_t

3. Wemos_D1_mini+Wemos32_mini_shield

Locations:

  • usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod.cpp:87
  • usermods/Wemos_D1_mini+Wemos32_mini_shield/usermod_bme280.cpp:88
  • Both have uint8_t knownMode that needs to be uint16_t

4. Enclosure_with_OLED_temp_ESP07

Locations:

  • usermods/Enclosure_with_OLED_temp_ESP07/usermod.cpp:53
  • usermods/Enclosure_with_OLED_temp_ESP07/usermod_bme280.cpp:92
  • Both have uint8_t knownMode that needs to be uint16_t

5. TTGO-T-Display

Location: usermods/TTGO-T-Display/usermod.cpp:82

  • uint8_t knownMode needs to be uint16_t

Elegant Fix Approach

For all affected usermods, the fix is straightforward:

  1. Change uint8_t knownMode declarations to uint16_t knownMode
  2. For usermod_v2_rotary_encoder_ui_ALT specifically:
    • Change byte *modes_alpha_indexes to uint16_t *modes_alpha_indexes
    • Update re_initIndexArray() signature and implementation to use uint16_t
    • Change loop counters from uint8_t to uint16_t when iterating over modes

MQTT Protocol

No issues found with MQTT serialization of effect IDs in usermods. MQTT typically uses JSON or string-based protocols which handle larger integers naturally.

Testing Recommendations

After fixes:

  • Test with builds containing >255 effects
  • Verify display usermods correctly show effect names for high-numbered effects
  • Confirm rotary encoder usermod can navigate through all effects

Related

  • WLED-MM PR 270: Change effect IDs from 8bit to 16bit
  • Effects with IDs >255 will not work correctly until these usermods are fixed

Priority: Medium - These usermods will malfunction when effect IDs exceed 255.

Labels: usermod, 16bit-effects, bug

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No fields configured for Task.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions