Skip to content
Snippets Groups Projects
Commit e853277b authored by fxk8y's avatar fxk8y :spider:
Browse files

merging master

parents cda2e64c 025958d0
No related branches found
No related tags found
1 merge request!1Feature/mqtt ota
#include <qthing.h>
#include "event.h"
string_callback_t log_oled_handler = NULL;
......@@ -10,22 +11,38 @@ void log_oled(const std::string& message) {
}
}
uint8_t_callback_t wlan_connection_status_handler = NULL;
void set_wlan_connection_status_handler(uint8_t_callback_t handler) {
wlan_connection_status_handler = handler;
connection_status_callback_t wlan_connection_status_handler = NULL;
void add_wlan_connection_status_handler(connection_status_callback_t handler) {
if (wlan_connection_status_handler == NULL) {
wlan_connection_status_handler = handler;
}
else {
wlan_connection_status_handler = [wlan_connection_status_handler, handler](connection_status_t status){
wlan_connection_status_handler(status);
handler(status);
};
}
}
void update_wlan_connection_status(uint8_t status) {
void update_wlan_connection_status(connection_status_t status) {
if (wlan_connection_status_handler != NULL) {
wlan_connection_status_handler(status);
}
}
uint8_t_callback_t mqtt_connection_status_handler = NULL;
void set_mqtt_connection_status_handler(uint8_t_callback_t handler) {
mqtt_connection_status_handler = handler;
connection_status_callback_t mqtt_connection_status_handler = NULL;
void add_mqtt_connection_status_handler(connection_status_callback_t handler) {
if (mqtt_connection_status_handler == NULL) {
mqtt_connection_status_handler = handler;
}
else {
mqtt_connection_status_handler = [mqtt_connection_status_handler, handler](connection_status_t status){
mqtt_connection_status_handler(status);
handler(status);
};
}
}
void update_mqtt_connection_status(uint8_t status) {
void update_mqtt_connection_status(connection_status_t status) {
if (mqtt_connection_status_handler != NULL) {
mqtt_connection_status_handler(status);
}
}
\ No newline at end of file
}
#ifndef EVENT_H
#define EVENT_H
#include <qthing.h>
#include <string>
#include <functional>
typedef std::function<void(const std::string&)> string_callback_t;
typedef std::function<void(uint8_t)> uint8_t_callback_t;
void set_oled_log_handler(string_callback_t handler);
void log_oled(const std::string& message);
void set_wlan_connection_status_handler(uint8_t_callback_t handler);
void update_wlan_connection_status(uint8_t status);
void update_wlan_connection_status(connection_status_t status);
void set_mqtt_connection_status_handler(uint8_t_callback_t handler);
void update_mqtt_connection_status(uint8_t status);
void update_mqtt_connection_status(connection_status_t status);
#endif
\ No newline at end of file
#endif
......@@ -91,13 +91,13 @@ esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event)
}
result = esp_mqtt_client_publish(client, STATUS_TOPIC, STATUS_MESSAGE_ONLINE, strlen(STATUS_MESSAGE_ONLINE), 0, 1);
ESP_LOGI(TAG, "Online status published (result %i)", result);
update_mqtt_connection_status(1);
update_mqtt_connection_status(connected);
mqtt_connected = true;
break;
case MQTT_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
mqtt_connected = false;
update_mqtt_connection_status(3);
update_mqtt_connection_status(disconnected);
break;
case MQTT_EVENT_SUBSCRIBED:
......@@ -224,7 +224,7 @@ void mqtt_client_start() {
add_message_callback(FIRMWARE_COMMAND_TOPIC, handle_firmware_command);
add_binary_message_callback(OTA_FIRMWARE_TOPIC, handle_ota_message);
mqtt_started = true;
update_mqtt_connection_status(2);
update_mqtt_connection_status(connecting);
client = mqtt_client_start_c(mqtt_event_handler);
}
}
......@@ -17,7 +17,7 @@
#define TAG "qthing-network"
bool connected = false;
bool clients_started = false;
void start_network_clients_task(void* arg) {
mqtt_client_start();
......@@ -30,7 +30,7 @@ static esp_err_t event_handler(void *ctx, system_event_t *event)
case SYSTEM_EVENT_STA_START:
ESP_LOGI(TAG, "SYSTEM_EVENT_STA_START");
log_oled("WLAN connecting");
update_wlan_connection_status(2);
update_wlan_connection_status(connecting);
ESP_ERROR_CHECK(tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, DEVICE_NAME));
ESP_ERROR_CHECK(esp_wifi_connect());
break;
......@@ -38,9 +38,9 @@ static esp_err_t event_handler(void *ctx, system_event_t *event)
ESP_LOGI(TAG, "SYSTEM_EVENT_STA_GOT_IP");
ESP_LOGI(TAG, "got ip:%s\n", ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));
log_oled("WLAN connected");
update_wlan_connection_status(1);
if (!connected) {
connected = true;
update_wlan_connection_status(connected);
if (!clients_started) {
clients_started = true;
set_status_led(0);
xTaskCreate(start_network_clients_task, "start_network_clients_task", 4096, NULL, 7, NULL);
}
......@@ -48,7 +48,7 @@ static esp_err_t event_handler(void *ctx, system_event_t *event)
case SYSTEM_EVENT_STA_DISCONNECTED:
ESP_LOGI(TAG, "SYSTEM_EVENT_STA_DISCONNECTED");
log_oled("WLAN disconnected");
update_wlan_connection_status(3);
update_wlan_connection_status(disconnected);
ESP_ERROR_CHECK(esp_wifi_connect());
break;
default:
......@@ -61,8 +61,8 @@ void enable_wlan() {
set_status_led(1);
log_oled("WLAN initializing");
update_wlan_connection_status(2);
update_wlan_connection_status(connecting);
// Initialize NVS
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES) {
......@@ -84,7 +84,7 @@ void enable_wlan() {
#endif
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
wifi_config_t wifi_config = {
......
#include <qthing.h>
#include "oled.h"
#include "oled_symbols.h"
#include "event.h"
......@@ -12,27 +14,25 @@ uint8_t mqtt_status = 0;
std::string oled_log = "";
void draw_network_status(uint8_t x, uint8_t y) {
// wlan_status == 0: off
if (wlan_status == 1) {
if (wlan_status == connected) {
display.drawFastImage(x, y, 10, 8, wlan_connected_symbol);
}
else if (wlan_status == 2) {
else if (wlan_status == connecting) {
display.drawFastImage(x, y, 10, 8, wlan_connecting_symbol);
}
else if (wlan_status == 3) {
else if (wlan_status == disconnected) {
display.drawFastImage(x, y, 10, 8, wlan_disconnected_symbol);
}
}
void draw_mqtt_status(uint8_t x, uint8_t y) {
// mqtt_status == 0: off
if (mqtt_status == 1) {
if (mqtt_status == connected) {
display.drawFastImage(x, y, 8, 8, mqtt_connected_symbol);
}
else if (mqtt_status == 2) {
else if (mqtt_status == connecting) {
display.drawFastImage(x, y, 8, 8, mqtt_connecting_symbol);
}
else if (mqtt_status == 3) {
else if (mqtt_status == disconnected) {
display.drawFastImage(x, y, 8, 8, mqtt_disconnected_symbol);
}
}
......@@ -67,8 +67,8 @@ void oled_task(void *pvParameters) {
}
void enable_oled() {
set_wlan_connection_status_handler([](uint8_t status) {wlan_status = status;});
set_mqtt_connection_status_handler([](uint8_t status) {mqtt_status = status;});
add_wlan_connection_status_handler([](connection_status_t status) {wlan_status = status;});
add_mqtt_connection_status_handler([](connection_status_t status) {mqtt_status = status;});
set_oled_log_handler([](const std::string& message) {oled_log = message;});
display.init();
display.flipScreenVertically();
......
......@@ -10,7 +10,9 @@
// 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 struct {
const std::string& topic;
......@@ -51,4 +53,8 @@ void add_button(gpio_num_t gpio, std::function<void()> on_press = NULL, std::fun
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);
// event handler
void add_wlan_connection_status_handler(connection_status_callback_t handler);
void add_mqtt_connection_status_handler(connection_status_callback_t handler);
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment