diff --git a/main/application.cc b/main/application.cc index e18429b..ca0fca0 100644 --- a/main/application.cc +++ b/main/application.cc @@ -132,7 +132,7 @@ void Application::Start() { auto& board = Board::GetInstance(); board.Initialize(); - audio_device_ = board.CreateAudioDevice(); + audio_device_ = board.GetAudioDevice(); audio_device_->Initialize(); audio_device_->EnableInput(true); audio_device_->EnableOutput(true); diff --git a/main/board.h b/main/board.h index bb33a40..666f53a 100644 --- a/main/board.h +++ b/main/board.h @@ -11,6 +11,14 @@ void* create_board(); class AudioDevice; class Board { +private: + Board(const Board&) = delete; // 禁用拷贝构造函数 + Board& operator=(const Board&) = delete; // 禁用赋值操作 + virtual std::string GetBoardJson() = 0; + +protected: + Board() = default; + public: static Board& GetInstance() { static Board* instance = nullptr; @@ -23,20 +31,12 @@ public: virtual void Initialize() = 0; virtual void StartNetwork() = 0; virtual ~Board() = default; - virtual AudioDevice* CreateAudioDevice() = 0; + virtual AudioDevice* GetAudioDevice() = 0; virtual Http* CreateHttp() = 0; virtual WebSocket* CreateWebSocket() = 0; virtual bool GetNetworkState(std::string& network_name, int& signal_quality, std::string& signal_quality_text) = 0; virtual bool GetBatteryVoltage(int &voltage, bool& charging); virtual std::string GetJson(); - -protected: - Board() = default; - -private: - Board(const Board&) = delete; // 禁用拷贝构造函数 - Board& operator=(const Board&) = delete; // 禁用赋值操作 - virtual std::string GetBoardJson() = 0; }; #define DECLARE_BOARD(BOARD_CLASS_NAME) \ diff --git a/main/boards/bread-compact-ml307/compact_ml307_board.cc b/main/boards/bread-compact-ml307/compact_ml307_board.cc index 19647a5..9fa1f7a 100644 --- a/main/boards/bread-compact-ml307/compact_ml307_board.cc +++ b/main/boards/bread-compact-ml307/compact_ml307_board.cc @@ -16,8 +16,9 @@ public: Ml307Board::Initialize(); } - virtual AudioDevice* CreateAudioDevice() override { - return new AudioDevice(); + virtual AudioDevice* GetAudioDevice() override { + static AudioDevice audio_device; + return &audio_device; } }; diff --git a/main/boards/bread-compact-wifi/compact_wifi_board.cc b/main/boards/bread-compact-wifi/compact_wifi_board.cc index a422493..f53754c 100644 --- a/main/boards/bread-compact-wifi/compact_wifi_board.cc +++ b/main/boards/bread-compact-wifi/compact_wifi_board.cc @@ -16,8 +16,9 @@ public: WifiBoard::Initialize(); } - virtual AudioDevice* CreateAudioDevice() override { - return new AudioDevice(); + virtual AudioDevice* GetAudioDevice() override { + static AudioDevice audio_device; + return &audio_device; } }; diff --git a/main/boards/esp-box-3/esp_box3_board.cc b/main/boards/esp-box-3/esp_box3_board.cc index be488b9..458d91a 100644 --- a/main/boards/esp-box-3/esp_box3_board.cc +++ b/main/boards/esp-box-3/esp_box3_board.cc @@ -12,8 +12,9 @@ public: WifiBoard::Initialize(); } - virtual AudioDevice* CreateAudioDevice() override { - return new BoxAudioDevice(); + virtual AudioDevice* GetAudioDevice() override { + static BoxAudioDevice audio_device; + return &audio_device; } }; diff --git a/main/boards/kevin-box-0/kevin_box_board.cc b/main/boards/kevin-box-0/kevin_box_board.cc index bca0923..b3a025e 100644 --- a/main/boards/kevin-box-0/kevin_box_board.cc +++ b/main/boards/kevin-box-0/kevin_box_board.cc @@ -68,8 +68,9 @@ public: Ml307Board::Initialize(); } - virtual AudioDevice* CreateAudioDevice() override { - return new BoxAudioDevice(); + virtual AudioDevice* GetAudioDevice() override { + static BoxAudioDevice audio_device; + return &audio_device; } virtual bool GetBatteryVoltage(int &voltage, bool& charging) override { diff --git a/main/boards/kevin-box-1/kevin_box_board.cc b/main/boards/kevin-box-1/kevin_box_board.cc index 4b79b43..a2497d1 100644 --- a/main/boards/kevin-box-1/kevin_box_board.cc +++ b/main/boards/kevin-box-1/kevin_box_board.cc @@ -79,8 +79,9 @@ public: Ml307Board::Initialize(); } - virtual AudioDevice* CreateAudioDevice() override { - return new BoxAudioDevice(); + virtual AudioDevice* GetAudioDevice() override { + static BoxAudioDevice audio_device; + return &audio_device; } virtual bool GetBatteryVoltage(int &voltage, bool& charging) override { diff --git a/main/boards/lichuang-dev/lichuang_dev_board.cc b/main/boards/lichuang-dev/lichuang_dev_board.cc index 1c55aa8..cd660ae 100644 --- a/main/boards/lichuang-dev/lichuang_dev_board.cc +++ b/main/boards/lichuang-dev/lichuang_dev_board.cc @@ -12,8 +12,9 @@ public: WifiBoard::Initialize(); } - virtual AudioDevice* CreateAudioDevice() override { - return new BoxAudioDevice(); + virtual AudioDevice* GetAudioDevice() override { + static BoxAudioDevice audio_device; + return &audio_device; } }; diff --git a/main/ml307_board.cc b/main/ml307_board.cc index 08125a3..48c4bbd 100644 --- a/main/ml307_board.cc +++ b/main/ml307_board.cc @@ -74,10 +74,6 @@ void Ml307Board::Initialize() { StartModem(); } -AudioDevice* Ml307Board::CreateAudioDevice() { - return new AudioDevice(); -} - Http* Ml307Board::CreateHttp() { return new Ml307Http(modem_); } diff --git a/main/ml307_board.h b/main/ml307_board.h index bfb5a30..8ccf9d5 100644 --- a/main/ml307_board.h +++ b/main/ml307_board.h @@ -15,7 +15,6 @@ public: Ml307Board(); virtual void Initialize() override; virtual void StartNetwork() override; - virtual AudioDevice* CreateAudioDevice() override; virtual Http* CreateHttp() override; virtual WebSocket* CreateWebSocket() override; virtual bool GetNetworkState(std::string& network_name, int& signal_quality, std::string& signal_quality_text) override;