diff --git a/main/boards/bread-compact-esp32-lcd/config.h b/main/boards/bread-compact-esp32-lcd/config.h index 2068a2d6..d9a21486 100644 --- a/main/boards/bread-compact-esp32-lcd/config.h +++ b/main/boards/bread-compact-esp32-lcd/config.h @@ -34,6 +34,8 @@ #define ASR_BUTTON_GPIO GPIO_NUM_19 #define BUILTIN_LED_GPIO GPIO_NUM_2 +#define ML307_RX_PIN GPIO_NUM_16 +#define ML307_TX_PIN GPIO_NUM_17 #ifdef CONFIG_LCD_ST7789_240X240_7PIN #define DISPLAY_BACKLIGHT_PIN GPIO_NUM_22 diff --git a/main/boards/bread-compact-esp32-lcd/esp32_bread_board_lcd.cc b/main/boards/bread-compact-esp32-lcd/esp32_bread_board_lcd.cc index f1c53e3a..5574786c 100644 --- a/main/boards/bread-compact-esp32-lcd/esp32_bread_board_lcd.cc +++ b/main/boards/bread-compact-esp32-lcd/esp32_bread_board_lcd.cc @@ -1,4 +1,4 @@ -#include "wifi_board.h" +#include "dual_network_board.h" #include "codecs/no_audio_codec.h" #include "display/lcd_display.h" #include "system_reset.h" @@ -58,7 +58,7 @@ static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = { #define TAG "ESP32-LCD-MarsbearSupport" -class CompactWifiBoardLCD : public WifiBoard { +class CompactWifiBoardLCD : public DualNetworkBoard { private: Button boot_button_; Button touch_button_; @@ -137,13 +137,25 @@ private: boot_button_.OnClick([this]() { auto& app = Application::GetInstance(); - if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { - ResetWifiConfiguration(); + if (GetNetworkType() == NetworkType::WIFI) { + if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { + // cast to WifiBoard + auto& wifi_board = static_cast(GetCurrentBoard()); + wifi_board.ResetWifiConfiguration(); + } } gpio_set_level(BUILTIN_LED_GPIO, 1); app.ToggleChatState(); }); + + boot_button_.OnDoubleClick([this]() { + auto& app = Application::GetInstance(); + if (app.GetDeviceState() == kDeviceStateStarting || app.GetDeviceState() == kDeviceStateWifiConfiguring) { + SwitchNetworkType(); + } + }); + asr_button_.OnClick([this]() { std::string wake_word="你好小智"; Application::GetInstance().WakeWordInvoke(wake_word); @@ -163,6 +175,7 @@ private: public: CompactWifiBoardLCD() : + DualNetworkBoard(ML307_TX_PIN, ML307_RX_PIN), boot_button_(BOOT_BUTTON_GPIO), touch_button_(TOUCH_BUTTON_GPIO), asr_button_(ASR_BUTTON_GPIO) { InitializeSpi(); InitializeLcdDisplay(); diff --git a/main/boards/bread-compact-esp32/config.h b/main/boards/bread-compact-esp32/config.h index 3ff28ea8..0d5ab75d 100644 --- a/main/boards/bread-compact-esp32/config.h +++ b/main/boards/bread-compact-esp32/config.h @@ -33,6 +33,9 @@ #define ASR_BUTTON_GPIO GPIO_NUM_19 #define BUILTIN_LED_GPIO GPIO_NUM_2 +#define ML307_RX_PIN GPIO_NUM_16 +#define ML307_TX_PIN GPIO_NUM_17 + #define DISPLAY_SDA_PIN GPIO_NUM_4 #define DISPLAY_SCL_PIN GPIO_NUM_15 #define DISPLAY_WIDTH 128 diff --git a/main/boards/bread-compact-esp32/esp32_bread_board.cc b/main/boards/bread-compact-esp32/esp32_bread_board.cc index 7c32ce4b..31c08c86 100644 --- a/main/boards/bread-compact-esp32/esp32_bread_board.cc +++ b/main/boards/bread-compact-esp32/esp32_bread_board.cc @@ -1,4 +1,4 @@ -#include "wifi_board.h" +#include "dual_network_board.h" #include "codecs/no_audio_codec.h" #include "system_reset.h" #include "application.h" @@ -17,7 +17,7 @@ #define TAG "ESP32-MarsbearSupport" -class CompactWifiBoard : public WifiBoard { +class CompactWifiBoard : public DualNetworkBoard { private: Button boot_button_; Button touch_button_; @@ -105,13 +105,25 @@ private: boot_button_.OnClick([this]() { auto& app = Application::GetInstance(); - if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { - ResetWifiConfiguration(); + if (GetNetworkType() == NetworkType::WIFI) { + if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { + // cast to WifiBoard + auto& wifi_board = static_cast(GetCurrentBoard()); + wifi_board.ResetWifiConfiguration(); + } } gpio_set_level(BUILTIN_LED_GPIO, 1); app.ToggleChatState(); }); + + boot_button_.OnDoubleClick([this]() { + auto& app = Application::GetInstance(); + if (app.GetDeviceState() == kDeviceStateStarting || app.GetDeviceState() == kDeviceStateWifiConfiguring) { + SwitchNetworkType(); + } + }); + asr_button_.OnClick([this]() { std::string wake_word="你好小智"; Application::GetInstance().WakeWordInvoke(wake_word); @@ -133,7 +145,7 @@ private: } public: - CompactWifiBoard() : boot_button_(BOOT_BUTTON_GPIO), touch_button_(TOUCH_BUTTON_GPIO), asr_button_(ASR_BUTTON_GPIO) + CompactWifiBoard() : DualNetworkBoard(ML307_TX_PIN, ML307_RX_PIN), boot_button_(BOOT_BUTTON_GPIO), touch_button_(TOUCH_BUTTON_GPIO), asr_button_(ASR_BUTTON_GPIO) { InitializeDisplayI2c(); InitializeSsd1306Display();