Reworked MAC to String logic to many little buffers
This commit is contained in:
parent
55228fff8d
commit
0934105952
@ -39,10 +39,7 @@ void add_peer(uint8_t *macAddr) {
|
|||||||
|
|
||||||
esp_err_t result = esp_now_add_peer(&peerInfo);
|
esp_err_t result = esp_now_add_peer(&peerInfo);
|
||||||
if (result == ESP_OK) {
|
if (result == ESP_OK) {
|
||||||
ESP_LOGI(TAG, "Peer added: %02X:%02X:%02X:%02X:%02X:%02X",
|
ESP_LOGI(TAG, "Peer added: " MACSTR, MAC2STR(peerInfo.peer_addr));
|
||||||
peerInfo.peer_addr[0], peerInfo.peer_addr[1],
|
|
||||||
peerInfo.peer_addr[2], peerInfo.peer_addr[3],
|
|
||||||
peerInfo.peer_addr[4], peerInfo.peer_addr[5]);
|
|
||||||
|
|
||||||
if (!IS_BROADCAST_ADDR(macAddr)) {
|
if (!IS_BROADCAST_ADDR(macAddr)) {
|
||||||
int ret = add_client(esp_client_list, peerInfo.peer_addr);
|
int ret = add_client(esp_client_list, peerInfo.peer_addr);
|
||||||
@ -65,11 +62,6 @@ void add_peer(uint8_t *macAddr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MACtoString(const uint8_t *macAddr, char *outputBuffer) {
|
|
||||||
sprintf(outputBuffer, "%02X:%02X:%02X:%02X:%02X:%02X", macAddr[0], macAddr[1],
|
|
||||||
macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseMessage MessageBuilder(CommandPages commandPage, PayloadUnion payload,
|
BaseMessage MessageBuilder(CommandPages commandPage, PayloadUnion payload,
|
||||||
size_t payload_size) {
|
size_t payload_size) {
|
||||||
BaseMessage message;
|
BaseMessage message;
|
||||||
@ -115,12 +107,11 @@ void master_broadcast_ping(void *param) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void master_ping_task(void *param) {
|
void master_ping_task(void *param) {
|
||||||
char macBuffer[MAC_STRING_BUFFER_SIZE];
|
|
||||||
while (1) {
|
while (1) {
|
||||||
for (size_t i = 0; i < MAX_CLIENTS; i++) {
|
for (size_t i = 0; i < MAX_CLIENTS; i++) {
|
||||||
if (esp_client_list->Clients[i].isAvailable) {
|
if (esp_client_list->Clients[i].isAvailable) {
|
||||||
MACtoString(esp_client_list->Clients[i].macAddr, macBuffer);
|
ESP_LOGI(TAG, "SEND PING TO %zu: " MACSTR, i,
|
||||||
ESP_LOGI(TAG, "SEND PING TO %zu: %s", i, macBuffer);
|
MAC2STR(esp_client_list->Clients[i].macAddr));
|
||||||
PingPayload payload = {};
|
PingPayload payload = {};
|
||||||
payload.timestamp = esp_timer_get_time();
|
payload.timestamp = esp_timer_get_time();
|
||||||
BaseMessage message = MessageBuilder(
|
BaseMessage message = MessageBuilder(
|
||||||
@ -136,7 +127,6 @@ void master_ping_task(void *param) {
|
|||||||
|
|
||||||
void master_receive_callback(const esp_now_recv_info_t *esp_now_info,
|
void master_receive_callback(const esp_now_recv_info_t *esp_now_info,
|
||||||
const uint8_t *data, int data_len) {
|
const uint8_t *data, int data_len) {
|
||||||
char macBuffer[MAC_STRING_BUFFER_SIZE];
|
|
||||||
ESP_LOGI(TAG, "MASTER GOT MESSAGE");
|
ESP_LOGI(TAG, "MASTER GOT MESSAGE");
|
||||||
|
|
||||||
const BaseMessage *message = (const BaseMessage *)data;
|
const BaseMessage *message = (const BaseMessage *)data;
|
||||||
@ -157,9 +147,9 @@ void master_receive_callback(const esp_now_recv_info_t *esp_now_info,
|
|||||||
if (id >= 0) {
|
if (id >= 0) {
|
||||||
esp_client_list->Clients[id].lastSuccessfullPing = xTaskGetTickCount();
|
esp_client_list->Clients[id].lastSuccessfullPing = xTaskGetTickCount();
|
||||||
esp_client_list->Clients[id].lastPing = (diff / 1000);
|
esp_client_list->Clients[id].lastPing = (diff / 1000);
|
||||||
MACtoString(esp_now_info->src_addr, macBuffer);
|
ESP_LOGI(TAG, "Updated client %d: " MACSTR " last ping time to %lu", id,
|
||||||
ESP_LOGI(TAG, "Updated client %d: %s last ping time to %lu", id,
|
MAC2STR(esp_now_info->src_addr),
|
||||||
macBuffer, esp_client_list->Clients[id].lastSuccessfullPing);
|
esp_client_list->Clients[id].lastSuccessfullPing);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BroadCastPage:
|
case BroadCastPage:
|
||||||
@ -201,10 +191,9 @@ void master_receive_callback(const esp_now_recv_info_t *esp_now_info,
|
|||||||
}
|
}
|
||||||
void client_receive_callback(const esp_now_recv_info_t *esp_now_info,
|
void client_receive_callback(const esp_now_recv_info_t *esp_now_info,
|
||||||
const uint8_t *data, int data_len) {
|
const uint8_t *data, int data_len) {
|
||||||
char macBuffer[MAC_STRING_BUFFER_SIZE];
|
|
||||||
ESP_LOGI(TAG, "SLAVE GOT MESSAGE");
|
ESP_LOGI(TAG, "SLAVE GOT MESSAGE");
|
||||||
MACtoString(esp_now_info->src_addr, macBuffer);
|
ESP_LOGI(TAG, "Received message from: " MACSTR,
|
||||||
ESP_LOGI(TAG, "Received message from: %s", macBuffer);
|
MAC2STR(esp_now_info->src_addr));
|
||||||
ESP_LOGI(TAG, "Message: %.*s", data_len, data);
|
ESP_LOGI(TAG, "Message: %.*s", data_len, data);
|
||||||
|
|
||||||
BaseMessage replyMessage = {};
|
BaseMessage replyMessage = {};
|
||||||
@ -251,36 +240,32 @@ void client_data_sending_task(void *param) {
|
|||||||
const char *dataToSend = "DATA:42";
|
const char *dataToSend = "DATA:42";
|
||||||
ESP_LOGI(TAG, "SEND DATA");
|
ESP_LOGI(TAG, "SEND DATA");
|
||||||
esp_now_send(NULL, (uint8_t *)dataToSend,
|
esp_now_send(NULL, (uint8_t *)dataToSend,
|
||||||
strlen(dataToSend)); // Sende Daten an Master
|
strlen(dataToSend));
|
||||||
vTaskDelay(pdMS_TO_TICKS(5000));
|
vTaskDelay(pdMS_TO_TICKS(5000));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void client_monitor_task(void *pvParameters) {
|
void client_monitor_task(void *pvParameters) {
|
||||||
char macBuffer[MAC_STRING_BUFFER_SIZE];
|
|
||||||
TickType_t timeout_ticks =
|
TickType_t timeout_ticks =
|
||||||
pdMS_TO_TICKS(CLIENT_TIMEOUT_MS); // Timeout in Ticks
|
pdMS_TO_TICKS(CLIENT_TIMEOUT_MS);
|
||||||
TickType_t interval_ticks =
|
TickType_t interval_ticks =
|
||||||
pdMS_TO_TICKS(CHECK_INTERVAL_MS); // Prüfintervall in Ticks
|
pdMS_TO_TICKS(CHECK_INTERVAL_MS);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
TickType_t now = xTaskGetTickCount(); // Aktuelle Zeit in Ticks
|
TickType_t now = xTaskGetTickCount();
|
||||||
|
|
||||||
for (int i = 0; i < MAX_CLIENTS; i++) {
|
for (int i = 0; i < MAX_CLIENTS; i++) {
|
||||||
if (esp_client_list->Clients[i].isAvailable) {
|
if (esp_client_list->Clients[i].isAvailable) {
|
||||||
TickType_t time_diff =
|
TickType_t time_diff =
|
||||||
now - esp_client_list->Clients[i].lastSuccessfullPing;
|
now - esp_client_list->Clients[i].lastSuccessfullPing;
|
||||||
|
|
||||||
// Prüfen, ob der Client als "nicht verfügbar" markiert werden soll
|
|
||||||
if (time_diff > timeout_ticks) {
|
if (time_diff > timeout_ticks) {
|
||||||
esp_client_list->Clients[i].isAvailable = false;
|
esp_client_list->Clients[i].isAvailable = false;
|
||||||
MACtoString(esp_client_list->Clients[i].macAddr, macBuffer);
|
ESP_LOGW(TAG, "Client %d (MAC: " MACSTR ") is unavailable",
|
||||||
ESP_LOGW(TAG, "Client %d (MAC: %s) is unavailable", macBuffer);
|
MAC2STR(esp_client_list->Clients[i].macAddr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Task für das Prüfintervall anhalten
|
|
||||||
vTaskDelay(interval_ticks);
|
vTaskDelay(interval_ticks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,9 @@ static uint8_t broadcast_address[ESP_NOW_ETH_ALEN] = {0xFF, 0xFF, 0xFF,
|
|||||||
#define IS_BROADCAST_ADDR(addr) \
|
#define IS_BROADCAST_ADDR(addr) \
|
||||||
(memcmp(addr, broadcast_address, ESP_NOW_ETH_ALEN) == 0)
|
(memcmp(addr, broadcast_address, ESP_NOW_ETH_ALEN) == 0)
|
||||||
|
|
||||||
|
#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
|
||||||
|
#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X"
|
||||||
|
|
||||||
#define MESSAGE_QUEUE_SIZE 10
|
#define MESSAGE_QUEUE_SIZE 10
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -66,7 +69,6 @@ static_assert(sizeof(BaseMessage) <= 255,
|
|||||||
void init_com(ClientList *clients);
|
void init_com(ClientList *clients);
|
||||||
int getNextFreeClientId();
|
int getNextFreeClientId();
|
||||||
void add_peer(uint8_t *macAddr);
|
void add_peer(uint8_t *macAddr);
|
||||||
void MACtoString(const uint8_t *macAddr, char *outputBuffer);
|
|
||||||
BaseMessage MessageBuilder(CommandPages commandPage, PayloadUnion payload,
|
BaseMessage MessageBuilder(CommandPages commandPage, PayloadUnion payload,
|
||||||
size_t payload_size);
|
size_t payload_size);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user