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

            Line data    Source code
       1              : #pragma once
       2              : 
       3              : #include <AH/STL/cstdint>
       4              : #include <Settings/NamespaceSettings.hpp>
       5              : 
       6              : BEGIN_CS_NAMESPACE
       7              : 
       8              : namespace Interfaces {
       9              : 
      10              : /// Abstract interface for MIDI input elements that receive and store a 7-bit
      11              : /// value.
      12              : class IValue {
      13              :   public:
      14              :     /// @name   Detecting changes
      15              :     /// @{
      16              : 
      17              :     /// Check if the value was updated since the last time the dirty flag was
      18              :     /// cleared.
      19           17 :     bool getDirty() const { return dirty; }
      20              :     /// Clear the dirty flag.
      21           11 :     void clearDirty() { dirty = false; }
      22              : 
      23              :     /// @}
      24              : 
      25              :     virtual uint8_t getValue() const = 0;
      26              : 
      27              :   protected:
      28              :     bool dirty = true;
      29              : };
      30              : 
      31              : /// Abstract interface for MIDI input elements that receive and store a 14-bit
      32              : /// value.
      33              : class IValue14 {
      34              :   public:
      35              :     /// @name   Detecting changes
      36              :     /// @{
      37              : 
      38              :     /// Check if the value was updated since the last time the dirty flag was
      39              :     /// cleared.
      40              :     bool getDirty() const { return dirty; }
      41              :     /// Clear the dirty flag.
      42              :     void clearDirty() { dirty = false; }
      43              : 
      44              :     /// @}
      45              : 
      46              :     virtual uint16_t getValue() const = 0;
      47              : 
      48              :   protected:
      49              :     bool dirty = true;
      50              : };
      51              : 
      52              : namespace MCU {
      53              : 
      54              : class IVPot {
      55              :   public:
      56              :     /// @name   Detecting changes
      57              :     /// @{
      58              : 
      59              :     /// Check if the value was updated since the last time the dirty flag was
      60              :     /// cleared.
      61              :     bool getDirty() const { return dirty; }
      62              :     /// Clear the dirty flag.
      63              :     void clearDirty() { dirty = false; }
      64              : 
      65              :     /// @}
      66              : 
      67              :     virtual bool getCenterLed() const = 0;
      68              :     virtual uint8_t getStartOn() const = 0;
      69              :     virtual uint8_t getStartOff() const = 0;
      70              : 
      71              :   protected:
      72              :     bool dirty = true;
      73              : };
      74              : 
      75              : /** 
      76              :  * @brief   An abstract interface for VU meters. To allow for both floating 
      77              :  *          point values and integers, all values are integers under the hood.
      78              :  * 
      79              :  * Using floats instead integers would be a strange choice as LED bar VU meters
      80              :  * have discrete levels.  
      81              :  * Continuous "analog" VU meters can use or override the `getFloatValue()` 
      82              :  * method.
      83              :  */
      84              : class IVU {
      85              :   public:
      86           12 :     IVU(uint8_t max, bool alwaysDirty = false)
      87           12 :         : max(max), alwaysDirty(alwaysDirty) {}
      88              : 
      89              :     /// @name   Detecting changes
      90              :     /// @{
      91              : 
      92              :     /// Check if the value was updated since the last time the dirty flag was
      93              :     /// cleared.
      94              :     bool getDirty() const { return dirty; }
      95              :     /// Clear the dirty flag.
      96              :     void clearDirty() { dirty = alwaysDirty; }
      97              : 
      98              :     /// @}
      99              : 
     100              :     /// Return the VU meter value as an integer.
     101              :     virtual uint8_t getValue() = 0;
     102              :     /// Return the overload status.
     103              :     virtual bool getOverload() = 0;
     104              :     /// Get the VU meter value as a floating point number.
     105            1 :     virtual float getFloatValue() { return (float)getValue() / getMax(); }
     106              :     /// Get the maximum value that this VU meter can return.
     107            1 :     uint8_t getMax() const { return max; }
     108              : 
     109              :   protected:
     110              :     uint8_t max;
     111              :     bool alwaysDirty;
     112              :     bool dirty = true;
     113              : };
     114              : 
     115              : } // namespace MCU
     116              : 
     117              : } // namespace Interfaces
     118              : 
     119              : END_CS_NAMESPACE
        

Generated by: LCOV version 2.4-beta