LCOV - code coverage report
Current view: top level - src/Selectors/LEDs - SelectorLEDs.hpp (source / functions) Hit Total Coverage
Test: 3a807a259ebe0769dd942f7f612dca5273937539 Lines: 15 30 50.0 %
Date: 2024-03-24 17:16:54 Functions: 8 14 57.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp>
       4             : #include <Def/Def.hpp>
       5             : #include <Selectors/Selector.hpp>
       6             : 
       7             : BEGIN_CS_NAMESPACE
       8             : 
       9             : template <setting_t N>
      10             : class SelectorLEDsCallback {
      11             :   public:
      12           5 :     SelectorLEDsCallback(const PinList<N> &ledPins) : ledPins(ledPins) {}
      13             : 
      14             :     /// Initialize.
      15           0 :     void begin() {
      16           0 :         for (pin_t pin : ledPins) {
      17           0 :             AH::ExtIO::pinMode(pin, OUTPUT);
      18           0 :             AH::ExtIO::digitalWrite(pin, LOW);
      19             :         }
      20           0 :     }
      21             : 
      22             :     /// Refresh, called periodically.
      23           0 :     void update() {}
      24             : 
      25             :     /// Called when the setting changes.
      26           0 :     void update(setting_t oldSetting, setting_t newSetting) {
      27           0 :         AH::ExtIO::digitalWrite(ledPins[oldSetting], LOW);
      28           0 :         AH::ExtIO::digitalWrite(ledPins[newSetting], HIGH);
      29           0 :     }
      30             : 
      31             :   private:
      32             :     PinList<N> ledPins;
      33             : };
      34             : 
      35             : class SelectorSingleLEDCallback {
      36             :   public:
      37           1 :     SelectorSingleLEDCallback(pin_t ledPin) : ledPin(ledPin) {}
      38             : 
      39             :     /// Initialize.
      40           0 :     void begin() { AH::ExtIO::pinMode(ledPin, OUTPUT); }
      41             : 
      42             :     /// Refresh, called periodically.
      43           0 :     void update() {}
      44             : 
      45             :     /// Called when the setting changes.
      46           0 :     void update(setting_t oldSetting, setting_t newSetting) {
      47             :         (void)oldSetting;
      48           0 :         AH::ExtIO::digitalWrite(ledPin, newSetting == 0 ? LOW : HIGH);
      49           0 :     }
      50             : 
      51             :   private:
      52             :     pin_t ledPin;
      53             : };
      54             : 
      55             : END_CS_NAMESPACE
      56             : 
      57             : // -------------------------------------------------------------------------- //
      58             : 
      59             : #include <Selectors/EncoderSelector.hpp>
      60             : 
      61             : BEGIN_CS_NAMESPACE
      62             : 
      63             : /**
      64             :  * @brief   @copybrief EncoderSelector
      65             :  *          This version displays the setting using LEDs.
      66             :  * @details @copydetails EncoderSelector
      67             :  * @ingroup SelectorsLEDs
      68             :  */
      69             : template <setting_t N>
      70             : class EncoderSelectorLEDs
      71             :     : public GenericEncoderSelector<N, SelectorLEDsCallback<N>> {
      72             :   public:
      73           1 :     EncoderSelectorLEDs(Selectable<N> &selectable,
      74             :                         const EncoderSwitchPinList &pins,
      75             :                         const PinList<N> &ledPins, int8_t pulsesPerStep = 4,
      76             :                         Wrap wrap = Wrap::Wrap)
      77             :         : GenericEncoderSelector<N, SelectorLEDsCallback<N>> {
      78             :               selectable, {ledPins}, pins, pulsesPerStep, wrap,
      79           1 :           } {}
      80             : };
      81             : 
      82             : END_CS_NAMESPACE
      83             : 
      84             : // -------------------------------------------------------------------------- //
      85             : 
      86             : #include <Selectors/IncrementDecrementSelector.hpp>
      87             : 
      88             : BEGIN_CS_NAMESPACE
      89             : 
      90             : /**
      91             :  * @brief   @copybrief IncrementDecrementSelector
      92             :  *          This version displays the setting using LEDs.
      93             :  * @details @copydetails IncrementDecrementSelector
      94             :  * @ingroup SelectorsLEDs
      95             :  */
      96             : template <setting_t N>
      97             : class IncrementDecrementSelectorLEDs
      98             :     : public GenericIncrementDecrementSelector<N, SelectorLEDsCallback<N>> {
      99             :   public:
     100           1 :     IncrementDecrementSelectorLEDs(Selectable<N> &selectable,
     101             :                                    const AH::IncrementDecrementButtons &buttons,
     102             :                                    const PinList<N> &ledPins,
     103             :                                    Wrap wrap = Wrap::Wrap)
     104             :         : GenericIncrementDecrementSelector<N, SelectorLEDsCallback<N>> {
     105             :               selectable,
     106             :               {ledPins},
     107             :               buttons,
     108             :               wrap,
     109           1 :           } {}
     110             : };
     111             : 
     112             : END_CS_NAMESPACE
     113             : 
     114             : // -------------------------------------------------------------------------- //
     115             : 
     116             : #include <Selectors/IncrementSelector.hpp>
     117             : 
     118             : BEGIN_CS_NAMESPACE
     119             : 
     120             : /**
     121             :  * @brief   @copybrief IncrementSelector
     122             :  *          This version displays the setting using LEDs.
     123             :  * @details @copydetails IncrementSelector
     124             :  * @ingroup SelectorsLEDs
     125             :  */
     126             : template <setting_t N>
     127             : class IncrementSelectorLEDs
     128             :     : public GenericIncrementSelector<N, SelectorLEDsCallback<N>> {
     129             :   public:
     130           1 :     IncrementSelectorLEDs(Selectable<N> &selectable, const AH::Button &button,
     131             :                           const PinList<N> &ledPins)
     132             :         : GenericIncrementSelector<N, SelectorLEDsCallback<N>> {
     133           1 :               selectable, {ledPins}, button} {}
     134             : };
     135             : 
     136             : END_CS_NAMESPACE
     137             : 
     138             : // -------------------------------------------------------------------------- //
     139             : 
     140             : #include <Selectors/ManyButtonsSelector.hpp>
     141             : 
     142             : BEGIN_CS_NAMESPACE
     143             : 
     144             : /**
     145             :  * @brief   @copybrief ManyButtonsSelector
     146             :  *          This version displays the setting using LEDs.
     147             :  * @details @copydetails ManyButtonsSelector
     148             :  * @ingroup SelectorsLEDs
     149             :  */
     150             : template <setting_t N>
     151             : class ManyButtonsSelectorLEDs
     152             :     : public GenericManyButtonsSelector<N, SelectorLEDsCallback<N>> {
     153             :   public:
     154           1 :     ManyButtonsSelectorLEDs(Selectable<N> &selectable,
     155             :                             const PinList<N> &buttonPins,
     156             :                             const PinList<N> &ledPins)
     157             :         : GenericManyButtonsSelector<N, SelectorLEDsCallback<N>> {
     158             :               selectable,
     159             :               {ledPins},
     160             :               buttonPins,
     161           1 :           } {}
     162             : };
     163             : 
     164             : END_CS_NAMESPACE
     165             : 
     166             : // -------------------------------------------------------------------------- //
     167             : 
     168             : #include <Selectors/ProgramChangeSelector.hpp>
     169             : 
     170             : BEGIN_CS_NAMESPACE
     171             : 
     172             : /**
     173             :  * @brief   @copybrief ProgramChangeSelector
     174             :  *          This version displays the setting using LEDs.
     175             :  * @details @copydetails ProgramChangeSelector
     176             :  * @ingroup SelectorsLEDs
     177             :  */
     178             : template <setting_t N>
     179             : class ProgramChangeSelectorLEDs
     180             :     : public GenericProgramChangeSelector<N, SelectorLEDsCallback<N>> {
     181             :   public:
     182           1 :     ProgramChangeSelectorLEDs(Selectable<N> &selectable,
     183             :                               MIDIChannelCable address,
     184             :                               const PinList<N> &ledPins)
     185             :         : GenericProgramChangeSelector<N, SelectorLEDsCallback<N>> {
     186             :               selectable,
     187             :               {ledPins},
     188             :               address,
     189           1 :           } {}
     190             : };
     191             : 
     192             : END_CS_NAMESPACE
     193             : 
     194             : // -------------------------------------------------------------------------- //
     195             : 
     196             : #include <Selectors/SwitchSelector.hpp>
     197             : 
     198             : BEGIN_CS_NAMESPACE
     199             : 
     200             : /**
     201             :  * @brief   @copybrief SwitchSelector
     202             :  *          This version displays the setting using LEDs.
     203             :  * @details @copydetails SwitchSelector
     204             :  * @ingroup SelectorsLEDs
     205             :  */
     206             : class SwitchSelectorLED
     207             :     : public GenericSwitchSelector<SelectorSingleLEDCallback> {
     208             :   public:
     209           1 :     SwitchSelectorLED(Selectable<2> &selectable, const AH::Button &button,
     210             :                       pin_t ledPin)
     211           1 :         : GenericSwitchSelector<SelectorSingleLEDCallback> {
     212             :               selectable,
     213             :               {ledPin},
     214             :               button,
     215           1 :           } {}
     216             : };
     217             : 
     218             : END_CS_NAMESPACE

Generated by: LCOV version 1.15