123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include "dual_network_board.h"
- #include "application.h"
- #include "display.h"
- #include "assets/lang_config.h"
- #include "settings.h"
- #include <esp_log.h>
- 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<Ml307Board>(ml307_tx_pin_, ml307_rx_pin_, ml307_dtr_pin_);
- } else {
- ESP_LOGI(TAG, "Initialize WiFi board");
- current_board_ = std::make_unique<WifiBoard>();
- }
- }
- 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();
- }
|