LCOV - code coverage report
Current view: top level - src/Selectors/LEDs - SelectorLEDs.hpp (source / functions) Hit Total Coverage
Test: e224b347cd670555e44f06608ac41bd1ace9d9d8 Lines: 40 56 71.4 %
Date: 2020-09-08 17:44:46 Functions: 14 26 53.8 %
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           0 :         }
      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             : #if defined(Encoder_h_) || defined(IDE)
      60             : #include <Selectors/EncoderSelector.hpp>
      61             : 
      62             : BEGIN_CS_NAMESPACE
      63             : 
      64             : /**
      65             :  * @brief   @copybrief EncoderSelector
      66             :  *          This version displays the setting using LEDs.
      67             :  * @details @copydetails EncoderSelector
      68             :  * @ingroup SelectorsLEDs
      69             :  */
      70             : template <setting_t N>
      71           1 : class EncoderSelectorLEDs
      72             :     : public GenericEncoderSelector<N, SelectorLEDsCallback<N>> {
      73             :   public:
      74           1 :     EncoderSelectorLEDs(Selectable<N> &selectable,
      75             :                         const EncoderSwitchPinList &pins,
      76             :                         const PinList<N> &ledPins, int8_t pulsesPerStep = 4,
      77             :                         Wrap wrap = Wrap::Wrap)
      78           1 :         : GenericEncoderSelector<N, SelectorLEDsCallback<N>>{
      79           1 :               selectable, {ledPins}, pins, pulsesPerStep, wrap,
      80           2 :           } {}
      81             : };
      82             : 
      83             : END_CS_NAMESPACE
      84             : #endif
      85             : 
      86             : // -------------------------------------------------------------------------- //
      87             : 
      88             : #include <Selectors/IncrementDecrementSelector.hpp>
      89             : 
      90             : BEGIN_CS_NAMESPACE
      91             : 
      92             : /**
      93             :  * @brief   @copybrief IncrementDecrementSelector
      94             :  *          This version displays the setting using LEDs.
      95             :  * @details @copydetails IncrementDecrementSelector
      96             :  * @ingroup SelectorsLEDs
      97             :  */
      98             : template <setting_t N>
      99           1 : class IncrementDecrementSelectorLEDs
     100             :     : public GenericIncrementDecrementSelector<N, SelectorLEDsCallback<N>> {
     101             :   public:
     102           1 :     IncrementDecrementSelectorLEDs(Selectable<N> &selectable,
     103             :                                    const AH::IncrementDecrementButtons &buttons,
     104             :                                    const PinList<N> &ledPins,
     105             :                                    Wrap wrap = Wrap::Wrap)
     106           1 :         : GenericIncrementDecrementSelector<N, SelectorLEDsCallback<N>>{
     107           1 :               selectable,
     108           1 :               {ledPins},
     109           1 :               buttons,
     110           1 :               wrap,
     111           2 :           } {}
     112             : };
     113             : 
     114             : END_CS_NAMESPACE
     115             : 
     116             : // -------------------------------------------------------------------------- //
     117             : 
     118             : #include <Selectors/IncrementSelector.hpp>
     119             : 
     120             : BEGIN_CS_NAMESPACE
     121             : 
     122             : /**
     123             :  * @brief   @copybrief IncrementSelector
     124             :  *          This version displays the setting using LEDs.
     125             :  * @details @copydetails IncrementSelector
     126             :  * @ingroup SelectorsLEDs
     127             :  */
     128             : template <setting_t N>
     129           1 : class IncrementSelectorLEDs
     130             :     : public GenericIncrementSelector<N, SelectorLEDsCallback<N>> {
     131             :   public:
     132           1 :     IncrementSelectorLEDs(Selectable<N> &selectable, const AH::Button &button,
     133             :                           const PinList<N> &ledPins)
     134           1 :         : GenericIncrementSelector<N, SelectorLEDsCallback<N>>{
     135           2 :               selectable, {ledPins}, button} {}
     136             : };
     137             : 
     138             : END_CS_NAMESPACE
     139             : 
     140             : // -------------------------------------------------------------------------- //
     141             : 
     142             : #include <Selectors/ManyButtonsSelector.hpp>
     143             : 
     144             : BEGIN_CS_NAMESPACE
     145             : 
     146             : /**
     147             :  * @brief   @copybrief ManyButtonsSelector
     148             :  *          This version displays the setting using LEDs.
     149             :  * @details @copydetails ManyButtonsSelector
     150             :  * @ingroup SelectorsLEDs
     151             :  */
     152             : template <setting_t N>
     153           1 : class ManyButtonsSelectorLEDs
     154             :     : public GenericManyButtonsSelector<N, SelectorLEDsCallback<N>> {
     155             :   public:
     156           1 :     ManyButtonsSelectorLEDs(Selectable<N> &selectable,
     157             :                             const PinList<N> &buttonPins,
     158             :                             const PinList<N> &ledPins)
     159           1 :         : GenericManyButtonsSelector<N, SelectorLEDsCallback<N>>{
     160           1 :               selectable,
     161           1 :               {ledPins},
     162           1 :               buttonPins,
     163           2 :           } {}
     164             : };
     165             : 
     166             : END_CS_NAMESPACE
     167             : 
     168             : // -------------------------------------------------------------------------- //
     169             : 
     170             : #include <Selectors/ProgramChangeSelector.hpp>
     171             : 
     172             : BEGIN_CS_NAMESPACE
     173             : 
     174             : /**
     175             :  * @brief   @copybrief ProgramChangeSelector
     176             :  *          This version displays the setting using LEDs.
     177             :  * @details @copydetails ProgramChangeSelector
     178             :  * @ingroup SelectorsLEDs
     179             :  */
     180             : template <setting_t N>
     181           1 : class ProgramChangeSelectorLEDs
     182             :     : public GenericProgramChangeSelector<N, SelectorLEDsCallback<N>> {
     183             :   public:
     184           1 :     ProgramChangeSelectorLEDs(Selectable<N> &selectable,
     185             :                               const MIDIChannelCN &address,
     186             :                               const PinList<N> &ledPins)
     187           1 :         : GenericProgramChangeSelector<N, SelectorLEDsCallback<N>>{
     188           1 :               selectable,
     189           1 :               {ledPins},
     190           1 :               address,
     191           2 :           } {}
     192             : };
     193             : 
     194             : END_CS_NAMESPACE
     195             : 
     196             : // -------------------------------------------------------------------------- //
     197             : 
     198             : #include <Selectors/SwitchSelector.hpp>
     199             : 
     200             : BEGIN_CS_NAMESPACE
     201             : 
     202             : /**
     203             :  * @brief   @copybrief SwitchSelector
     204             :  *          This version displays the setting using LEDs.
     205             :  * @details @copydetails SwitchSelector
     206             :  * @ingroup SelectorsLEDs
     207             :  */
     208           1 : class SwitchSelectorLED
     209             :     : public GenericSwitchSelector<SelectorSingleLEDCallback> {
     210             :   public:
     211           1 :     SwitchSelectorLED(Selectable<2> &selectable, const AH::Button &button,
     212             :                       pin_t ledPin)
     213           1 :         : GenericSwitchSelector<SelectorSingleLEDCallback>{
     214           1 :               selectable,
     215           1 :               {ledPin},
     216           1 :               button,
     217           2 :           } {}
     218             : };
     219             : 
     220             : END_CS_NAMESPACE

Generated by: LCOV version 1.14-6-g40580cd