dual_network_board.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #ifndef DUAL_NETWORK_BOARD_H
  2. #define DUAL_NETWORK_BOARD_H
  3. #include "board.h"
  4. #include "wifi_board.h"
  5. #include "ml307_board.h"
  6. #include <memory>
  7. //enum NetworkType
  8. enum class NetworkType {
  9. WIFI,
  10. ML307
  11. };
  12. // 双网络板卡类,可以在WiFi和ML307之间切换
  13. class DualNetworkBoard : public Board {
  14. private:
  15. // 使用基类指针存储当前活动的板卡
  16. std::unique_ptr<Board> current_board_;
  17. NetworkType network_type_ = NetworkType::ML307; // Default to ML307
  18. // ML307的引脚配置
  19. gpio_num_t ml307_tx_pin_;
  20. gpio_num_t ml307_rx_pin_;
  21. gpio_num_t ml307_dtr_pin_;
  22. // 从Settings加载网络类型
  23. NetworkType LoadNetworkTypeFromSettings(int32_t default_net_type);
  24. // 保存网络类型到Settings
  25. void SaveNetworkTypeToSettings(NetworkType type);
  26. // 初始化当前网络类型对应的板卡
  27. void InitializeCurrentBoard();
  28. public:
  29. DualNetworkBoard(gpio_num_t ml307_tx_pin, gpio_num_t ml307_rx_pin, gpio_num_t ml307_dtr_pin = GPIO_NUM_NC, int32_t default_net_type = 1);
  30. virtual ~DualNetworkBoard() = default;
  31. // 切换网络类型
  32. void SwitchNetworkType();
  33. // 获取当前网络类型
  34. NetworkType GetNetworkType() const { return network_type_; }
  35. // 获取当前活动的板卡引用
  36. Board& GetCurrentBoard() const { return *current_board_; }
  37. // 重写Board接口
  38. virtual std::string GetBoardType() override;
  39. virtual void StartNetwork() override;
  40. virtual NetworkInterface* GetNetwork() override;
  41. virtual const char* GetNetworkStateIcon() override;
  42. virtual void SetPowerSaveMode(bool enabled) override;
  43. virtual std::string GetBoardJson() override;
  44. virtual std::string GetDeviceStatusJson() override;
  45. };
  46. #endif // DUAL_NETWORK_BOARD_H