The new spec is here: [KTag Beacon Specification v0.11](https://ktag.clubk.club/Technology/BLE/KTag%20Beacon%20Specification%20v0.11.pdf) Co-authored-by: Joe Kearney <joe@clubk.club> Reviewed-on: #2
96 lines
2.4 KiB
C
96 lines
2.4 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
#include <string.h>
|
|
#include "sdkconfig.h"
|
|
#include "mdns_private.h"
|
|
#include "mdns_mem_caps.h"
|
|
#include "esp_heap_caps.h"
|
|
#include "esp_log.h"
|
|
|
|
#if CONFIG_MDNS_MEMORY_CUSTOM_IMPL
|
|
#define ALLOW_WEAK __attribute__((weak))
|
|
#else
|
|
#define ALLOW_WEAK
|
|
#endif
|
|
|
|
#if CONFIG_MDNS_TASK_CREATE_FROM_SPIRAM
|
|
#define MDNS_TASK_MEMORY_CAPS (MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT)
|
|
#define MDNS_TASK_MEMORY_LOG "SPIRAM"
|
|
#endif
|
|
#if CONFIG_MDNS_TASK_CREATE_FROM_INTERNAL
|
|
#define MDNS_TASK_MEMORY_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT)
|
|
#define MDNS_TASK_MEMORY_LOG "internal RAM"
|
|
#endif
|
|
|
|
#if CONFIG_MDNS_MEMORY_ALLOC_SPIRAM
|
|
#define MDNS_MEMORY_CAPS (MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT)
|
|
#endif
|
|
#if CONFIG_MDNS_MEMORY_ALLOC_INTERNAL
|
|
#define MDNS_MEMORY_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT)
|
|
#endif
|
|
|
|
// Allocate memory from internal heap as default.
|
|
#ifndef MDNS_MEMORY_CAPS
|
|
#warning "No memory allocation method defined, using internal memory"
|
|
#define MDNS_MEMORY_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT)
|
|
#endif
|
|
#ifndef MDNS_TASK_MEMORY_CAPS
|
|
#define MDNS_TASK_MEMORY_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT)
|
|
#define MDNS_TASK_MEMORY_LOG "internal RAM"
|
|
#endif
|
|
|
|
void ALLOW_WEAK *mdns_mem_malloc(size_t size)
|
|
{
|
|
return heap_caps_malloc(size, MDNS_MEMORY_CAPS);
|
|
}
|
|
|
|
void ALLOW_WEAK *mdns_mem_calloc(size_t num, size_t size)
|
|
{
|
|
return heap_caps_calloc(num, size, MDNS_MEMORY_CAPS);
|
|
}
|
|
|
|
void ALLOW_WEAK mdns_mem_free(void *ptr)
|
|
{
|
|
heap_caps_free(ptr);
|
|
}
|
|
|
|
char ALLOW_WEAK *mdns_mem_strdup(const char *s)
|
|
{
|
|
if (!s) {
|
|
return NULL;
|
|
}
|
|
size_t len = strlen(s) + 1;
|
|
char *copy = (char *)heap_caps_malloc(len, MDNS_MEMORY_CAPS);
|
|
if (copy) {
|
|
memcpy(copy, s, len);
|
|
}
|
|
return copy;
|
|
}
|
|
|
|
char ALLOW_WEAK *mdns_mem_strndup(const char *s, size_t n)
|
|
{
|
|
if (!s) {
|
|
return NULL;
|
|
}
|
|
size_t len = strnlen(s, n);
|
|
char *copy = (char *)heap_caps_malloc(len + 1, MDNS_MEMORY_CAPS);
|
|
if (copy) {
|
|
memcpy(copy, s, len);
|
|
copy[len] = '\0';
|
|
}
|
|
return copy;
|
|
}
|
|
|
|
void ALLOW_WEAK *mdns_mem_task_malloc(size_t size)
|
|
{
|
|
ESP_LOGI("mdns_mem", "mDNS task will be created from %s", MDNS_TASK_MEMORY_LOG);
|
|
return heap_caps_malloc(size, MDNS_TASK_MEMORY_CAPS);
|
|
}
|
|
|
|
void ALLOW_WEAK mdns_mem_task_free(void *ptr)
|
|
{
|
|
heap_caps_free(ptr);
|
|
}
|