#include "dual_network_board.h" #include "application.h" #include "display.h" #include "assets/lang_config.h" #include "settings.h" #include static const char *TAG = "DualNetworkBoard"; DualNetworkBoard::DualNetworkBoard(gpio_num_t ml307_tx_pin, gpio_num_t ml307_rx_pin, gpio_num_t ml307_dtr_pin, int32_t default_net_type) : Board(), ml307_tx_pin_(ml307_tx_pin), ml307_rx_pin_(ml307_rx_pin), ml307_dtr_pin_(ml307_dtr_pin) { // 从Settings加载网络类型 network_type_ = LoadNetworkTypeFromSettings(default_net_type); // 只初始化当前网络类型对应的板卡 InitializeCurrentBoard(); } NetworkType DualNetworkBoard::LoadNetworkTypeFromSettings(int32_t default_net_type) { Settings settings("network", true); int network_type = settings.GetInt("type", default_net_type); // 默认使用ML307 (1) return network_type == 1 ? NetworkType::ML307 : NetworkType::WIFI; } void DualNetworkBoard::SaveNetworkTypeToSettings(NetworkType type) { Settings settings("network", true); int network_type = (type == NetworkType::ML307) ? 1 : 0; settings.SetInt("type", network_type); } void DualNetworkBoard::InitializeCurrentBoard() { if (network_type_ == NetworkType::ML307) { ESP_LOGI(TAG, "Initialize ML307 board"); current_board_ = std::make_unique(ml307_tx_pin_, ml307_rx_pin_, ml307_dtr_pin_); } else { ESP_LOGI(TAG, "Initialize WiFi board"); current_board_ = std::make_unique(); } } void DualNetworkBoard::SwitchNetworkType() { auto display = GetDisplay(); if (network_type_ == NetworkType::WIFI) { SaveNetworkTypeToSettings(NetworkType::ML307); display->ShowNotification(Lang::Strings::SWITCH_TO_4G_NETWORK); } else { SaveNetworkTypeToSettings(NetworkType::WIFI); display->ShowNotification(Lang::Strings::SWITCH_TO_WIFI_NETWORK); } vTaskDelay(pdMS_TO_TICKS(1000)); auto& app = Application::GetInstance(); app.Reboot(); } std::string DualNetworkBoard::GetBoardType() { return current_board_->GetBoardType(); } void DualNetworkBoard::StartNetwork() { auto display = Board::GetInstance().GetDisplay(); if (network_type_ == NetworkType::WIFI) { display->SetStatus(Lang::Strings::CONNECTING); } else { display->SetStatus(Lang::Strings::DETECTING_MODULE); } current_board_->StartNetwork(); } NetworkInterface* DualNetworkBoard::GetNetwork() { return current_board_->GetNetwork(); } const char* DualNetworkBoard::GetNetworkStateIcon() { return current_board_->GetNetworkStateIcon(); } void DualNetworkBoard::SetPowerSaveMode(bool enabled) { current_board_->SetPowerSaveMode(enabled); } std::string DualNetworkBoard::GetBoardJson() { return current_board_->GetBoardJson(); } std::string DualNetworkBoard::GetDeviceStatusJson() { return current_board_->GetDeviceStatusJson(); }