diff --git a/project/Core/Src/mug.c b/project/Core/Src/mug.c index 71917eb..40cc015 100644 --- a/project/Core/Src/mug.c +++ b/project/Core/Src/mug.c @@ -12,126 +12,134 @@ #include "mqtt.h" #include "mug.h" +#define LOGGER_LEVEL_INFO +#include "log.h" + +//Function prototypes static void mqtt_pub_request_cb(void*, err_t); -void example_publish(mqtt_client_t* , void*); +static void example_publish(mqtt_client_t* , void*); static void mqtt_incoming_publish_cb(void*, const char*, u32_t); static void mqtt_incoming_data_cb(void*, const u8_t*, u16_t, u8_t); static void mqtt_sub_request_cb(void*, err_t); static void mqtt_connection_cb(mqtt_client_t*, void*, mqtt_connection_status_t); -void example_do_connect(mqtt_client_t*); +static void example_do_connect(mqtt_client_t*); +//global variable used in mqtt_incoming_publish_cb and mqtt_incoming_data_cb to give an easy to use ID to the subscribed topics +static int inpub_id; +static const char *TAG = "mug"; static void mqtt_pub_request_cb(void *arg, err_t result) { - if(result != ERR_OK) { - printf("Publish result: %d\n", result); - } + if(result != ERR_OK) { + LOG_INFO(TAG, "Publish result: %d\n", result); + } } -int teller = 0; -void example_publish(mqtt_client_t *client, void *arg) { - printf("testing publish\n"); - const char *pub_payload[20]; - err_t err; - u8_t qos = 2; - u8_t retain = 0; - itoa(teller, &pub_payload, 10); - err = mqtt_publish(client, "pushbutton_event", pub_payload, strlen(pub_payload), qos, retain, mqtt_pub_request_cb, arg); - if(err != ERR_OK) { - printf("Publish err: %d\n", err); - } +static void example_publish(mqtt_client_t *client, void *arg) { + printf("testing publish\n"); + const char *pub_payload[20]; + err_t err; + u8_t qos = 2; + u8_t retain = 0; + + err = mqtt_publish(client, "getImageList", pub_payload, sizeof(pub_payload), qos, retain, mqtt_pub_request_cb, arg); + if(err != ERR_OK) { + printf("Publish err: %d\n", err); + } } - -static int inpub_id; static void mqtt_incoming_publish_cb(void *arg, const char *topic, u32_t tot_len) { - printf("Incoming publish at topic %s with total length %u\n", topic, (unsigned int)tot_len); - - //check for which topic a publish was received for - if(strcmp(topic, "/input/setText") == 0) { - inpub_id = 0; - } else if(strcmp(topic, "/input/setImage") == 0) { - inpub_id = 1; - } else if(strcmp(topic, "/input/setTextColor") == 0) { - inpub_id = 2; - } else if(strcmp(topic, "/input/setColor") == 0) { - inpub_id = 3; - } else { - //in case of wrong topic - inpub_id = 4; - } + printf("Incoming publish at topic %s with total length %u\n", topic, (unsigned int)tot_len); + //check for which topic a publish was received + if(strcmp(topic, "/input/setText") == 0) { + inpub_id = 0; + } else if(strcmp(topic, "/input/setImage") == 0) { + inpub_id = 1; + } else if(strcmp(topic, "/input/setTextColor") == 0) { + inpub_id = 2; + } else if(strcmp(topic, "/input/setColor") == 0) { + inpub_id = 3; + } else { + //in case of wrong topic + inpub_id = 4; + } } static void mqtt_incoming_data_cb(void *arg, const u8_t *data, u16_t len, u8_t flags) { - printf("Incoming publish payload with length %d, flags %u\n", len, (unsigned int)flags); + printf("Incoming publish payload with length %d, flags %u\n", len, (unsigned int)flags); + if(flags & MQTT_DATA_FLAG_LAST) { + switch(inpub_id) { + case 0: + //places text on the lcd + break; + case 1: + //places an image on the lcd + break; + case 2: + //changes the text color on the lcd + break; + case 3: + //changes the background color + break; + default: + LOG_INFO(TAG, "Publish received on wrong topic, incoming data ignored."); + } + } else { - if(flags & MQTT_DATA_FLAG_LAST) { - if (inpub_id == 0) { - //places text on the lcd - } else if (inpub_id == 1) { - //places an image on the lcd - } else if (inpub_id == 2) { - //changes the text color on the lcd - } else if (inpub_id == 3) { - //changes the background color - } else { - printf("mqtt_incoming_data_cb: Ignoring payload...\n"); - } - } else { - } + } } static void mqtt_sub_request_cb(void *arg, err_t result) { - printf("Subscribe result: %d\n", result); + LOG_INFO(TAG, "Subscribe result: %d\n", result); } static void mqtt_connection_cb(mqtt_client_t *client, void *arg, mqtt_connection_status_t status) { - printf("entered connection cb function\n"); + printf("entered connection cb function\n"); err_t err; - if(status == MQTT_CONNECT_ACCEPTED) { - printf("mqtt_connection_cb: Successfully connected\n"); + if(status == MQTT_CONNECT_ACCEPTED) { + printf("mqtt_connection_cb: Successfully connected\n"); - //set up callback function for input - mqtt_set_inpub_callback(client, mqtt_incoming_publish_cb, mqtt_incoming_data_cb, arg); + //set up callback function for input + mqtt_set_inpub_callback(client, mqtt_incoming_publish_cb, mqtt_incoming_data_cb, arg); - //subscribe to the topics setText, setImage, setColor and setTextcolor - err = mqtt_subscribe(client, "/input/#", 1, mqtt_sub_request_cb, arg); + //subscribe to the topics setText, setImage, setColor and setTextcolor + err = mqtt_subscribe(client, "/input/#", 1, mqtt_sub_request_cb, arg); + if(err != ERR_OK) { + printf("mqtt_subscribe return: %d\n", err); + } + //publish list of images here + example_publish(client, NULL); + } else { + printf("mqtt_connection_cb: Disconnected, reason: %d\n", status); - if(err != ERR_OK) { - printf("mqtt_subscribe return: %d\n", err); - } - //publish list of images here - } else { - printf("mqtt_connection_cb: Disconnected, reason: %d\n", status); - - //try to reconnect - example_do_connect(client); - } -} - -void example_do_connect(mqtt_client_t *client) { - printf("testing the connection\n"); - struct mqtt_connect_client_info_t ci; - err_t err; - - memset(&ci, 0, sizeof(ci)); - - ci.client_id = "lwip_test"; - ip_addr_t server_ip; - IP4_ADDR(&server_ip, 192,168,69,11); - uint16_t server_port = 1883; - err = mqtt_client_connect(client, &server_ip, server_port, mqtt_connection_cb, 0, &ci); - if(err != ERR_OK) { - printf("mqtt_connect return %d\n", err); - } - if(err == ERR_OK) { - printf("Went into mqtt_client_connect; mqtt_connect return %d\n", err); - } -} - -void mug_init() { - mqtt_client_t *client = mqtt_client_new(); - if(client != NULL) { - printf("Starting connection test\n"); - example_do_connect(client); + //try to reconnect + example_do_connect(client); + } +} + +static void example_do_connect(mqtt_client_t *client) { + printf("testing the connection\n"); + struct mqtt_connect_client_info_t ci; + err_t err; + + memset(&ci, 0, sizeof(ci)); + + ci.client_id = "lwip_test"; + ip_addr_t server_ip; + IP4_ADDR(&server_ip, 192,168,69,11); + uint16_t server_port = 1883; + err = mqtt_client_connect(client, &server_ip, server_port, mqtt_connection_cb, 0, &ci); + if(err != ERR_OK) { + printf("mqtt_connect return %d\n", err); + } + if(err == ERR_OK) { + printf("Went into mqtt_client_connect; mqtt_connect return %d\n", err); + } +} + +void mug_init(void) { + mqtt_client_t *client = mqtt_client_new(); + if(client != NULL) { + printf("Starting connection test\n"); + example_do_connect(client); } }