The atk-dnesp32s3-box is compatible with ES8311 devices and non-ES8311 devices (#477)

* The atk-dnesp32s3-box is compatible with ES8311 devices and non-ES8311 devices

* Update atk_dnesp32s3_box.cc

format code

---------

Co-authored-by: Xiaoxia <terrence@tenclass.com>
This commit is contained in:
Almost-LoverY
2025-04-12 17:17:27 +08:00
committed by GitHub
parent a3a833b19d
commit 4787eb41ab
2 changed files with 64 additions and 10 deletions

View File

@@ -1,6 +1,7 @@
#include "wifi_board.h" #include "wifi_board.h"
#include "audio_codec.h" #include "audio_codec.h"
#include "audio_codecs/no_audio_codec.h" #include "es8311_audio_codec.h"
#include "no_audio_codec.h"
#include "display/lcd_display.h" #include "display/lcd_display.h"
#include "application.h" #include "application.h"
#include "button.h" #include "button.h"
@@ -24,9 +25,14 @@
LV_FONT_DECLARE(font_puhui_20_4); LV_FONT_DECLARE(font_puhui_20_4);
LV_FONT_DECLARE(font_awesome_20_4); LV_FONT_DECLARE(font_awesome_20_4);
class XL9555 : public I2cDevice { class XL9555_IN : public I2cDevice {
public: public:
XL9555(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) { XL9555_IN(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) {
WriteReg(0x06, 0x3B);
WriteReg(0x07, 0xFE);
}
void xl9555_cfg(void) {
WriteReg(0x06, 0x1B); WriteReg(0x06, 0x1B);
WriteReg(0x07, 0xFE); WriteReg(0x07, 0xFE);
} }
@@ -48,6 +54,19 @@ public:
WriteReg(0x03, data); WriteReg(0x03, data);
} }
} }
int GetPingState(uint16_t pin) {
uint8_t data;
if (pin <= 0x0080) {
data = ReadReg(0x00);
return (data & (uint8_t)(pin & 0xFF)) ? 1 : 0;
} else {
data = ReadReg(0x01);
return (data & (uint8_t)((pin >> 8) & 0xFF )) ? 1 : 0;
}
return 0;
}
}; };
class atk_dnesp32s3_box : public WifiBoard { class atk_dnesp32s3_box : public WifiBoard {
@@ -56,7 +75,8 @@ private:
i2c_master_dev_handle_t xl9555_handle_; i2c_master_dev_handle_t xl9555_handle_;
Button boot_button_; Button boot_button_;
LcdDisplay* display_; LcdDisplay* display_;
XL9555* xl9555_; XL9555_IN* xl9555_in_;
bool es8311_detected_ = false;
void InitializeI2c() { void InitializeI2c() {
// Initialize I2C peripheral // Initialize I2C peripheral
@@ -75,7 +95,15 @@ private:
ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_bus_cfg, &i2c_bus_)); ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_bus_cfg, &i2c_bus_));
// Initialize XL9555 // Initialize XL9555
xl9555_ = new XL9555(i2c_bus_, 0x20); xl9555_in_ = new XL9555_IN(i2c_bus_, 0x20);
if (xl9555_in_->GetPingState(0x0020) == 1) {
es8311_detected_ = true; /* 音频设备标志位SPK_CTRL_IO为高电平时该标志位置1且判定为ES8311 */
} else {
es8311_detected_ = false; /* 音频设备标志位SPK_CTRL_IO为低电平时该标志位置0且判定为NS4168 */
}
xl9555_in_->xl9555_cfg();
} }
void InitializeATK_ST7789_80_Display() { void InitializeATK_ST7789_80_Display() {
@@ -186,16 +214,41 @@ public:
atk_dnesp32s3_box() : boot_button_(BOOT_BUTTON_GPIO) { atk_dnesp32s3_box() : boot_button_(BOOT_BUTTON_GPIO) {
InitializeI2c(); InitializeI2c();
InitializeATK_ST7789_80_Display(); InitializeATK_ST7789_80_Display();
xl9555_->SetOutputState(5, 1); xl9555_in_->SetOutputState(5, 1);
xl9555_->SetOutputState(7, 1); xl9555_in_->SetOutputState(7, 1);
InitializeButtons(); InitializeButtons();
InitializeIot(); InitializeIot();
} }
virtual AudioCodec* GetAudioCodec() override { virtual AudioCodec* GetAudioCodec() override {
static ATK_NoAudioCodecDuplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, /* 根据探测结果初始化编解码器 */
AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN); if (es8311_detected_) {
return &audio_codec; /* 使用ES8311 驱动 */
static Es8311AudioCodec audio_codec(
i2c_bus_,
I2C_NUM_0,
AUDIO_INPUT_SAMPLE_RATE,
AUDIO_OUTPUT_SAMPLE_RATE,
GPIO_NUM_NC,
AUDIO_I2S_GPIO_BCLK,
AUDIO_I2S_GPIO_WS,
AUDIO_I2S_GPIO_DOUT,
AUDIO_I2S_GPIO_DIN,
GPIO_NUM_NC,
AUDIO_CODEC_ES8311_ADDR,
false);
return &audio_codec;
} else {
static ATK_NoAudioCodecDuplex audio_codec(
AUDIO_INPUT_SAMPLE_RATE,
AUDIO_OUTPUT_SAMPLE_RATE,
AUDIO_I2S_GPIO_BCLK,
AUDIO_I2S_GPIO_WS,
AUDIO_I2S_GPIO_DOUT,
AUDIO_I2S_GPIO_DIN);
return &audio_codec;
}
return NULL;
} }
virtual Display* GetDisplay() override { virtual Display* GetDisplay() override {

View File

@@ -10,6 +10,7 @@
#define AUDIO_I2S_GPIO_BCLK GPIO_NUM_21 #define AUDIO_I2S_GPIO_BCLK GPIO_NUM_21
#define AUDIO_I2S_GPIO_DIN GPIO_NUM_47 #define AUDIO_I2S_GPIO_DIN GPIO_NUM_47
#define AUDIO_I2S_GPIO_DOUT GPIO_NUM_14 #define AUDIO_I2S_GPIO_DOUT GPIO_NUM_14
#define AUDIO_CODEC_ES8311_ADDR ES8311_CODEC_DEFAULT_ADDR
#define BUILTIN_LED_GPIO GPIO_NUM_4 #define BUILTIN_LED_GPIO GPIO_NUM_4
#define BOOT_BUTTON_GPIO GPIO_NUM_0 #define BOOT_BUTTON_GPIO GPIO_NUM_0