esp_alox/main/client_handler.h

61 lines
1.2 KiB
C

#ifndef CLIENT_HANDLER_H
#define CLIENT_HANDLER_H
#include "freertos/FreeRTOS.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <sys/_intsup.h>
#include <sys/types.h>
#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