dac.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /**
  2. * DAC dispatch layer
  3. *
  4. * Routes abstract DAC API calls to the registered DAC driver.
  5. * When no driver is registered, all functions are no-ops.
  6. */
  7. #include <stdbool.h>
  8. #include <stddef.h>
  9. #include "dac.h"
  10. static const dac_ops_t *s_ops = NULL;
  11. void dac_register(const dac_ops_t *ops) {
  12. s_ops = ops;
  13. }
  14. esp_err_t dac_init(void *i2c_bus) {
  15. return (s_ops && s_ops->init) ? s_ops->init(i2c_bus) : ESP_OK;
  16. }
  17. esp_err_t dac_deinit(void) {
  18. return (s_ops && s_ops->deinit) ? s_ops->deinit() : ESP_OK;
  19. }
  20. void dac_set_volume(float volume_db) {
  21. if (s_ops && s_ops->set_volume) {
  22. s_ops->set_volume(volume_db);
  23. }
  24. }
  25. void dac_set_power_mode(dac_power_mode_t mode) {
  26. if (s_ops && s_ops->set_power_mode) {
  27. s_ops->set_power_mode(mode);
  28. }
  29. }
  30. void dac_on_i2s_started(void) {
  31. if (s_ops && s_ops->on_i2s_started) {
  32. s_ops->on_i2s_started();
  33. }
  34. }
  35. void dac_enable_speaker(bool enable) {
  36. if (s_ops && s_ops->enable_speaker) {
  37. s_ops->enable_speaker(enable);
  38. }
  39. }
  40. void dac_enable_line_out(bool enable) {
  41. if (s_ops && s_ops->enable_line_out) {
  42. s_ops->enable_line_out(enable);
  43. }
  44. }