43 lines
1.4 KiB
C++
43 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include "esphome/core/defines.h"
|
|
#ifdef USE_API
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/core/component_iterator.h"
|
|
#include "esphome/core/controller.h"
|
|
namespace esphome::api {
|
|
|
|
class APIConnection;
|
|
|
|
// Macro for generating InitialStateIterator handlers
|
|
// Calls send_*_state
|
|
#define INITIAL_STATE_HANDLER(entity_type, EntityClass) \
|
|
bool InitialStateIterator::on_##entity_type(EntityClass *entity) { /* NOLINT(bugprone-macro-parentheses) */ \
|
|
return this->client_->send_##entity_type##_state(entity); \
|
|
}
|
|
|
|
class InitialStateIterator final : public ComponentIterator {
|
|
public:
|
|
InitialStateIterator(APIConnection *client);
|
|
|
|
// Entity overrides (generated from entity_types.h).
|
|
// ENTITY_TYPE_ entities have no state to send and default to a no-op.
|
|
// ENTITY_CONTROLLER_TYPE_ entities are implemented in subscribe_state.cpp via INITIAL_STATE_HANDLER,
|
|
// except on_event which has no state (defined out-of-line in subscribe_state.cpp).
|
|
// NOLINTBEGIN(bugprone-macro-parentheses)
|
|
#define ENTITY_TYPE_(type, singular, plural, count, upper) \
|
|
bool on_##singular(type *entity) override { return true; }
|
|
#define ENTITY_CONTROLLER_TYPE_(type, singular, plural, count, upper, callback) \
|
|
bool on_##singular(type *entity) override;
|
|
#include "esphome/core/entity_types.h"
|
|
#undef ENTITY_TYPE_
|
|
#undef ENTITY_CONTROLLER_TYPE_
|
|
// NOLINTEND(bugprone-macro-parentheses)
|
|
|
|
protected:
|
|
APIConnection *client_;
|
|
};
|
|
|
|
} // namespace esphome::api
|
|
#endif
|