Support for building and running external apps (#112)
This commit is contained in:
committed by
GitHub
parent
42e843b463
commit
415442e410
@@ -3,31 +3,35 @@ cmake_minimum_required(VERSION 3.16)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
file(GLOB_RECURSE SOURCES "Source/*.c*")
|
||||
file(GLOB_RECURSE HEADERS "Source/*.h*")
|
||||
|
||||
add_library(TactilityCore OBJECT)
|
||||
|
||||
target_sources(TactilityCore
|
||||
PRIVATE ${SOURCES}
|
||||
PUBLIC ${HEADERS}
|
||||
)
|
||||
|
||||
target_include_directories(TactilityCore SYSTEM
|
||||
PUBLIC Source/
|
||||
)
|
||||
|
||||
if (DEFINED ENV{ESP_IDF_VERSION})
|
||||
add_definitions(-DESP_PLATFORM)
|
||||
target_link_libraries(TactilityCore
|
||||
PUBLIC idf::mbedtls
|
||||
PRIVATE idf::nvs_flash # ESP-IDF // for secure.c
|
||||
file(GLOB_RECURSE SOURCE_FILES Source/*.c*)
|
||||
|
||||
idf_component_register(
|
||||
SRCS ${SOURCE_FILES}
|
||||
INCLUDE_DIRS "Source/"
|
||||
REQUIRES mbedtls nvs_flash
|
||||
)
|
||||
|
||||
add_definitions(-DESP_PLATFORM)
|
||||
else()
|
||||
file(GLOB_RECURSE SOURCES "Source/*.c*")
|
||||
file(GLOB_RECURSE HEADERS "Source/*.h*")
|
||||
|
||||
add_library(TactilityCore OBJECT)
|
||||
|
||||
target_sources(TactilityCore
|
||||
PRIVATE ${SOURCES}
|
||||
PUBLIC ${HEADERS}
|
||||
)
|
||||
|
||||
target_include_directories(TactilityCore SYSTEM
|
||||
PUBLIC Source/
|
||||
)
|
||||
|
||||
add_definitions(-D_Nullable=)
|
||||
add_definitions(-D_Nonnull=)
|
||||
target_link_libraries(TactilityCore
|
||||
PUBLIC mbedtls
|
||||
PUBLIC freertos_kernel
|
||||
PUBLIC mbedtls
|
||||
PUBLIC freertos_kernel
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -112,7 +112,7 @@ ThreadId Mutex::getOwner() const {
|
||||
|
||||
|
||||
std::unique_ptr<ScopedMutexUsage> Mutex::scoped() const {
|
||||
return std::move(std::make_unique<ScopedMutexUsage>(*this));
|
||||
return std::make_unique<ScopedMutexUsage>(*this);
|
||||
}
|
||||
|
||||
Mutex* tt_mutex_alloc(Mutex::Type type) {
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
#include "File.h"
|
||||
|
||||
namespace tt::file {
|
||||
|
||||
#define TAG "file"
|
||||
|
||||
long getSize(FILE* file) {
|
||||
long original_offset = ftell(file);
|
||||
|
||||
if (fseek(file, 0, SEEK_END) != 0) {
|
||||
TT_LOG_E(TAG, "fseek failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
long file_size = ftell(file);
|
||||
if (file_size == -1) {
|
||||
TT_LOG_E(TAG, "Could not get file length");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fseek(file, original_offset, SEEK_SET) != 0) {
|
||||
TT_LOG_E(TAG, "fseek Failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return file_size;
|
||||
}
|
||||
|
||||
static std::unique_ptr<uint8_t[]> readBinaryInternal(const char* filepath, size_t& outSize, size_t sizePadding = 0) {
|
||||
FILE* file = fopen(filepath, "rb");
|
||||
|
||||
if (file == nullptr) {
|
||||
TT_LOG_E(TAG, "Failed to open %s", filepath);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
long content_length = getSize(file);
|
||||
if (content_length == -1) {
|
||||
TT_LOG_E(TAG, "Failed to determine content length for %s", filepath);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto data = std::make_unique<uint8_t[]>(content_length + sizePadding);
|
||||
if (data == nullptr) {
|
||||
TT_LOG_E(TAG, "Insufficient memory. Failed to allocate %ldl bytes.", content_length);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
size_t buffer_offset = 0;
|
||||
while (buffer_offset < content_length) {
|
||||
size_t bytes_read = fread(&data.get()[buffer_offset], 1, content_length - buffer_offset, file);
|
||||
TT_LOG_I(TAG, "Read %d bytes", bytes_read);
|
||||
if (bytes_read > 0) {
|
||||
buffer_offset += bytes_read;
|
||||
} else { // Something went wrong?
|
||||
data = nullptr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
outSize = buffer_offset;
|
||||
|
||||
fclose(file);
|
||||
return data;
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> readBinary(const char* filepath, size_t& outSize) {
|
||||
return readBinaryInternal(filepath, outSize);
|
||||
}
|
||||
|
||||
std::unique_ptr<uint8_t[]> readString(const char* filepath) {
|
||||
size_t size = 0;
|
||||
auto data = readBinaryInternal(filepath, size, 1);
|
||||
if (size > 0) {
|
||||
data.get()[size] = 0; // Append null terminator
|
||||
return data;
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "TactilityCore.h"
|
||||
#include <cstdio>
|
||||
|
||||
namespace tt::file {
|
||||
|
||||
#define TAG "file"
|
||||
|
||||
long getSize(FILE* file);
|
||||
|
||||
std::unique_ptr<uint8_t[]> readBinary(const char* filepath, size_t& outSize);
|
||||
std::unique_ptr<uint8_t[]> readString(const char* filepath);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user