dual_network_board.cc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "dual_network_board.h"
  2. #include "application.h"
  3. #include "display.h"
  4. #include "assets/lang_config.h"
  5. #include "settings.h"
  6. #include <esp_log.h>
  7. static const char *TAG = "DualNetworkBoard";
  8. 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)
  9. : Board(),
  10. ml307_tx_pin_(ml307_tx_pin),
  11. ml307_rx_pin_(ml307_rx_pin),
  12. ml307_dtr_pin_(ml307_dtr_pin) {
  13. // 从Settings加载网络类型
  14. network_type_ = LoadNetworkTypeFromSettings(default_net_type);
  15. // 只初始化当前网络类型对应的板卡
  16. InitializeCurrentBoard();
  17. }
  18. NetworkType DualNetworkBoard::LoadNetworkTypeFromSettings(int32_t default_net_type) {
  19. Settings settings("network", true);
  20. int network_type = settings.GetInt("type", default_net_type); // 默认使用ML307 (1)
  21. return network_type == 1 ? NetworkType::ML307 : NetworkType::WIFI;
  22. }
  23. void DualNetworkBoard::SaveNetworkTypeToSettings(NetworkType type) {
  24. Settings settings("network", true);
  25. int network_type = (type == NetworkType::ML307) ? 1 : 0;
  26. settings.SetInt("type", network_type);
  27. }
  28. void DualNetworkBoard::InitializeCurrentBoard() {
  29. if (network_type_ == NetworkType::ML307) {
  30. ESP_LOGI(TAG, "Initialize ML307 board");
  31. current_board_ = std::make_unique<Ml307Board>(ml307_tx_pin_, ml307_rx_pin_, ml307_dtr_pin_);
  32. } else {
  33. ESP_LOGI(TAG, "Initialize WiFi board");
  34. current_board_ = std::make_unique<WifiBoard>();
  35. }
  36. }
  37. void DualNetworkBoard::SwitchNetworkType() {
  38. auto display = GetDisplay();
  39. if (network_type_ == NetworkType::WIFI) {
  40. SaveNetworkTypeToSettings(NetworkType::ML307);
  41. display->ShowNotification(Lang::Strings::SWITCH_TO_4G_NETWORK);
  42. } else {
  43. SaveNetworkTypeToSettings(NetworkType::WIFI);
  44. display->ShowNotification(Lang::Strings::SWITCH_TO_WIFI_NETWORK);
  45. }
  46. vTaskDelay(pdMS_TO_TICKS(1000));
  47. auto& app = Application::GetInstance();
  48. app.Reboot();
  49. }
  50. std::string DualNetworkBoard::GetBoardType() {
  51. return current_board_->GetBoardType();
  52. }
  53. void DualNetworkBoard::StartNetwork() {
  54. auto display = Board::GetInstance().GetDisplay();
  55. if (network_type_ == NetworkType::WIFI) {
  56. display->SetStatus(Lang::Strings::CONNECTING);
  57. } else {
  58. display->SetStatus(Lang::Strings::DETECTING_MODULE);
  59. }
  60. current_board_->StartNetwork();
  61. }
  62. NetworkInterface* DualNetworkBoard::GetNetwork() {
  63. return current_board_->GetNetwork();
  64. }
  65. const char* DualNetworkBoard::GetNetworkStateIcon() {
  66. return current_board_->GetNetworkStateIcon();
  67. }
  68. void DualNetworkBoard::SetPowerSaveMode(bool enabled) {
  69. current_board_->SetPowerSaveMode(enabled);
  70. }
  71. std::string DualNetworkBoard::GetBoardJson() {
  72. return current_board_->GetBoardJson();
  73. }
  74. std::string DualNetworkBoard::GetDeviceStatusJson() {
  75. return current_board_->GetDeviceStatusJson();
  76. }