#ifndef QTHING_H #define QTHING_H #include <string> #include <string> #include <functional> #include "driver/gpio.h" // types enum pull_resistor_t { none, pullup, pulldown }; enum connection_status_t { uninitialized, disconnected, connecting, connected }; typedef std::function<void(std::string)> message_callback_t; typedef std::function<void(connection_status_t)> connection_status_callback_t; typedef std::function<void()> mqtt_connected_callback_t; typedef struct { const std::string& topic; const char* payload; const uint32_t length; const uint32_t offset; const uint32_t total_length; } multipart_message_t; typedef std::function<void(multipart_message_t)> binary_message_callback_t; enum ota_state_t { start, progress, success, error }; typedef struct { const ota_state_t state; const esp_err_t error; const uint32_t bytes_written; const uint32_t bytes_total; } ota_event_t; typedef std::function<void(ota_event_t)> ota_event_callback_t; // core void enable_status_led(gpio_num_t gpio = GPIO_NUM_2, bool negated = false); void show_activity(); // network void enable_wlan(); connection_status_t get_wlan_connection_status(); void add_wlan_connection_status_callback(connection_status_callback_t callback); void add_combined_mqtt_connection_status_callback(connection_status_callback_t handler); void enable_ethernet_lan8720(); connection_status_t get_eth_connection_status(); void add_eth_connection_status_callback(connection_status_callback_t callback); // mqtt void publish_message(const std::string& topic, const std::string& message); void add_message_callback(const std::string& topic, message_callback_t callback); void add_binary_message_callback(const std::string& topic, binary_message_callback_t callback); void add_ota_event_callback(ota_event_callback_t callback); connection_status_t get_mqtt_connection_status(); bool is_mqtt_connected(); void add_mqtt_connection_status_callback(connection_status_callback_t callback); void add_mqtt_connected_callback(mqtt_connected_callback_t callback); // common IO void enable_oled(); void add_digital_input(gpio_num_t gpio_num, pull_resistor_t pull_resistor, std::function<void()> on_falling_edge, std::function<void()> on_rising_edge); void add_digital_input(gpio_num_t gpio_num, pull_resistor_t pull_resistor, std::string topic); void add_button(gpio_num_t gpio, std::function<void()> on_press = NULL, std::function<void()> on_release = NULL); void add_button(gpio_num_t gpio, std::string topic, std::string message); void add_relay(const std::string& topic, gpio_num_t gpio_off, gpio_num_t gpio_on); void add_digital_output(const std::string& topic, gpio_num_t gpio); void enable_lcd(const std::string& topic, uint8_t rs, uint8_t en, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); // LED strips namespace qthing { enum led_strip_types_t { LED_WS2812_V1, LED_WS2812B_V1, LED_WS2812B_V2, LED_WS2812B_V3, LED_WS2813_V1, LED_WS2813_V2, LED_WS2813_V3, LED_SK6812_V1, LED_SK6812W_V1, }; typedef union { struct __attribute__ ((packed)) { uint8_t r, g, b, w; }; uint32_t num; } led_color_t; typedef std::function<led_color_t(uint8_t, uint16_t, led_color_t)> led_color_handler_t; void enable_leds(uint8_t led_strip_fps = 60); void add_ledstrip(gpio_num_t gpio, uint16_t num_leds, qthing::led_strip_types_t led_type); void set_color_handler(led_color_handler_t led_color_handler); void set_led_strip_fps(uint8_t fps); typedef std::function<void()> ntp_callback_t; void enable_ntp(std::string address = "pool.ntp.org", std::string timezone = "CET-1CEST,M3.5.0,M10.5.0/3", qthing::ntp_callback_t callback = NULL); } // utility std::string to_string(float value, int precision = 2); std::string to_string(uint32_t value); #endif