#ifndef CLIENT_HANDLER_H #define CLIENT_HANDLER_H #include "freertos/FreeRTOS.h" #include #include #include #include #include #include #include #define MAX_CLIENTS 16 #define MAC_LENGTH 6 enum ClientErrors { CLIENT_OK = 0, CLIENT_EXISTS = -1, CLIENT_DOES_NOT_EXISTS = -2, CLIENT_LIST_FULL = -3, CLIENT_INVALID_ID = -4, }; typedef enum { OTA_IDLE, OTA_AWAITING_ACK, OTA_PREPARING, OTA_READY, OTA_UPDATING, OTA_FAILED, OTA_SUCCESS, } ota_status_t; typedef struct { bool slotIsUsed; bool isAvailable; uint8_t clientID; uint8_t macAddr[MAC_LENGTH]; TickType_t lastSuccessfullPing; TickType_t lastPing; uint16_t clientVersion; ota_status_t ota_status; uint16_t current_block_id; uint32_t chunk_bitmask; uint32_t resent_chunks_counter; uint8_t retry_counter; TickType_t last_seen; } ClientInfo; typedef struct { ClientInfo Clients[MAX_CLIENTS]; uint8_t ClientCount; } ClientList; int get_client_id(ClientList *list, const uint8_t *client_mac); int add_client(ClientList *list, const uint8_t *client_mac); int remove_client(ClientList *list, const uint8_t clientid); int get_next_free_slot(ClientList *list); #endif