13#include "driver/spi_slave.h"
34 "SPIAudioMasterConfig: sample_rate=%d, channels=%d, "
35 "bits_per_sample=%d, cs_pin=%d, clock_hz=%d, bit_order=%s, "
36 "data_mode=%s, max_payload=%d, is_blocking_write=%s",
38 bit_order == MSBFIRST ?
"MSBFIRST" :
"LSBFIRST",
148 if (
p_spi ==
nullptr) {
160 LOGI(
"SPIAudioMaster started with remote buffer size: %d bytes",
168 if (
p_spi !=
nullptr) {
179 if (mime ==
nullptr)
return false;
181 reinterpret_cast<const uint8_t*
>(mime), strlen(mime) + 1,
190 payload[4] =
static_cast<uint8_t
>(info.
channels);
197 size_t write(
const uint8_t* data,
size_t len) {
199 if (data ==
nullptr || len == 0)
return 0;
201 LOGE(
"Attempting to write %d bytes, but remote buffer size is only %d",
207 if (chunk == 0)
return 0;
212 if (chunk == 0)
return 0;
252 uint8_t response[4] = {0, 0, 0, 0};
253 uint16_t response_len =
sizeof(response);
255 response, &response_len)) {
258 if (response_len < 4) {
266 uint8_t response[4] = {0, 0, 0, 0};
267 uint16_t response_len =
sizeof(response);
272 if (response_len < 4) {
280 uint16_t payload_len, uint8_t* response,
281 uint16_t* response_len) {
285 p_spi->beginTransaction(settings);
290 p_spi->transfer(
static_cast<uint8_t
>(command));
293 for (uint16_t i = 0; i < payload_len; i++) {
294 p_spi->transfer(payload !=
nullptr ? payload[i] : 0);
297 uint8_t status =
p_spi->transfer(0x00);
299 uint16_t response_capacity = 0;
301 if (response !=
nullptr && response_len !=
nullptr) {
302 response_capacity = *response_len;
305 if (response_len !=
nullptr) {
309 for (uint16_t i = 0; i < len; i++) {
310 uint8_t value =
p_spi->transfer(0x00);
311 if (response !=
nullptr && i < response_capacity) {
319 p_spi->endTransaction();
326 uint8_t lo =
p_spi->transfer(
static_cast<uint8_t
>(value & 0xFF));
327 uint8_t hi =
p_spi->transfer(
static_cast<uint8_t
>((value >> 8) & 0xFF));
328 return static_cast<uint16_t
>(lo) | (
static_cast<uint16_t
>(hi) << 8);
333 out[0] =
static_cast<uint8_t
>(value & 0xFF);
334 out[1] =
static_cast<uint8_t
>((value >> 8) & 0xFF);
335 out[2] =
static_cast<uint8_t
>((value >> 16) & 0xFF);
336 out[3] =
static_cast<uint8_t
>((value >> 24) & 0xFF);
341 return static_cast<uint32_t
>(in[0]) | (
static_cast<uint32_t
>(in[1]) << 8) |
342 (
static_cast<uint32_t
>(in[2]) << 16) |
343 (
static_cast<uint32_t
>(in[3]) << 24);
#define HIGH
Definition Arduino.h:46
#define OUTPUT
Definition Arduino.h:38
#define LOW
Definition Arduino.h:49
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGE(...)
Definition AudioLoggerIDF.h:30
SPIAudioCommand
SPI command ids used by SPIAudioMaster.
Definition SPIAudioCommand.h:19