LCOV - code coverage report
Current view: top level - src/Selectors - ManyButtonsSelector.hpp (source / functions) Coverage Total Hit
Test: 73449d9b107c772cf65493691543348214e5d5eb Lines: 100.0 % 16 16
Test Date: 2026-06-06 17:44:35 Functions: 71.4 % 7 5
Legend: Lines:     hit not hit

            Line data    Source code
       1              : #pragma once
       2              : 
       3              : #include "Selector.hpp"
       4              : #include <AH/Containers/ArrayHelpers.hpp>
       5              : #include <AH/Hardware/Button.hpp>
       6              : #include <Def/Def.hpp>
       7              : 
       8              : BEGIN_CS_NAMESPACE
       9              : 
      10              : template <setting_t N, class Callback = EmptySelectorCallback>
      11              : class GenericManyButtonsSelector : public GenericSelector<N, Callback> {
      12              :     using Parent = GenericSelector<N, Callback>;
      13              : 
      14              :   public:
      15            3 :     GenericManyButtonsSelector(Selectable<N> &selectable,
      16              :                                const Callback &callback,
      17              :                                const PinList<N> &buttonPins)
      18              :         : GenericSelector<N, Callback> {selectable, callback},
      19            3 :           buttons(AH::copyAs<AH::Button>(buttonPins)) {}
      20              : 
      21            1 :     void begin() override {
      22            1 :         Parent::begin();
      23            5 :         for (auto &btn : buttons)
      24            4 :             btn.begin();
      25            1 :     }
      26              : 
      27            1 :     void update() override {
      28            1 :         Parent::update();
      29            5 :         for (setting_t i = 0; i < N; i++)
      30            5 :             if (buttons[i].update() == AH::Button::Falling &&
      31            1 :                 buttons[this->get()].getState() != AH::Button::Pressed)
      32            1 :                 this->set(i);
      33            1 :     }
      34              : 
      35              :     void invert() {
      36              :         for (auto &btn : buttons)
      37              :             btn.invert();
      38              :     }
      39              : 
      40              :   private:
      41              :     AH::Array<AH::Button, N> buttons;
      42              : };
      43              : 
      44              : // -------------------------------------------------------------------------- //
      45              : 
      46              : /**
      47              :  * @brief   Selector that reads from @f$ N @f$ buttons.
      48              :  * 
      49              :  * Pressing the @f$ n @f$-th button selects the @f$ n @f$-th setting.
      50              :  * 
      51              :  * @htmlonly 
      52              :  * <object type="image/svg+xml" data="../../selector-multiple-momentary-switches-LED.svg"></object>
      53              :  * @endhtmlonly
      54              :  * 
      55              :  * @ingroup Selectors
      56              :  * 
      57              :  * @tparam  N 
      58              :  *          The number of settings.
      59              :  */
      60              : template <setting_t N>
      61              : class ManyButtonsSelector : public GenericManyButtonsSelector<N> {
      62              :   public:
      63            2 :     ManyButtonsSelector(Selectable<N> &selectable, const PinList<N> &buttonPins)
      64              :         : GenericManyButtonsSelector<N> {
      65              :               selectable,
      66              :               {},
      67              :               buttonPins,
      68            2 :           } {}
      69              : };
      70              : 
      71              : END_CS_NAMESPACE
        

Generated by: LCOV version 2.4-beta