device_state_event.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef _DEVICE_STATE_EVENT_H_
  2. #define _DEVICE_STATE_EVENT_H_
  3. #include <esp_event.h>
  4. #include <functional>
  5. #include <vector>
  6. #include <mutex>
  7. #include "device_state.h"
  8. ESP_EVENT_DECLARE_BASE(XIAOZHI_STATE_EVENTS);
  9. enum {
  10. XIAOZHI_STATE_CHANGED_EVENT,
  11. };
  12. struct device_state_event_data_t {
  13. DeviceState previous_state;
  14. DeviceState current_state;
  15. };
  16. class DeviceStateEventManager {
  17. public:
  18. static DeviceStateEventManager& GetInstance();
  19. DeviceStateEventManager(const DeviceStateEventManager&) = delete;
  20. DeviceStateEventManager& operator=(const DeviceStateEventManager&) = delete;
  21. void RegisterStateChangeCallback(std::function<void(DeviceState, DeviceState)> callback);
  22. void PostStateChangeEvent(DeviceState previous_state, DeviceState current_state);
  23. std::vector<std::function<void(DeviceState, DeviceState)>> GetCallbacks();
  24. private:
  25. DeviceStateEventManager();
  26. ~DeviceStateEventManager();
  27. std::vector<std::function<void(DeviceState, DeviceState)>> callbacks_;
  28. std::mutex mutex_;
  29. };
  30. #endif // _DEVICE_STATE_EVENT_H_