UNO R4 - SD support

This commit is contained in:
pschatzmann 2023-07-02 11:40:35 +02:00
parent 5ef9572ad1
commit 45a427c786
8 changed files with 39 additions and 19 deletions

View File

@ -10,15 +10,12 @@
#include "AudioTools.h"
#include "AudioLibs/VS1053Stream.h"
#include "AudioLibs/AudioSourceSDFAT.h"
#include "AudioLibs/AudioSourceSD.h"
#include "AudioCodecs/CodecCopy.h"
#define SD_CARD_CS 22
const char *startFilePath="/";
const char* ext="mp3";
SdSpiConfig sdcfg(SD_CARD_CS, DEDICATED_SPI, SD_SCK_MHZ(10) , &SPI);
AudioSourceSDFAT source(startFilePath, ext, sdcfg);
AudioSourceSD source(startFilePath, ext);
VS1053Stream vs1053; // final output
AudioPlayer player(source, vs1053, *new CopyDecoder());

View File

@ -401,6 +401,7 @@ uint64_t millis() {return (xTaskGetTickCount() * portTICK_PERIOD_MS);}
//----- RP2040 -----------
#elif defined(ARDUINO_ARCH_RP2040)
#define RP2040_HOWER
#define USE_SD_NO_NS
#define USE_I2S
#define USE_PWM
#define USE_ANALOG_ARDUINO
@ -580,6 +581,10 @@ using WiFiServerSecure = BearSSL::WiFiServerSecure;
//------ RENESAS ----------
// Arduino UNO R4
#if defined(ARDUINO_ARCH_RENESAS) || defined(_RENESAS_RA_)
// no trace to save on memory
#define NO_TRACE
//#define LOG_NO_MSG
#define USE_INT24_FROM_INT
#define IS_RENESAS 1
#define USE_TYPETRAITS
@ -590,10 +595,10 @@ using WiFiServerSecure = BearSSL::WiFiServerSecure;
#define PIN_PWM_COUNT 12
#define USE_ANALOG
#define USE_ANALOG_ARDUINO
#define USE_SD_NO_NS
#define PIN_ANALOG_START A0
#define ANALOG_BUFFER_SIZE 512
#define ANALOG_BUFFERS 5
// default pins for UNO VS1053 shield
#define VS1053_CS 6
#define VS1053_DCS 7

View File

@ -121,11 +121,11 @@ class I2SConfig : public AudioInfo {
LOGI("sample rate: %d", sample_rate);
LOGI("bits per sample: %d", bits_per_sample);
LOGI("number of channels: %d", channels);
#ifdef ESP32
LOGI("signal_type: %s", i2s_signal_types[signal_type]);
if (signal_type==Digital){
LOGI("i2s_format: %s", i2s_formats[i2s_format]);
}
#ifdef ESP32
LOGI("auto_clear: %s",auto_clear? "true" : "false");
if (use_apll) {
LOGI("use_apll: %s", use_apll ? "true" : "false");

View File

@ -1,6 +1,5 @@
#pragma once
#include <SPI.h>
#include <FS.h>
#include <SD.h>
#include "AudioLogger.h"
#include "AudioBasic/StrExt.h"
@ -101,8 +100,8 @@ public:
long size() { return idx.size();}
protected:
#ifdef RP2040_HOWER
SDIndex<SDClass,fs::File> idx{SD};
#if defined(USE_SD_NO_NS)
SDIndex<SDClass, File> idx{SD};
#else
SDIndex<fs::SDFS,fs::File> idx{SD};
#endif

View File

@ -4,7 +4,6 @@
#include "AudioLogger.h"
#include "AudioTools/AudioSource.h"
#include "AudioLibs/SDDirect.h"
#include "FS.h"
#include "SD.h"
#include "SPI.h"
@ -103,8 +102,8 @@ public:
long size() { return idx.size();}
protected:
#ifdef RP2040_HOWER
SDDirect<SDClass,fs::File> idx{SD};
#if defined(USE_SD_NO_NS)
SDDirect<SDClass, File> idx{SD};
#else
SDDirect<fs::SDFS,fs::File> idx{SD};
#endif

View File

@ -250,7 +250,7 @@ class SDDirect {
}
return result;
#else
return p_sd->open(name, "r");
return p_sd->open(name);
#endif
}

View File

@ -47,8 +47,6 @@ class TimerAlarmRepeatingDriverRP2040 : public TimerAlarmRepeatingDriverBase {
uint64_t time_us = AudioTime::toTimeUs(time);
result = alarm_pool_add_repeating_timer_us(ap, time_us, &staticCallback, this, &timer);
break;
default:
LOGE("Undefined Unit");
}
return result;

View File

@ -142,27 +142,49 @@ class AudioLogger {
snprintf(AudioLogger::instance().str(), LOG_PRINTF_BUFFER_SIZE, fmt, ##__VA_ARGS__); \
AudioLogger::instance().println();\
}
#define LOG_MIN(level) { \
AudioLogger::instance().prefix(__FILE__,__LINE__, level); \
AudioLogger::instance().println();\
}
#ifdef LOG_NO_MSG
#define LOGD(fmt, ...) if (AudioLogger::instance().level()<=AudioLogger::Debug) { LOG_MIN(AudioLogger::Debug);}
#define LOGI(fmt, ...) if (AudioLogger::instance().level()<=AudioLogger::Info) { LOG_MIN(AudioLogger::Info);}
#define LOGW(fmt, ...) if (AudioLogger::instance().level()<=AudioLogger::Warning) { LOG_MIN(AudioLogger::Warning);}
#define LOGE(fmt, ...) if (AudioLogger::instance().level()<=AudioLogger::Error) { LOG_MIN(AudioLogger::Error);}
#else
// Log statments which store the fmt string in Progmem
#define LOGD(fmt, ...) if (AudioLogger::instance().level()<=AudioLogger::Debug) { LOG_OUT_PGMEM(AudioLogger::Debug, fmt, ##__VA_ARGS__);}
#define LOGI(fmt, ...) if (AudioLogger::instance().level()<=AudioLogger::Info) { LOG_OUT_PGMEM(AudioLogger::Info, fmt, ##__VA_ARGS__);}
#define LOGW(fmt, ...) if (AudioLogger::instance().level()<=AudioLogger::Warning) { LOG_OUT_PGMEM(AudioLogger::Warning, fmt, ##__VA_ARGS__);}
#define LOGE(fmt, ...) if (AudioLogger::instance().level()<=AudioLogger::Error) { LOG_OUT_PGMEM(AudioLogger::Error, fmt, ##__VA_ARGS__);}
#endif
// Just log file and line
#if defined(NO_TRACED)
#if defined(NO_TRACED) || defined(NO_TRACE)
# define TRACED()
#else
# define TRACED() if (AudioLogger::instance().level()<=AudioLogger::Debug) { LOG_OUT(AudioLogger::Debug, LOG_METHOD);}
#endif
#if defined(NO_TRACEI)
#if defined(NO_TRACEI) || defined(NO_TRACE)
# define TRACEI()
#else
# define TRACEI() if (AudioLogger::instance().level()<=AudioLogger::Info) { LOG_OUT(AudioLogger::Info, LOG_METHOD);}
#endif
#define TRACEW() if (AudioLogger::instance().level()<=AudioLogger::Warning) { LOG_OUT(AudioLogger::Warning, LOG_METHOD);}
#if defined(NO_TRACEW) || defined(NO_TRACE)
# define TRACEW()
#else
# define TRACEW() if (AudioLogger::instance().level()<=AudioLogger::Warning) { LOG_OUT(AudioLogger::Warning, LOG_METHOD);}
#endif
#if defined(NO_TRACEE) || defined(NO_TRACE)
# define TRACEE()
#else
#define TRACEE() if (AudioLogger::instance().level()<=AudioLogger::Error) { LOG_OUT(AudioLogger::Error, LOG_METHOD);}
#endif
#else