Add support for std::function on the ESP devices

This commit is contained in:
Konstantin Burkalev
2024-12-29 23:12:19 +02:00
parent 1d333ab229
commit 67ff1c84b8
10 changed files with 83 additions and 0 deletions
+5
View File
@@ -5,7 +5,12 @@
#ifndef EX_ARDUINOHA_BUTTON
#if defined(ESP32) || defined(ESP8266)
#define HABUTTON_CALLBACK(name) std::function<void(HAButton* sender)> name
#else
#define HABUTTON_CALLBACK(name) void (*name)(HAButton* sender)
#endif
/**
* HAButton represents a button that's displayed in the Home Assistant panel and
+4
View File
@@ -5,7 +5,11 @@
#ifndef EX_ARDUINOHA_COVER
#if defined(ESP32) || defined(ESP8266)
#define HACOVER_CALLBACK(name) std::function<void(CoverCommand cmd, HACover* sender)> name
#else
#define HACOVER_CALLBACK(name) void (*name)(CoverCommand cmd, HACover* sender)
#endif
/**
* HACover allows to control a cover (such as blinds, a roller shutter or a garage door).
+9
View File
@@ -6,8 +6,17 @@
#ifndef EX_ARDUINOHA_FAN
#if defined(ESP32) || defined(ESP8266)
#define HAFAN_STATE_CALLBACK(name) std::function<void(bool state, HAFan* sender)> name
#else
#define HAFAN_STATE_CALLBACK(name) void (*name)(bool state, HAFan* sender)
#endif
#if defined(ESP32) || defined(ESP8266)
#define HAFAN_SPEED_CALLBACK(name) std::function<void(uint16_t speed, HAFan* sender)> name
#else
#define HAFAN_SPEED_CALLBACK(name) void (*name)(uint16_t speed, HAFan* sender)
#endif
/**
* HAFan allows adding a controllable fan in the Home Assistant panel.
+24
View File
@@ -26,11 +26,35 @@
inline void setCurrentTargetTemperature(const type temperature) \
{ setCurrentTargetTemperature(HANumeric(temperature, _precision)); }
#if defined(ESP32) || defined(ESP8266)
#define HAHVAC_CALLBACK_BOOL(name) std::function<void(bool state, HAHVAC* sender)> name
#else
#define HAHVAC_CALLBACK_BOOL(name) void (*name)(bool state, HAHVAC* sender)
#endif
#if defined(ESP32) || defined(ESP8266)
#define HAHVAC_CALLBACK_TARGET_TEMP(name) std::function<void(HANumeric temperature, HAHVAC* sender)> name
#else
#define HAHVAC_CALLBACK_TARGET_TEMP(name) void (*name)(HANumeric temperature, HAHVAC* sender)
#endif
#if defined(ESP32) || defined(ESP8266)
#define HAHVAC_CALLBACK_FAN_MODE(name) std::function<void(FanMode mode, HAHVAC* sender)> name
#else
#define HAHVAC_CALLBACK_FAN_MODE(name) void (*name)(FanMode mode, HAHVAC* sender)
#endif
#if defined(ESP32) || defined(ESP8266)
#define HAHVAC_CALLBACK_SWING_MODE(name) std::function<void(SwingMode mode, HAHVAC* sender)> name
#else
#define HAHVAC_CALLBACK_SWING_MODE(name) void (*name)(SwingMode mode, HAHVAC* sender)
#endif
#if defined(ESP32) || defined(ESP8266)
#define HAHVAC_CALLBACK_MODE(name) std::function<void(Mode mode, HAHVAC* sender)> name
#else
#define HAHVAC_CALLBACK_MODE(name) void (*name)(Mode mode, HAHVAC* sender)
#endif
class HASerializerArray;
+19
View File
@@ -6,10 +6,29 @@
#ifndef EX_ARDUINOHA_LIGHT
#if defined(ESP32) || defined(ESP8266)
#define HALIGHT_STATE_CALLBACK(name) std::function<void(bool state, HALight* sender)> name
#else
#define HALIGHT_STATE_CALLBACK(name) void (*name)(bool state, HALight* sender)
#endif
#if defined(ESP32) || defined(ESP8266)
#define HALIGHT_BRIGHTNESS_CALLBACK(name) std::function<void(uint8_t brightness, HALight* sender)> name
#else
#define HALIGHT_BRIGHTNESS_CALLBACK(name) void (*name)(uint8_t brightness, HALight* sender)
#endif
#if defined(ESP32) || defined(ESP8266)
#define HALIGHT_COLOR_TEMP_CALLBACK(name) std::function<void(uint16_t temperature, HALight* sender)> name
#else
#define HALIGHT_COLOR_TEMP_CALLBACK(name) void (*name)(uint16_t temperature, HALight* sender)
#endif
#if defined(ESP32) || defined(ESP8266)
#define HALIGHT_RGB_COLOR_CALLBACK(name) std::function<void(HALight::RGBColor color, HALight* sender)> name
#else
#define HALIGHT_RGB_COLOR_CALLBACK(name) void (*name)(HALight::RGBColor color, HALight* sender)
#endif
/**
* HALight allows adding a controllable light in the Home Assistant panel.
+4
View File
@@ -5,7 +5,11 @@
#ifndef EX_ARDUINOHA_LOCK
#if defined(ESP32) || defined(ESP8266)
#define HALOCK_CALLBACK(name) std::function<void(LockCommand command, HALock* sender)> name
#else
#define HALOCK_CALLBACK(name) void (*name)(LockCommand command, HALock* sender)
#endif
/**
* HALock allows to implement a custom lock (for example: door lock)
+4
View File
@@ -16,7 +16,11 @@
inline void setCurrentState(const type state) \
{ setCurrentState(HANumeric(state, _precision)); }
#if defined(ESP32) || defined(ESP8266)
#define HANUMBER_CALLBACK(name) std::function<void(HANumeric number, HANumber* sender)> name
#else
#define HANUMBER_CALLBACK(name) void (*name)(HANumeric number, HANumber* sender)
#endif
/**
* HANumber adds a slider or a box in the Home Assistant panel
+4
View File
@@ -5,7 +5,11 @@
#ifndef EX_ARDUINOHA_SCENE
#if defined(ESP32) || defined(ESP8266)
#define HASCENE_CALLBACK(name) std::function<void(HAScene* sender)> name
#else
#define HASCENE_CALLBACK(name) void (*name)(HAScene* sender)
#endif
/**
* HAScene adds a new scene to the Home Assistant that triggers your callback once activated.
+4
View File
@@ -7,7 +7,11 @@
class HASerializerArray;
#if defined(ESP32) || defined(ESP8266)
#define HASELECT_CALLBACK(name) std::function<void(int8_t index, HASelect* sender)> name
#else
#define HASELECT_CALLBACK(name) void (*name)(int8_t index, HASelect* sender)
#endif
/**
* HASelect adds a dropdown with options in the Home Assistant panel.
+6
View File
@@ -5,7 +5,13 @@
#ifndef EX_ARDUINOHA_SWITCH
#if defined(ESP32) || defined(ESP8266)
#define HASWITCH_CALLBACK(name) std::function<void(bool state, HASwitch* sender)> name
#else
#define HASWITCH_CALLBACK(name) void (*name)(bool state, HASwitch* sender)
#endif
/**
* HASwitch allows to display on/off switch in the HA panel and receive commands on your device.