#pragma once #include #include BEGIN_CS_NAMESPACE class ContinuousCCSender { public: void send(uint8_t value, MIDIAddress address) { Control_Surface.sendControlChange(address, value); } constexpr static uint8_t precision() { return 7; } }; template class ContinuousCCSender14 { public: void send(uint16_t value, MIDIAddress address) { value = AH::increaseBitDepth<14, precision(), uint16_t>(value); Control_Surface.sendControlChange(address + 0x00, (value >> 7) & 0x7F); Control_Surface.sendControlChange(address + 0x20, (value >> 0) & 0x7F); } constexpr static uint8_t precision() { static_assert(INPUT_PRECISION_BITS <= 14, "Maximum resolution is 14 bits"); return INPUT_PRECISION_BITS; } }; END_CS_NAMESPACE