LCOV - code coverage report
Current view: top level - src/Selectors - ProgramChangeSelector.hpp (source / functions) Coverage Total Hit
Test: 73449d9b107c772cf65493691543348214e5d5eb Lines: 41.7 % 12 5
Test Date: 2026-06-06 17:44:35 Functions: 33.3 % 9 3
Legend: Lines:     hit not hit

            Line data    Source code
       1              : #pragma once
       2              : 
       3              : #include <MIDI_Inputs/MIDIInputElement.hpp>
       4              : #include <MIDI_Inputs/MIDIInputElementMatchers.hpp>
       5              : #include <Selectors/Selector.hpp>
       6              : 
       7              : BEGIN_CS_NAMESPACE
       8              : 
       9              : template <setting_t N, class Callback = EmptySelectorCallback>
      10              : class GenericProgramChangeSelector
      11              :     : public GenericSelector<N, Callback>,
      12              :       public MatchingMIDIInputElement<MIDIMessageType::ProgramChange,
      13              :                                       OneByteMIDIMatcher> {
      14              :   public:
      15              :     using Matcher = OneByteMIDIMatcher;
      16              :     using Parent =
      17              :         MatchingMIDIInputElement<MIDIMessageType::ProgramChange, Matcher>;
      18              : 
      19            2 :     GenericProgramChangeSelector(Selectable<N> &selectable,
      20              :                                  const Callback &callback,
      21              :                                  MIDIChannelCable address)
      22            2 :         : GenericSelector<N, Callback> {selectable, callback}, Parent(address) {
      23            2 :     }
      24              : 
      25            0 :     void begin() override { GenericSelector<N, Callback>::begin(); }
      26              : 
      27            0 :     void reset() override { GenericSelector<N, Callback>::reset(); }
      28              : 
      29            0 :     void handleUpdate(typename Matcher::Result match) override {
      30            0 :         uint8_t program = match.value;
      31            0 :         if (program < N) {
      32            0 :             this->set(program);
      33              :         } else {
      34              :             DEBUGFN(F("Warning: Received Program Change to program 0x")
      35              :                     << hex << program << dec
      36              :                     << F(", which is not smaller than the number of settings (")
      37              :                     << N << ')');
      38              :         }
      39            0 :     }
      40              : };
      41              : 
      42              : /**
      43              :  * @brief   Selector that listens for MIDI Program Change events on a given
      44              :  *          MIDI Channel, and uses the program number as its selection.
      45              :  * 
      46              :  * @tparam  N 
      47              :  *          The number of settings. The maximum program number is @f$ N - 1 @f$.
      48              :  * @ingroup Selectors
      49              :  */
      50              : template <setting_t N>
      51              : class ProgramChangeSelector : public GenericProgramChangeSelector<N> {
      52              :   public:
      53            1 :     ProgramChangeSelector(Selectable<N> &selectable, MIDIChannelCable address)
      54            1 :         : GenericProgramChangeSelector<N> {selectable, {}, address} {}
      55              : };
      56              : 
      57              : END_CS_NAMESPACE
        

Generated by: LCOV version 2.4-beta