#include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/ringbuf.h" #include "cJSON.h" #pragma once typedef enum { MESSAGING_INFO, MESSAGING_WARNING, MESSAGING_ERROR } messaging_types; typedef enum { MESSAGING_CLASS_OTA, MESSAGING_CLASS_SYSTEM, MESSAGING_CLASS_STATS, MESSAGING_CLASS_CFGCMD, MESSAGING_CLASS_BT } messaging_classes; typedef struct messaging_list_t *messaging_handle_t; typedef struct { time_t sent_time; messaging_types type; messaging_classes msg_class; size_t msg_size; char message[]; } single_message_t; cJSON * messaging_retrieve_messages(RingbufHandle_t buf_handle); messaging_handle_t messaging_register_subscriber(uint8_t max_count, char * name); esp_err_t messaging_post_to_queue(messaging_handle_t subscriber_handle, single_message_t * message, size_t message_size); void messaging_post_message(messaging_types type,messaging_classes msg_class, const char * fmt, ...); cJSON * messaging_retrieve_messages(RingbufHandle_t buf_handle); single_message_t * messaging_retrieve_message(RingbufHandle_t buf_handle); void log_send_messaging(messaging_types msgtype,const char *fmt, ...); void cmd_send_messaging(const char * cmdname,messaging_types msgtype, const char *fmt, ...); esp_err_t messaging_type_to_err_type(messaging_types type); void messaging_service_init(); #define REALLOC_CAT(e,n) e=realloc(e,strlen(n)); e=strcat(e,n) #define LOG_SEND(y, ...) \ { \ ESP_LOG_LEVEL_LOCAL(messaging_type_to_err_type(y),TAG, ##__VA_ARGS__); \ messaging_post_message(y, MESSAGING_CLASS_SYSTEM, ##__VA_ARGS__); } #define LOG_SEND_ERROR( ...) LOG_SEND(MESSAGING_ERROR,##__VA_ARGS__) #define LOG_SEND_INFO( ...) LOG_SEND(MESSAGING_INFO,##__VA_ARGS__) #define LOG_SEND_WARN( ...) LOG_SEND(MESSAGING_WARNING,##__VA_ARGS__)