diff --git a/main/audio_codecs/no_audio_codec.cc b/main/audio_codecs/no_audio_codec.cc index e4354f3b..434232e2 100644 --- a/main/audio_codecs/no_audio_codec.cc +++ b/main/audio_codecs/no_audio_codec.cc @@ -137,7 +137,7 @@ NoAudioCodec::NoAudioCodec(int input_sample_rate, int output_sample_rate, gpio_n output_sample_rate_ = output_sample_rate; // Create a new channel for speaker - i2s_chan_config_t tx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_1, I2S_ROLE_MASTER); + i2s_chan_config_t tx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG((i2s_port_t)1, I2S_ROLE_MASTER); tx_chan_cfg.dma_desc_num = 6; tx_chan_cfg.dma_frame_num = 240; tx_chan_cfg.auto_clear_after_cb = true; @@ -147,7 +147,12 @@ NoAudioCodec::NoAudioCodec(int input_sample_rate, int output_sample_rate, gpio_n i2s_std_config_t tx_std_cfg = { - .clk_cfg = I2S_STD_CLK_DEFAULT_CONFIG((uint32_t)output_sample_rate_), + .clk_cfg = { + .sample_rate_hz = (uint32_t)output_sample_rate_, + .clk_src = I2S_CLK_SRC_DEFAULT, + .ext_clk_freq_hz = 0, + .mclk_multiple = I2S_MCLK_MULTIPLE_256 + }, .slot_cfg = I2S_STD_MSB_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_32BIT, I2S_SLOT_MODE_MONO), .gpio_cfg = { .mclk = I2S_GPIO_UNUSED, @@ -163,9 +168,9 @@ NoAudioCodec::NoAudioCodec(int input_sample_rate, int output_sample_rate, gpio_n }, }; ESP_ERROR_CHECK(i2s_channel_init_std_mode(tx_handle_, &tx_std_cfg)); - +#if SOC_I2S_SUPPORTS_PDM_RX // Create a new channel for MIC in PDM mode - i2s_chan_config_t rx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER); + i2s_chan_config_t rx_chan_cfg = I2S_CHANNEL_DEFAULT_CONFIG((i2s_port_t)0, I2S_ROLE_MASTER); ESP_ERROR_CHECK(i2s_new_channel(&rx_chan_cfg, NULL, &rx_handle_)); i2s_pdm_rx_config_t pdm_rx_cfg = { .clk_cfg = I2S_PDM_RX_CLK_DEFAULT_CONFIG((uint32_t)input_sample_rate_), @@ -181,6 +186,9 @@ NoAudioCodec::NoAudioCodec(int input_sample_rate, int output_sample_rate, gpio_n }, }; ESP_ERROR_CHECK(i2s_channel_init_pdm_rx_mode(rx_handle_, &pdm_rx_cfg)); +#else + ESP_LOGE(TAG, "PDM is not supported"); +#endif ESP_LOGI(TAG, "Simplex channels created"); } diff --git a/main/boards/esp-box-3/esp_box3_board.cc b/main/boards/esp-box-3/esp_box3_board.cc index 919ef8fc..c74106f0 100644 --- a/main/boards/esp-box-3/esp_box3_board.cc +++ b/main/boards/esp-box-3/esp_box3_board.cc @@ -5,6 +5,7 @@ #include "button.h" #include "led.h" #include "config.h" +#include "iot/thing_manager.h" #include #include @@ -39,10 +40,17 @@ class EspBox3Board : public WifiBoard { }); } + // 物联网初始化,添加对 AI 可见设备 + void InitializeIot() { + auto& thing_manager = iot::ThingManager::GetInstance(); + thing_manager.AddThing(iot::CreateThing("Speaker")); + } + public: EspBox3Board() : boot_button_(BOOT_BUTTON_GPIO) { InitializeI2c(); InitializeButtons(); + InitializeIot(); } virtual Led* GetBuiltinLed() override { diff --git a/main/boards/kevin-box-1/kevin_box_board.cc b/main/boards/kevin-box-1/kevin_box_board.cc index d37938ea..86d9a44c 100644 --- a/main/boards/kevin-box-1/kevin_box_board.cc +++ b/main/boards/kevin-box-1/kevin_box_board.cc @@ -5,13 +5,14 @@ #include "button.h" #include "led.h" #include "config.h" +#include "iot/thing_manager.h" #include #include #include #include -static const char *TAG = "KevinBoxBoard"; +#define TAG "KevinBoxBoard" class KevinBoxBoard : public Ml307Board { private: @@ -95,8 +96,7 @@ class KevinBoxBoard : public Ml307Board { }); volume_up_button_.OnLongPress([this]() { - auto codec = GetAudioCodec(); - codec->SetOutputVolume(100); + GetAudioCodec()->SetOutputVolume(100); GetDisplay()->ShowNotification("最大音量"); }); @@ -111,12 +111,17 @@ class KevinBoxBoard : public Ml307Board { }); volume_down_button_.OnLongPress([this]() { - auto codec = GetAudioCodec(); - codec->SetOutputVolume(0); + GetAudioCodec()->SetOutputVolume(0); GetDisplay()->ShowNotification("已静音"); }); } + // 物联网初始化,添加对 AI 可见设备 + void InitializeIot() { + auto& thing_manager = iot::ThingManager::GetInstance(); + thing_manager.AddThing(iot::CreateThing("Speaker")); + } + public: KevinBoxBoard() : Ml307Board(ML307_TX_PIN, ML307_RX_PIN, 4096), boot_button_(BOOT_BUTTON_GPIO), @@ -128,6 +133,7 @@ class KevinBoxBoard : public Ml307Board { Enable4GModule(); InitializeButtons(); + InitializeIot(); } virtual Led* GetBuiltinLed() override { diff --git a/main/boards/kevin-box-2/kevin_box_board.cc b/main/boards/kevin-box-2/kevin_box_board.cc index e5124c83..bddb0bf8 100644 --- a/main/boards/kevin-box-2/kevin_box_board.cc +++ b/main/boards/kevin-box-2/kevin_box_board.cc @@ -6,6 +6,7 @@ #include "led.h" #include "config.h" #include "axp2101.h" +#include "iot/thing_manager.h" #include #include @@ -13,7 +14,7 @@ #include #include -static const char *TAG = "KevinBoxBoard"; +#define TAG "KevinBoxBoard" class KevinBoxBoard : public Ml307Board { private: @@ -136,8 +137,7 @@ class KevinBoxBoard : public Ml307Board { }); volume_up_button_.OnLongPress([this]() { - auto codec = GetAudioCodec(); - codec->SetOutputVolume(100); + GetAudioCodec()->SetOutputVolume(100); GetDisplay()->ShowNotification("最大音量"); }); @@ -152,12 +152,17 @@ class KevinBoxBoard : public Ml307Board { }); volume_down_button_.OnLongPress([this]() { - auto codec = GetAudioCodec(); - codec->SetOutputVolume(0); + GetAudioCodec()->SetOutputVolume(0); GetDisplay()->ShowNotification("已静音"); }); } + // 物联网初始化,添加对 AI 可见设备 + void InitializeIot() { + auto& thing_manager = iot::ThingManager::GetInstance(); + thing_manager.AddThing(iot::CreateThing("Speaker")); + } + public: KevinBoxBoard() : Ml307Board(ML307_TX_PIN, ML307_RX_PIN, 4096), boot_button_(BOOT_BUTTON_GPIO), @@ -172,6 +177,7 @@ class KevinBoxBoard : public Ml307Board { InitializeButtons(); InitializePowerSaveTimer(); + InitializeIot(); } virtual Led* GetBuiltinLed() override { diff --git a/main/boards/kevin-c3/kevin_box_board.cc b/main/boards/kevin-c3/kevin_box_board.cc index b0fd4dac..15e21d6e 100644 --- a/main/boards/kevin-c3/kevin_box_board.cc +++ b/main/boards/kevin-c3/kevin_box_board.cc @@ -4,6 +4,7 @@ #include "button.h" #include "led.h" #include "config.h" +#include "iot/thing_manager.h" #include #include @@ -48,10 +49,17 @@ class KevinBoxBoard : public WifiBoard { }); } + // 物联网初始化,添加对 AI 可见设备 + void InitializeIot() { + auto& thing_manager = iot::ThingManager::GetInstance(); + thing_manager.AddThing(iot::CreateThing("Speaker")); + } + public: KevinBoxBoard() : boot_button_(BOOT_BUTTON_GPIO) { InitializeCodecI2c(); InitializeButtons(); + InitializeIot(); } virtual Led* GetBuiltinLed() override { diff --git a/main/boards/lichuang-dev/lichuang_dev_board.cc b/main/boards/lichuang-dev/lichuang_dev_board.cc index 915567af..e2799039 100644 --- a/main/boards/lichuang-dev/lichuang_dev_board.cc +++ b/main/boards/lichuang-dev/lichuang_dev_board.cc @@ -6,6 +6,7 @@ #include "led.h" #include "config.h" #include "i2c_device.h" +#include "iot/thing_manager.h" #include #include @@ -119,12 +120,19 @@ class LichuangDevBoard : public WifiBoard { DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } + // 物联网初始化,添加对 AI 可见设备 + void InitializeIot() { + auto& thing_manager = iot::ThingManager::GetInstance(); + thing_manager.AddThing(iot::CreateThing("Speaker")); + } + public: LichuangDevBoard() : boot_button_(BOOT_BUTTON_GPIO) { InitializeI2c(); InitializeSpi(); InitializeSt7789Display(); InitializeButtons(); + InitializeIot(); } virtual Led* GetBuiltinLed() override {