LCOV - code coverage report
Current view: top level - src/MIDI_Inputs - InterfaceMIDIInputElements.hpp (source / functions) Hit Total Coverage
Test: 169c36a3797bc662d84b5726f34a3f37d3c58247 Lines: 6 6 100.0 %
Date: 2024-11-09 15:32:27 Functions: 5 5 100.0 %
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 1.15