diff --git a/project/Core/Src/mqtt_application.c b/project/Core/Src/mqtt_application.c index 2f0e546..203830a 100644 --- a/project/Core/Src/mqtt_application.c +++ b/project/Core/Src/mqtt_application.c @@ -46,7 +46,7 @@ static void mqtt_sub_request_cb(void*, err_t); static void mqtt_connection_cb(mqtt_client_t*, void*, mqtt_connection_status_t); static void mosquitto_connect(mqtt_client_t*); static uint32_t color_picker(char*); -static void create_publish_string(char*, char*, llfs_file_t*, size_t, size_t); +static void create_publish_string(char*, char*, size_t); // Global variables used in mqtt_incoming_publish_cb and mqtt_incoming_data_cb to give an easy to use ID to the subscribed topics static sFONT* font; @@ -78,36 +78,21 @@ static void mqtt_pub_request_cb(void* arg, err_t result) { static void publish_data(mqtt_client_t* client, void* arg) { char pub_payload[200] = {0}; err_t err; - size_t num_files; - llfs_file_t file_list[MAX_FILES]; u8_t qos = PUBLISH_QOS; u8_t retain = PUBLISH_RETAIN; LOG_DEBUG(TAG, "Entering publish"); - num_files = llfs_file_list(file_list, MAX_FILES, "*.bmp"); + create_publish_string("image", pub_payload,sizeof(pub_payload)); - if (num_files == 0) { - strncat(pub_payload, "No images found", sizeof(pub_payload) - strlen(pub_payload) - 1); - LOG_INFO(TAG, "%s: No images found", __func__); - } else { - create_publish_string("image", pub_payload, file_list, sizeof(pub_payload), num_files); - } err = mqtt_publish(client, "getImageList", pub_payload, strlen(pub_payload), qos, retain, mqtt_pub_request_cb, arg); - if (err != ERR_OK) { - LOG_DEBUG(TAG, "Publish err: %d", err); - } + if (err != ERR_OK) { + LOG_DEBUG(TAG, "Publish err: %d", err); + } pub_payload[0] = '\0'; + create_publish_string("gif", pub_payload, sizeof(pub_payload)); - num_files = llfs_file_list(file_list, MAX_FILES, "*.gif"); - - if (num_files == 0) { - strncat(pub_payload, "No gifs found", sizeof(pub_payload) - strlen(pub_payload) - 1); - LOG_INFO(TAG, "%s: No gifs found", __func__); - } else { - create_publish_string("gif", pub_payload, file_list, sizeof(pub_payload), num_files); - } err = mqtt_publish(client, "getImageList", pub_payload, strlen(pub_payload), qos, retain, mqtt_pub_request_cb, arg); if (err != ERR_OK) { LOG_DEBUG(TAG, "Publish err: %d", err); @@ -391,16 +376,40 @@ uint32_t color_picker(char* color_in) { return LCD_BLACK; } -static void create_publish_string(char* file_type, char* payload_buffer, llfs_file_t* file_list, size_t buffer_size, size_t files_amount) { +/** + * @brief creates a string to publish on the getImageList topic + * + * @param[in] file_type The type of file file_list is made out of + * @param[in] payload_buffer The string to be published + * @param[in] buffer_size Size of payload_buffer + */ +static void create_publish_string(char* file_type, char* payload_buffer, size_t buffer_size) { + size_t num_files; + llfs_file_t file_list[MAX_FILES]; + if (strcmp(file_type, "image") == 0) { + num_files = llfs_file_list(file_list, MAX_FILES, "*.bmp"); + + if (num_files == 0) { + strncat(payload_buffer, "No images found", buffer_size - strlen(payload_buffer) - 1); + LOG_INFO(TAG, "%s: No images found", __func__); + return; + } strncat(payload_buffer, "Available images: ", buffer_size - strlen(payload_buffer) - 1); } else if (strcmp(file_type, "gif") == 0) { + num_files = llfs_file_list(file_list, MAX_FILES, "*.gif"); + + if (num_files == 0) { + strncat(payload_buffer, "No gifs found", buffer_size - strlen(payload_buffer) - 1); + LOG_INFO(TAG, "%s: No gifs found", __func__); + return; + } strncat(payload_buffer, "Available gifs: ", buffer_size - strlen(payload_buffer) - 1); } else { LOG_WARN(TAG, "No application for given file type: %s", file_type); return; } - for (size_t i = 0; i < files_amount; i++) { + for (size_t i = 0; i < num_files; i++) { // Concatenate file names into the payload string strncat(payload_buffer, file_list[i].name, buffer_size - strlen(payload_buffer) - 1); strncat(payload_buffer, ", ", buffer_size - strlen(payload_buffer) - 1); // Add a comma between file names