diff options
Diffstat (limited to 'src/drivers/include/digital_pot.hpp')
| -rw-r--r-- | src/drivers/include/digital_pot.hpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/drivers/include/digital_pot.hpp b/src/drivers/include/digital_pot.hpp new file mode 100644 index 00000000..e2ca00b1 --- /dev/null +++ b/src/drivers/include/digital_pot.hpp @@ -0,0 +1,49 @@ +/* + * Copyright 2023 jacqueline <me@jacqueline.id.au> + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#pragma once + +#include <stdint.h> +#include <functional> + +#include "esp_err.h" +#include "result.hpp" + +#include "gpio_expander.hpp" + +namespace drivers { + +/* + * Driver for a two-channel digital potentiometer, with steps measured in + * decibels. + */ +class DigitalPot { + public: + explicit DigitalPot(GpioExpander* gpios); + ~DigitalPot() {} + + // Not copyable or movable. + DigitalPot(const DigitalPot&) = delete; + DigitalPot& operator=(const DigitalPot&) = delete; + + enum class Channel { + kLeft, + kRight, + }; + + auto SetRelative(int_fast8_t change) -> void; + auto SetRelative(Channel ch, int_fast8_t change) -> void; + + auto SetZeroCrossDetect(bool enabled) -> void; + + auto GetMaxAttenuation() -> int_fast8_t; + auto GetMinAttenuation() -> int_fast8_t; + + private: + GpioExpander* gpios_; +}; + +} // namespace drivers |
