arduino-audio-driver
Loading...
Searching...
No Matches
API_SPI.h
Go to the documentation of this file.
1#pragma once
2#include <stdint.h>
3#include "DriverCommon.h"
4
5#ifdef ARDUINO
6# include "SPI.h"
7# include "assert.h"
8#endif
9
10namespace audio_driver {
11
12#ifndef ARDUINO
13struct SPIClass {
14 void *ref = nullptr;
15} static SPI;
16#endif
17
25
26// ---- Arduino SPI implementation ----
27#ifdef ARDUINO
28
29inline error_t spi_bus_create(struct SPIConfig *config) {
30 SPIConfig &pins = *config;
31 SPIClass *p_spi = (SPIClass *)pins.p_spi;
32 assert(p_spi != nullptr);
33 p_spi->end();
34 if (pins.cs != -1) {
35 pinMode(pins.cs, OUTPUT);
36 digitalWrite(pins.cs, HIGH);
37 }
38 if (pins.miso == -1 || pins.mosi == -1 || pins.clk == -1) {
39 AD_LOGI("setting up SPI w/o pins");
40 p_spi->begin();
41 } else {
42#if defined(ARDUINO_ARCH_STM32)
43 AD_LOGI("setting up SPI miso:%d,mosi:%d, clk:%d, cs:%d", pins.miso,
44 pins.mosi, pins.clk, pins.cs);
45 p_spi->setMISO(pins.miso);
46 p_spi->setMOSI(pins.mosi);
47 p_spi->setSCLK(pins.clk);
48 p_spi->setSSEL(pins.cs);
49 p_spi->begin();
50#elif defined(ESP32)
51 AD_LOGI("setting up SPI miso:%d,mosi:%d, clk:%d, cs:%d", pins.miso,
52 pins.mosi, pins.clk, pins.cs);
53 p_spi->begin(pins.clk, pins.miso, pins.mosi, pins.cs);
54#elif defined(ARDUINO_ARCH_AVR)
55 AD_LOGW("setting up SPI w/o pins");
56 p_spi->begin();
57#endif
58 }
59 return RESULT_OK;
60}
61
62inline void spi_bus_delete(spi_bus_handle_t bus) {
63 AD_LOGD("PinsSPI::end");
64 SPIClass *p_spi = (SPIClass *)bus;
65 p_spi->end();
66}
67
68// ---- Stub SPI implementation for non-Arduino platforms ----
69#else
70
71inline error_t spi_bus_create(struct SPIConfig *config) {
72 AD_LOGI("spi_bus (does nothing)");
73 return RESULT_OK;
74}
75
77
78#endif // ARDUINO
79
80} // namespace audio_driver
#define RESULT_OK
Definition DriverCommon.h:74
#define HIGH
Definition DriverCommon.h:35
#define OUTPUT
Definition DriverCommon.h:44
#define AD_LOGD(...)
Definition Logger.h:12
#define AD_LOGI(...)
Definition Logger.h:13
#define AD_LOGW(...)
Definition Logger.h:14
Namespace for audio driver components.
Definition AudioBoard.h:5
void * spi_bus_handle_t
Definition DriverCommon.h:156
struct audio_driver::SPIClass SPI
int16_t GpioPin
Definition DriverCommon.h:153
int error_t
Definition DriverCommon.h:150
void spi_bus_delete(spi_bus_handle_t bus)
Definition API_SPI.h:76
error_t spi_bus_create(struct SPIConfig *config)
Definition API_SPI.h:71
Definition API_SPI.h:13
void * ref
Definition API_SPI.h:14
Definition API_SPI.h:18
spi_bus_handle_t p_spi
Definition API_SPI.h:19
GpioPin cs
Definition API_SPI.h:23
GpioPin miso
Definition API_SPI.h:21
GpioPin clk
Definition API_SPI.h:20
GpioPin mosi
Definition API_SPI.h:22