Skip to content

fix: Encode T330 shock intensity as 4-bit level with rolling state#472

Draft
LucHeart wants to merge 3 commits into
developfrom
fix/t330-shock-intensity-encoding
Draft

fix: Encode T330 shock intensity as 4-bit level with rolling state#472
LucHeart wants to merge 3 commits into
developfrom
fix/t330-shock-intensity-encoding

Conversation

@LucHeart
Copy link
Copy Markdown
Member

Summary

  • The T330 collar variant reads shock intensity from the lower nibble (0-15) of the intensity byte, not as a raw 0-100 value
  • The upper bits carry a per-shocker rolling counter (3-bit) and toggle bit, maintained across transmissions via a static map keyed by shockerId
  • Vibrate and sound encoding remain unchanged (direct 0-100)

Test plan

  • Test shock command at various intensities and verify collar responds at correct levels
  • Test vibrate/sound commands still work as before
  • Test with multiple shockers to verify per-shocker rolling state

The T330 collar variant reads shock intensity from the lower nibble
(0-15) of the intensity byte, not as a raw 0-100 value. The upper
bits carry a rolling counter and toggle bit.

Map 0-100 intensity to 0-15 level in the lower nibble and maintain
per-shocker rolling state (counter + toggle) in the upper bits.
Vibrate and sound encoding remain unchanged.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 27, 2026

Cpp-Linter Report ⚠️

Some files did not pass the configured checks!

clang-tidy (v21.1.8) reports: 83 concern(s)
  • include/radio/rmt/Sequence.h:1:1: warning: [portability-avoid-pragma-once]

    avoid 'pragma once' directive; use include guards instead

        1 | #pragma once
          | ^
  • include/radio/rmt/Sequence.h:13:5: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       13 |     DISABLE_COPY(Sequence);
          |     ^
    include/Common.h:9:13: note: expanded from macro 'DISABLE_COPY'
        9 |   TypeName& operator=(const TypeName&) = delete
          |             ^
  • include/radio/rmt/Sequence.h:16:5: warning: [cppcoreguidelines-pro-type-member-init]

    constructor does not initialize these fields: m_size, m_transmitEnd, m_shockerId, m_intensity

       16 |     Sequence()
          |     ^
  • include/radio/rmt/Sequence.h:27:5: warning: [cppcoreguidelines-pro-type-member-init]

    constructor does not initialize these fields: m_size, m_transmitEnd, m_shockerId, m_intensity

       27 |     Sequence(Sequence&& other) noexcept
          |     ^
  • include/radio/rmt/Sequence.h:40:5: warning: [modernize-use-nodiscard]

    function 'is_valid' should be marked [[nodiscard]]

       40 |     inline bool is_valid() const noexcept { return m_data != nullptr && m_size > 0; }
          |     ^
          |     [[nodiscard]] 
  • include/radio/rmt/Sequence.h:40:5: warning: [readability-redundant-inline-specifier]

    function 'is_valid' has inline specifier but is implicitly inlined

       40 |     inline bool is_valid() const noexcept { return m_data != nullptr && m_size > 0; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:40:17: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       40 |     inline bool is_valid() const noexcept { return m_data != nullptr && m_size > 0; }
          |            ~~~~ ^
          |            auto                           -> bool
  • include/radio/rmt/Sequence.h:42:5: warning: [modernize-use-nodiscard]

    function 'shockerModel' should be marked [[nodiscard]]

       42 |     inline ShockerModelType shockerModel() const noexcept { return m_shockerModel; }
          |     ^
          |     [[nodiscard]] 
  • include/radio/rmt/Sequence.h:42:5: warning: [readability-redundant-inline-specifier]

    function 'shockerModel' has inline specifier but is implicitly inlined

       42 |     inline ShockerModelType shockerModel() const noexcept { return m_shockerModel; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:42:29: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       42 |     inline ShockerModelType shockerModel() const noexcept { return m_shockerModel; }
          |            ~~~~~~~~~~~~~~~~ ^
          |            auto                                           -> ShockerModelType
  • include/radio/rmt/Sequence.h:43:5: warning: [modernize-use-nodiscard]

    function 'shockerId' should be marked [[nodiscard]]

       43 |     inline uint16_t shockerId() const noexcept { return m_shockerId; }
          |     ^
          |     [[nodiscard]] 
  • include/radio/rmt/Sequence.h:43:5: warning: [readability-redundant-inline-specifier]

    function 'shockerId' has inline specifier but is implicitly inlined

       43 |     inline uint16_t shockerId() const noexcept { return m_shockerId; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:43:21: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       43 |     inline uint16_t shockerId() const noexcept { return m_shockerId; }
          |                     ^
  • include/radio/rmt/Sequence.h:45:5: warning: [modernize-use-nodiscard]

    function 'transmitEnd' should be marked [[nodiscard]]

       45 |     inline int64_t transmitEnd() const noexcept { return m_transmitEnd; }
          |     ^
          |     [[nodiscard]] 
  • include/radio/rmt/Sequence.h:45:5: warning: [readability-redundant-inline-specifier]

    function 'transmitEnd' has inline specifier but is implicitly inlined

       45 |     inline int64_t transmitEnd() const noexcept { return m_transmitEnd; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:45:20: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       45 |     inline int64_t transmitEnd() const noexcept { return m_transmitEnd; }
          |                    ^
  • include/radio/rmt/Sequence.h:46:5: warning: [readability-redundant-inline-specifier]

    function 'setTransmitEnd' has inline specifier but is implicitly inlined

       46 |     inline void setTransmitEnd(int64_t transmitEnd) noexcept { m_transmitEnd = transmitEnd; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:48:5: warning: [readability-redundant-inline-specifier]

    function 'payload' has inline specifier but is implicitly inlined

       48 |     inline rmt_data_t* payload() noexcept { return m_data; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:48:24: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       48 |     inline rmt_data_t* payload() noexcept { return m_data; }
          |            ~~~~~~~~~~~ ^
          |            auto                           -> rmt_data_t*
  • include/radio/rmt/Sequence.h:49:5: warning: [modernize-use-nodiscard]

    function 'payload' should be marked [[nodiscard]]

       49 |     inline const rmt_data_t* payload() const noexcept { return m_data; }
          |     ^
          |     [[nodiscard]] 
  • include/radio/rmt/Sequence.h:49:5: warning: [readability-redundant-inline-specifier]

    function 'payload' has inline specifier but is implicitly inlined

       49 |     inline const rmt_data_t* payload() const noexcept { return m_data; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:49:30: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       49 |     inline const rmt_data_t* payload() const noexcept { return m_data; }
          |            ~~~~~~~~~~~~~~~~~ ^
          |            auto                                       -> const rmt_data_t*
  • include/radio/rmt/Sequence.h:50:5: warning: [readability-redundant-inline-specifier]

    function 'terminator' has inline specifier but is implicitly inlined

       50 |     inline rmt_data_t* terminator() noexcept { return m_data + m_size; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:50:24: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       50 |     inline rmt_data_t* terminator() noexcept { return m_data + m_size; }
          |            ~~~~~~~~~~~ ^
          |            auto                              -> rmt_data_t*
  • include/radio/rmt/Sequence.h:51:5: warning: [modernize-use-nodiscard]

    function 'terminator' should be marked [[nodiscard]]

       51 |     inline const rmt_data_t* terminator() const noexcept { return m_data + m_size; }
          |     ^
          |     [[nodiscard]] 
  • include/radio/rmt/Sequence.h:51:5: warning: [readability-redundant-inline-specifier]

    function 'terminator' has inline specifier but is implicitly inlined

       51 |     inline const rmt_data_t* terminator() const noexcept { return m_data + m_size; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:51:30: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       51 |     inline const rmt_data_t* terminator() const noexcept { return m_data + m_size; }
          |            ~~~~~~~~~~~~~~~~~ ^
          |            auto                                          -> const rmt_data_t*
  • include/radio/rmt/Sequence.h:52:5: warning: [modernize-use-nodiscard]

    function 'size' should be marked [[nodiscard]]

       52 |     inline size_t size() const noexcept { return m_size; }
          |     ^
          |     [[nodiscard]] 
  • include/radio/rmt/Sequence.h:52:5: warning: [readability-redundant-inline-specifier]

    function 'size' has inline specifier but is implicitly inlined

       52 |     inline size_t size() const noexcept { return m_size; }
          |     ^~~~~~
  • include/radio/rmt/Sequence.h:52:19: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       52 |     inline size_t size() const noexcept { return m_size; }
          |                   ^
  • include/radio/rmt/Sequence.h:54:10: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       54 |     bool fill(ShockerCommandType commandType, uint8_t intensity);
          |     ~~~~ ^                                                      
          |     auto                                                         -> bool
  • include/radio/rmt/Sequence.h:55:10: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       55 |     bool refill();
          |     ~~~~ ^       
          |     auto          -> bool
  • include/radio/rmt/Sequence.h:57:15: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       57 |     Sequence& operator=(Sequence&& other)
          |     ~~~~~~~~~ ^                          
          |     auto                                  -> Sequence&
  • include/radio/rmt/Sequence.h:59:26: warning: [readability-braces-around-statements]

    statement should be inside braces

       59 |       if (this == &other) return *this;
          |                          ^             
          |                           {
  • src/radio/RFTransmitter.cpp:46:3: warning: [cppcoreguidelines-prefer-member-initializer]

    'm_rmtHandle' should be initialized in a member initializer of the constructor

       40 |   , m_rmtHandle(nullptr)
          |                 ~~~~~~~
          |                 rmtInit(static_cast<int>(m_txPin), RMT_TX_MODE, RMT_MEM_64)
       41 |   , m_queueHandle(nullptr)
       42 |   , m_taskHandle(nullptr)
       43 | {
       44 |   OS_LOGD(TAG, "[pin-%hhi] Creating RFTransmitter", m_txPin);
       45 | 
       46 |   m_rmtHandle = rmtInit(static_cast<int>(m_txPin), RMT_TX_MODE, RMT_MEM_64);
          |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • src/radio/RFTransmitter.cpp:63:3: warning: [cppcoreguidelines-avoid-c-arrays]

    do not declare C-style arrays, use 'std::array' instead

       63 |   char name[32];
          |   ^
  • src/radio/RFTransmitter.cpp:63:13: warning: [cppcoreguidelines-avoid-magic-numbers]

    32 is a magic number; consider replacing it with a named constant

       63 |   char name[32];
          |             ^
  • src/radio/RFTransmitter.cpp:78:21: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       78 | bool RFTransmitter::SendCommand(ShockerModelType model, uint16_t shockerId, ShockerCommandType type, uint8_t intensity, uint16_t durationMs, bool overwriteExisting)
          | ~~~~                ^                                                                                                                                               
          | auto                                                                                                                                                                 -> bool
  • src/radio/RFTransmitter.cpp:78:102: warning: [bugprone-easily-swappable-parameters]

    2 adjacent parameters of 'SendCommand' of similar type ('int') are easily swapped by mistake

       78 | bool RFTransmitter::SendCommand(ShockerModelType model, uint16_t shockerId, ShockerCommandType type, uint8_t intensity, uint16_t durationMs, bool overwriteExisting)
          |                                                                                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/radio/RFTransmitter.cpp:78:110: note: the first parameter in the range is 'intensity'
       78 | bool RFTransmitter::SendCommand(ShockerModelType model, uint16_t shockerId, ShockerCommandType type, uint8_t intensity, uint16_t durationMs, bool overwriteExisting)
          |                                                                                                              ^~~~~~~~~
    src/radio/RFTransmitter.cpp:78:130: note: the last parameter in the range is 'durationMs'
       78 | bool RFTransmitter::SendCommand(ShockerModelType model, uint16_t shockerId, ShockerCommandType type, uint8_t intensity, uint16_t durationMs, bool overwriteExisting)
          |                                                                                                                                  ^~~~~~~~~~
  • src/radio/RFTransmitter.cpp:91:25: warning: [cppcoreguidelines-avoid-magic-numbers]

    300 is a magic number; consider replacing it with a named constant

       91 |     durationMs        = 300;
          |                         ^
  • src/radio/RFTransmitter.cpp:151:13: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 'addSequence' is non-const and globally accessible, consider making it const

      151 | static bool addSequence(std::vector<Rmt::Sequence>& sequences, ShockerModelType modelType, uint16_t shockerId, ShockerCommandType commandType, uint8_t intensity, int64_t transmitEnd)
          |             ^
  • src/radio/RFTransmitter.cpp:163:13: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 'modifySequence' is non-const and globally accessible, consider making it const

      163 | static bool modifySequence(std::vector<Rmt::Sequence>& sequences, ShockerModelType modelType, uint16_t shockerId, ShockerCommandType commandType, uint8_t intensity, int64_t transmitEnd)
          |             ^
  • src/radio/RFTransmitter.cpp:201:21: warning: [readability-function-cognitive-complexity]

    function 'TransmitTask' has cognitive complexity of 33 (threshold 25)

      201 | void RFTransmitter::TransmitTask()
          |                     ^
    src/radio/RFTransmitter.cpp:207:3: note: +1, including nesting penalty of 0, nesting level increased to 1
      207 |   while (true) {
          |   ^
    src/radio/RFTransmitter.cpp:210:5: note: +2, including nesting penalty of 1, nesting level increased to 2
      210 |     while (xQueueReceive(m_queueHandle, &cmd, sequences.empty() ? portMAX_DELAY : 0) == pdTRUE) {
          |     ^
    src/radio/RFTransmitter.cpp:212:7: note: +3, including nesting penalty of 2, nesting level increased to 3
      212 |       if ((cmd.flags & kFlagDeleteTask) != 0) {
          |       ^
    src/radio/RFTransmitter.cpp:213:9: note: +1
      213 |         goto exit;  // Break out of nested loop so locals destruct before vTaskDelete
          |         ^
    src/radio/RFTransmitter.cpp:217:7: note: +3, including nesting penalty of 2, nesting level increased to 3
      217 |       if (OpenShock::EStopManager::IsEStopped()) {
          |       ^
    src/radio/RFTransmitter.cpp:219:9: note: +4, including nesting penalty of 3, nesting level increased to 4
      219 |         if (!wasEstopped) {
          |         ^
    src/radio/RFTransmitter.cpp:227:7: note: +3, including nesting penalty of 2, nesting level increased to 3
      227 |       if ((cmd.flags & kFlagOverwrite) != 0) {
          |       ^
    src/radio/RFTransmitter.cpp:229:9: note: +4, including nesting penalty of 3, nesting level increased to 4
      229 |         if (modifySequence(sequences, cmd.modelType, cmd.shockerId, cmd.type, cmd.intensity, cmd.transmitEnd)) {
          |         ^
    src/radio/RFTransmitter.cpp:234:7: note: +3, including nesting penalty of 2, nesting level increased to 3
      234 |       if (!addSequence(sequences, cmd.modelType, cmd.shockerId, cmd.type, cmd.intensity, cmd.transmitEnd)) {
          |       ^
    src/radio/RFTransmitter.cpp:241:5: note: +2, including nesting penalty of 1, nesting level increased to 2
      241 |     if (isEstopped != wasEstopped) {
          |     ^
    src/radio/RFTransmitter.cpp:244:7: note: +3, including nesting penalty of 2, nesting level increased to 3
      244 |       if (isEstopped) {
          |       ^
    src/radio/RFTransmitter.cpp:247:9: note: +4, including nesting penalty of 3, nesting level increased to 4
      247 |         for (auto seq = sequences.begin(); seq != sequences.end(); ++seq) {
          |         ^
  • src/radio/rmt/Sequence.cpp:14:22: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       14 | inline static size_t getSequenceBufferSize(ShockerModelType shockerModelType)
          |               ~~~~~~ ^                                                       
          |               auto                                                            -> size_t
  • src/radio/rmt/Sequence.cpp:32:20: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       32 | inline static bool fillSequenceImpl(rmt_data_t* data, ShockerModelType modelType, uint16_t shockerId, ShockerCommandType commandType, uint8_t intensity)
          |               ~~~~ ^                                                                                                                                    
          |               auto                                                                                                                                       -> bool
  • src/radio/rmt/Sequence.cpp:37:5: warning: [bugprone-branch-clone]

    switch has 4 consecutive identical branches

       37 |     case ShockerModelType::Petrainer:
          |     ^
    src/radio/rmt/Sequence.cpp:44:82: note: last of these clones ends here
       44 |       return Rmt::D80Encoder::FillBuffer(data, shockerId, commandType, intensity);
          |                                                                                  ^
  • src/radio/rmt/Sequence.cpp:51:1: warning: [cppcoreguidelines-pro-type-member-init]

    constructor does not initialize these fields: m_size, m_transmitEnd, m_shockerId, m_commandType, m_intensity

       51 | Rmt::Sequence::Sequence(ShockerModelType shockerModel, uint16_t shockerId, int64_t transmitEnd)
          | ^
  • src/radio/rmt/Sequence.cpp:51:56: warning: [bugprone-easily-swappable-parameters]

    2 adjacent parameters of 'Sequence' of similar type ('int') are easily swapped by mistake

       51 | Rmt::Sequence::Sequence(ShockerModelType shockerModel, uint16_t shockerId, int64_t transmitEnd)
          |                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/radio/rmt/Sequence.cpp:51:65: note: the first parameter in the range is 'shockerId'
       51 | Rmt::Sequence::Sequence(ShockerModelType shockerModel, uint16_t shockerId, int64_t transmitEnd)
          |                                                                 ^~~~~~~~~
    src/radio/rmt/Sequence.cpp:51:84: note: the last parameter in the range is 'transmitEnd'
       51 | Rmt::Sequence::Sequence(ShockerModelType shockerModel, uint16_t shockerId, int64_t transmitEnd)
          |                                                                                    ^~~~~~~~~~~
  • src/radio/rmt/Sequence.cpp:58:19: warning: [readability-braces-around-statements]

    statement should be inside braces

       58 |   if (m_size == 0) return;
          |                   ^       
          |                    {
  • src/radio/rmt/Sequence.cpp:74:21: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       74 | bool Rmt::Sequence::fill(ShockerCommandType commandType, uint8_t intensity)
          | ~~~~                ^                                                      
          | auto                                                                        -> bool
  • src/radio/rmt/Sequence.cpp:81:13: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       81 | static bool refillSequenceImpl(rmt_data_t* data, ShockerModelType modelType, uint16_t shockerId, ShockerCommandType commandType, uint8_t intensity)
          |        ~~~~ ^                                                                                                                                      
          |        auto                                                                                                                                         -> bool
  • src/radio/rmt/Sequence.cpp:91:21: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       91 | bool Rmt::Sequence::refill()
          | ~~~~                ^       
          | auto                         -> bool
  • src/radio/rmt/T330Encoder.cpp:22:56: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 's_shockState' is non-const and globally accessible, consider making it const

       22 | static std::unordered_map<uint16_t, ShockRollingState> s_shockState;
          |                                                        ^
  • src/radio/rmt/T330Encoder.cpp:24:34: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       24 | size_t Rmt::WellturnT330Encoder::GetBufferSize()
          | ~~~~~~                           ^              
          | auto                                             -> size_t
  • src/radio/rmt/T330Encoder.cpp:26:10: warning: [cppcoreguidelines-avoid-magic-numbers]

    43 is a magic number; consider replacing it with a named constant

       26 |   return 43;
          |          ^
  • src/radio/rmt/T330Encoder.cpp:29:32: warning: [modernize-use-trailing-return-type]

    use a trailing return type for this function

       29 | bool Rmt::WellturnT330Encoder::FillBuffer(rmt_data_t* sequence, uint16_t shockerId, ShockerCommandType type, uint8_t intensity)
          | ~~~~                           ^                                                                                               
          | auto                                                                                                                            -> bool
  • src/radio/rmt/T330Encoder.cpp:37:17: warning: [cppcoreguidelines-avoid-magic-numbers]

    0b01100001 is a magic number; consider replacing it with a named constant

       37 |       typeVal = 0b01100001;
          |                 ^
  • src/radio/rmt/T330Encoder.cpp:40:17: warning: [cppcoreguidelines-avoid-magic-numbers]

    0b01110010 is a magic number; consider replacing it with a named constant

       40 |       typeVal = 0b01110010;
          |                 ^
  • src/radio/rmt/T330Encoder.cpp:43:19: warning: [cppcoreguidelines-avoid-magic-numbers]

    0b10000100 is a magic number; consider replacing it with a named constant

       43 |       typeVal   = 0b10000100;
          |                   ^
  • src/radio/rmt/T330Encoder.cpp:56:34: warning: [cppcoreguidelines-avoid-magic-numbers]

    15 is a magic number; consider replacing it with a named constant

       56 |     uint8_t level = (intensity * 15) / 100;
          |                                  ^
  • src/radio/rmt/T330Encoder.cpp:56:40: warning: [cppcoreguidelines-avoid-magic-numbers]

    100 is a magic number; consider replacing it with a named constant

       56 |     uint8_t level = (intensity * 15) / 100;
          |                                        ^
  • src/radio/rmt/T330Encoder.cpp:59:65: warning: [cppcoreguidelines-avoid-magic-numbers]

    200 is a magic number; consider replacing it with a named constant

       59 |     if (state.lastFillTime == 0 || (now - state.lastFillTime) > 200) {
          |                                                                 ^
  • src/radio/rmt/T330Encoder.cpp:61:55: warning: [cppcoreguidelines-avoid-magic-numbers]

    0x7 is a magic number; consider replacing it with a named constant

       61 |         state.baseCounter = (state.baseCounter + 1) & 0x7;
          |                                                       ^
  • src/radio/rmt/T330Encoder.cpp:68:33: warning: [cppcoreguidelines-avoid-magic-numbers]

    1000 is a magic number; consider replacing it with a named constant

       68 |     int64_t periods = elapsed / 1000;
          |                                 ^
  • src/radio/rmt/T330Encoder.cpp:71:81: warning: [cppcoreguidelines-avoid-magic-numbers]

    0x7 is a magic number; consider replacing it with a named constant

       71 |     uint8_t counter = (state.baseCounter + static_cast<uint8_t>(periods / 2)) & 0x7;
          |                                                                                 ^
  • src/radio/rmt/T330Encoder.cpp:73:43: warning: [readability-implicit-bool-conversion]

    implicit conversion 'bool' -> 'int'

       73 |     intensityByte = (static_cast<uint8_t>(toggle) << 7) | ((counter & 0x7) << 4) | (level & 0xF);
          |                                           ^     
          |                                           static_cast<int>( )
  • src/radio/rmt/T330Encoder.cpp:73:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    7 is a magic number; consider replacing it with a named constant

       73 |     intensityByte = (static_cast<uint8_t>(toggle) << 7) | ((counter & 0x7) << 4) | (level & 0xF);
          |                                                      ^
  • src/radio/rmt/T330Encoder.cpp:73:71: warning: [cppcoreguidelines-avoid-magic-numbers]

    0x7 is a magic number; consider replacing it with a named constant

       73 |     intensityByte = (static_cast<uint8_t>(toggle) << 7) | ((counter & 0x7) << 4) | (level & 0xF);
          |                                                                       ^
  • src/radio/rmt/T330Encoder.cpp:73:93: warning: [cppcoreguidelines-avoid-magic-numbers]

    0xF is a magic number; consider replacing it with a named constant

       73 |     intensityByte = (static_cast<uint8_t>(toggle) << 7) | ((counter & 0x7) << 4) | (level & 0xF);
          |                                                                                             ^
  • src/radio/rmt/T330Encoder.cpp:79:54: warning: [cppcoreguidelines-avoid-magic-numbers]

    0xF is a magic number; consider replacing it with a named constant

       79 |   uint64_t data = (static_cast<uint64_t>(channelId & 0xF) << 36) | (static_cast<uint64_t>(typeVal & 0xF0) << 28) | (static_cast<uint64_t>(shockerId) << 16) | (static_cast<uint64_t>(intensityByte) << 8) | (static_cast<uint64_t>(typeVal & 0xF) << 4)
          |                                                      ^
  • src/radio/rmt/T330Encoder.cpp:79:62: warning: [cppcoreguidelines-avoid-magic-numbers]

    36 is a magic number; consider replacing it with a named constant

       79 |   uint64_t data = (static_cast<uint64_t>(channelId & 0xF) << 36) | (static_cast<uint64_t>(typeVal & 0xF0) << 28) | (static_cast<uint64_t>(shockerId) << 16) | (static_cast<uint64_t>(intensityByte) << 8) | (static_cast<uint64_t>(typeVal & 0xF) << 4)
          |                                                              ^
  • src/radio/rmt/T330Encoder.cpp:79:101: warning: [cppcoreguidelines-avoid-magic-numbers]

    0xF0 is a magic number; consider replacing it with a named constant

       79 |   uint64_t data = (static_cast<uint64_t>(channelId & 0xF) << 36) | (static_cast<uint64_t>(typeVal & 0xF0) << 28) | (static_cast<uint64_t>(shockerId) << 16) | (static_cast<uint64_t>(intensityByte) << 8) | (static_cast<uint64_t>(typeVal & 0xF) << 4)
          |                                                                                                     ^
  • src/radio/rmt/T330Encoder.cpp:79:110: warning: [cppcoreguidelines-avoid-magic-numbers]

    28 is a magic number; consider replacing it with a named constant

       79 |   uint64_t data = (static_cast<uint64_t>(channelId & 0xF) << 36) | (static_cast<uint64_t>(typeVal & 0xF0) << 28) | (static_cast<uint64_t>(shockerId) << 16) | (static_cast<uint64_t>(intensityByte) << 8) | (static_cast<uint64_t>(typeVal & 0xF) << 4)
          |                                                                                                              ^
  • src/radio/rmt/T330Encoder.cpp:79:153: warning: [cppcoreguidelines-avoid-magic-numbers]

    16 is a magic number; consider replacing it with a named constant

       79 |   uint64_t data = (static_cast<uint64_t>(channelId & 0xF) << 36) | (static_cast<uint64_t>(typeVal & 0xF0) << 28) | (static_cast<uint64_t>(shockerId) << 16) | (static_cast<uint64_t>(intensityByte) << 8) | (static_cast<uint64_t>(typeVal & 0xF) << 4)
          |                                                                                                                                                         ^
  • src/radio/rmt/T330Encoder.cpp:79:200: warning: [cppcoreguidelines-avoid-magic-numbers]

    8 is a magic number; consider replacing it with a named constant

       79 |   uint64_t data = (static_cast<uint64_t>(channelId & 0xF) << 36) | (static_cast<uint64_t>(typeVal & 0xF0) << 28) | (static_cast<uint64_t>(shockerId) << 16) | (static_cast<uint64_t>(intensityByte) << 8) | (static_cast<uint64_t>(typeVal & 0xF) << 4)
          |                                                                                                                                                                                                        ^
  • src/radio/rmt/T330Encoder.cpp:79:238: warning: [cppcoreguidelines-avoid-magic-numbers]

    0xF is a magic number; consider replacing it with a named constant

       79 |   uint64_t data = (static_cast<uint64_t>(channelId & 0xF) << 36) | (static_cast<uint64_t>(typeVal & 0xF0) << 28) | (static_cast<uint64_t>(shockerId) << 16) | (static_cast<uint64_t>(intensityByte) << 8) | (static_cast<uint64_t>(typeVal & 0xF) << 4)
          |                                                                                                                                                                                                                                              ^
  • src/radio/rmt/T330Encoder.cpp:80:41: warning: [readability-math-missing-parentheses]

    '&' has higher precedence than '|'; add parentheses to explicitly specify the order of operations

       80 |                 | static_cast<uint64_t>(channelId & 0xF);
          |                                         ^~~~~~~~~~~~~~~~
          |                                         (              )
  • src/radio/rmt/T330Encoder.cpp:80:53: warning: [cppcoreguidelines-avoid-magic-numbers]

    0xF is a magic number; consider replacing it with a named constant

       80 |                 | static_cast<uint64_t>(channelId & 0xF);
          |                                                     ^
  • src/radio/rmt/T330Encoder.cpp:86:3: warning: [cppcoreguidelines-pro-bounds-pointer-arithmetic]

    do not use pointer arithmetic

       86 |   sequence[0] = kRmtPreamble;
          |   ^
  • src/radio/rmt/T330Encoder.cpp:87:29: warning: [cppcoreguidelines-avoid-magic-numbers]

    41 is a magic number; consider replacing it with a named constant

       87 |   Rmt::Internal::EncodeBits<41>(sequence + 1, data, kRmtOne, kRmtZero);
          |                             ^
  • src/radio/rmt/T330Encoder.cpp:87:42: warning: [cppcoreguidelines-pro-bounds-pointer-arithmetic]

    do not use pointer arithmetic

       87 |   Rmt::Internal::EncodeBits<41>(sequence + 1, data, kRmtOne, kRmtZero);
          |                                          ^
  • src/radio/rmt/T330Encoder.cpp:88:3: warning: [cppcoreguidelines-pro-bounds-pointer-arithmetic]

    do not use pointer arithmetic

       88 |   sequence[42] = kRmtPostamble;
          |   ^
  • src/radio/rmt/T330Encoder.cpp:88:12: warning: [cppcoreguidelines-avoid-magic-numbers]

    42 is a magic number; consider replacing it with a named constant

       88 |   sequence[42] = kRmtPostamble;
          |            ^

Have any feedback or feature suggestions? Share it here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

1 participant