Kernel and TactilitySDK improvements (#479)
* **New Features** * Expanded public device and driver APIs (accessors, sync, lifecycle, binding) and a module construct+start helper. * Added kernel symbol registry and new exported symbols (lvgl, C++ nothrow, I2S APIs, additional math funcs). * **Refactor** * Renamed device traversal APIs for consistency (device_for_each*). * Moved inline helpers to explicit public declarations. * **Chores** * Replaced several shell release scripts with Python-based SDK release tooling. * **Style** * Header naming consistency fixes.
This commit is contained in:
committed by
GitHub
parent
9cc96fd32b
commit
9a672a30ff
@@ -1,10 +0,0 @@
|
||||
idf_component_register(
|
||||
INCLUDE_DIRS "Libraries/TactilityC/Include" "Libraries/lvgl/Include" "Libraries/TactilityFreeRtos/Include"
|
||||
REQUIRES esp_timer
|
||||
)
|
||||
|
||||
add_prebuilt_library(TactilityC Libraries/TactilityC/Binary/libTactilityC.a)
|
||||
add_prebuilt_library(lvgl Libraries/lvgl/Binary/liblvgl.a)
|
||||
|
||||
target_link_libraries(${COMPONENT_LIB} INTERFACE TactilityC)
|
||||
target_link_libraries(${COMPONENT_LIB} INTERFACE lvgl)
|
||||
@@ -0,0 +1,19 @@
|
||||
idf_component_register(
|
||||
INCLUDE_DIRS
|
||||
"Libraries/TactilityC/Include"
|
||||
"Libraries/TactilityKernel/Include"
|
||||
"Libraries/TactilityFreeRtos/Include"
|
||||
"Libraries/lvgl/Include"
|
||||
"Libraries/lvgl-module/Include"
|
||||
REQUIRES esp_timer
|
||||
)
|
||||
|
||||
add_prebuilt_library(TactilityC Libraries/TactilityC/Binary/libTactilityC.a)
|
||||
add_prebuilt_library(TactilityKernel Libraries/TactilityKernel/Binary/libTactilityKernel.a)
|
||||
add_prebuilt_library(lvgl Libraries/lvgl/Binary/liblvgl.a)
|
||||
add_prebuilt_library(lvgl-module Libraries/lvgl-module/Binary/liblvgl-module.a)
|
||||
|
||||
target_link_libraries(${COMPONENT_LIB} INTERFACE TactilityC)
|
||||
target_link_libraries(${COMPONENT_LIB} INTERFACE TactilityKernel)
|
||||
target_link_libraries(${COMPONENT_LIB} INTERFACE lvgl)
|
||||
target_link_libraries(${COMPONENT_LIB} INTERFACE lvgl-module)
|
||||
Binary file not shown.
@@ -1,4 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
config_idf_target=`cat sdkconfig | grep CONFIG_IDF_TARGET=`
|
||||
echo ${config_idf_target:19:-1}
|
||||
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def get_idf_target():
|
||||
try:
|
||||
with open("sdkconfig", "r") as f:
|
||||
for line in f:
|
||||
if line.startswith("CONFIG_IDF_TARGET="):
|
||||
# CONFIG_IDF_TARGET="esp32s3" -> esp32s3
|
||||
return line.split('=')[1].strip().strip('"')
|
||||
except FileNotFoundError:
|
||||
print("sdkconfig not found")
|
||||
return None
|
||||
return None
|
||||
|
||||
def main():
|
||||
# 1. Get idf_target
|
||||
idf_target = get_idf_target()
|
||||
if not idf_target:
|
||||
print("Could not determine IDF target from sdkconfig")
|
||||
sys.exit(1)
|
||||
|
||||
# 2. Get version
|
||||
try:
|
||||
with open("version.txt", "r") as f:
|
||||
version = f.read().strip()
|
||||
except FileNotFoundError:
|
||||
print("version.txt not found")
|
||||
sys.exit(1)
|
||||
|
||||
# 3. Construct sdk_path
|
||||
# release/TactilitySDK/${version}-${idf_target}/TactilitySDK
|
||||
sdk_path = os.path.join("release", "TactilitySDK", f"{version}-{idf_target}", "TactilitySDK")
|
||||
|
||||
# 4. Cleanup sdk_path
|
||||
if os.path.exists(sdk_path):
|
||||
print(f"Cleaning up {sdk_path}")
|
||||
shutil.rmtree(sdk_path)
|
||||
|
||||
os.makedirs(sdk_path, exist_ok=True)
|
||||
|
||||
# 5. Call release-sdk.py
|
||||
# Note: Using sys.executable to ensure we use the same python interpreter
|
||||
script_path = os.path.join("Buildscripts", "release-sdk.py")
|
||||
print(f"Running {script_path} {sdk_path}")
|
||||
|
||||
result = subprocess.run([sys.executable, script_path, sdk_path])
|
||||
|
||||
if result.returncode != 0:
|
||||
print(f"Error: {script_path} failed with return code {result.returncode}")
|
||||
sys.exit(result.returncode)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Description: Releases the current build files as an SDK in release/TactilitySDK-[platform]
|
||||
# This deployment is used when compiling new SDK features for apps.
|
||||
#
|
||||
|
||||
idf_target=`Buildscripts/get-idf-target.sh`
|
||||
version=`cat version.txt`
|
||||
sdk_path="release/TactilitySDK/${version}-${idf_target}/TactilitySDK"
|
||||
mkdir -p ${sdk_path}
|
||||
echo Cleaning up ${sdk_path}
|
||||
rm -rf ${sdk_path}
|
||||
./Buildscripts/release-sdk.sh ${sdk_path}
|
||||
@@ -0,0 +1,117 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import glob
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def map_copy(mappings, target_base):
|
||||
"""
|
||||
Helper function to map input files/directories to output files/directories.
|
||||
mappings: list of dicts with 'src' (glob pattern) and 'dst' (relative to target_base or absolute)
|
||||
'src' can be a single file or a directory (if it ends with /).
|
||||
"""
|
||||
for mapping in mappings:
|
||||
src_pattern = mapping['src']
|
||||
dst_rel = mapping['dst']
|
||||
dst_path = os.path.join(target_base, dst_rel)
|
||||
|
||||
# To preserve directory structure, we need to know where the wildcard starts
|
||||
# or have a way to determine the "base" of the search.
|
||||
# We'll split the pattern into a fixed base and a pattern part.
|
||||
|
||||
# Simple heuristic: find the first occurrence of '*' or '?'
|
||||
wildcard_idx = -1
|
||||
for i, char in enumerate(src_pattern):
|
||||
if char in '*?':
|
||||
wildcard_idx = i
|
||||
break
|
||||
|
||||
if wildcard_idx != -1:
|
||||
# Found a wildcard. The base is the directory containing it.
|
||||
pattern_base = os.path.dirname(src_pattern[:wildcard_idx])
|
||||
else:
|
||||
# No wildcard. If it's a directory, we might want to preserve its name?
|
||||
# For now, let's treat no-wildcard as no relative structure needed.
|
||||
pattern_base = None
|
||||
|
||||
src_files = glob.glob(src_pattern, recursive=True)
|
||||
if not src_files:
|
||||
continue
|
||||
|
||||
for src in src_files:
|
||||
if os.path.isdir(src):
|
||||
continue
|
||||
|
||||
if pattern_base and src.startswith(pattern_base):
|
||||
# Calculate relative path from the base of the glob pattern
|
||||
rel_src = os.path.relpath(src, pattern_base)
|
||||
# If dst_rel ends with /, it's a target directory
|
||||
if dst_rel.endswith('/') or os.path.isdir(dst_path):
|
||||
final_dst = os.path.join(dst_path, rel_src)
|
||||
else:
|
||||
# If dst_rel is a file, we can't really preserve structure
|
||||
# unless we join it. But usually it's a dir if structure is preserved.
|
||||
final_dst = dst_path
|
||||
else:
|
||||
final_dst = dst_path if not (dst_rel.endswith('/') or os.path.isdir(dst_path)) else os.path.join(dst_path, os.path.basename(src))
|
||||
|
||||
os.makedirs(os.path.dirname(final_dst), exist_ok=True)
|
||||
shutil.copy2(src, final_dst)
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: release-sdk.py [target_path]")
|
||||
print("Example: release-sdk.py release/TactilitySDK")
|
||||
sys.exit(1)
|
||||
|
||||
target_path = os.path.abspath(sys.argv[1])
|
||||
os.makedirs(target_path, exist_ok=True)
|
||||
|
||||
# Mapping logic
|
||||
mappings = [
|
||||
{'src': 'version.txt', 'dst': ''},
|
||||
# TactilityC
|
||||
{'src': 'build/esp-idf/TactilityC/libTactilityC.a', 'dst': 'Libraries/TactilityC/Binary/'},
|
||||
{'src': 'TactilityC/Include/*', 'dst': 'Libraries/TactilityC/Include/'},
|
||||
{'src': 'TactilityC/CMakeLists.txt', 'dst': 'Libraries/TactilityC/'},
|
||||
{'src': 'TactilityC/LICENSE*.*', 'dst': 'Libraries/TactilityC/'},
|
||||
# TactilityFreeRtos
|
||||
{'src': 'TactilityFreeRtos/Include/**', 'dst': 'Libraries/TactilityFreeRtos/Include/'},
|
||||
{'src': 'TactilityFreeRtos/CMakeLists.txt', 'dst': 'Libraries/TactilityFreeRtos/'},
|
||||
{'src': 'TactilityFreeRtos/LICENSE*.*', 'dst': 'Libraries/TactilityFreeRtos/'},
|
||||
# TactilityKernel
|
||||
{'src': 'build/esp-idf/TactilityKernel/libTactilityKernel.a', 'dst': 'Libraries/TactilityKernel/Binary/'},
|
||||
{'src': 'TactilityKernel/Include/**', 'dst': 'Libraries/TactilityKernel/Include/'},
|
||||
{'src': 'TactilityKernel/CMakeLists.txt', 'dst': 'Libraries/TactilityKernel/'},
|
||||
{'src': 'TactilityKernel/LICENSE*.*', 'dst': 'Libraries/TactilityKernel/'},
|
||||
# lvgl-module
|
||||
{'src': 'build/esp-idf/lvgl-module/liblvgl-module.a', 'dst': 'Libraries/lvgl-module/Binary/'},
|
||||
{'src': 'Modules/lvgl-module/Include/**', 'dst': 'Libraries/lvgl-module/Include/'},
|
||||
{'src': 'Modules/lvgl-module/CMakeLists.txt', 'dst': 'Libraries/lvgl-module/'},
|
||||
{'src': 'Modules/lvgl-module/LICENSE*.*', 'dst': 'Libraries/lvgl-module/'},
|
||||
# lvgl (basics)
|
||||
{'src': 'build/esp-idf/lvgl/liblvgl.a', 'dst': 'Libraries/lvgl/Binary/'},
|
||||
{'src': 'Libraries/lvgl/lvgl.h', 'dst': 'Libraries/lvgl/Include/'},
|
||||
{'src': 'Libraries/lvgl/lv_version.h', 'dst': 'Libraries/lvgl/Include/'},
|
||||
{'src': 'Libraries/lvgl/LICENCE.txt', 'dst': 'Libraries/lvgl/LICENSE.txt'},
|
||||
{'src': 'Libraries/lvgl/src/lv_conf_kconfig.h', 'dst': 'Libraries/lvgl/Include/lv_conf.h'},
|
||||
{'src': 'Libraries/lvgl/src/**/*.h', 'dst': 'Libraries/lvgl/Include/src/'},
|
||||
# elf_loader
|
||||
{'src': 'Libraries/elf_loader/elf_loader.cmake', 'dst': 'Libraries/elf_loader/'},
|
||||
{'src': 'Libraries/elf_loader/license.txt', 'dst': 'Libraries/elf_loader/'},
|
||||
# Final scripts
|
||||
{'src': 'Buildscripts/TactilitySDK/TactilitySDK.cmake', 'dst': ''},
|
||||
{'src': 'Buildscripts/TactilitySDK/CMakeLists.txt', 'dst': ''},
|
||||
]
|
||||
|
||||
map_copy(mappings, target_path)
|
||||
|
||||
# Output ESP-IDF SDK version to file
|
||||
esp_idf_version = os.environ.get("ESP_IDF_VERSION", "")
|
||||
with open(os.path.join(target_path, "idf-version.txt"), "a") as f:
|
||||
f.write(esp_idf_version)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,58 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Usage: release-sdk.sh [target_path]
|
||||
# Example: release.sh release/TactilitySDK
|
||||
# Description: Releases the current build files as an SDK in the specified folder.
|
||||
#
|
||||
|
||||
target_path=$1
|
||||
|
||||
mkdir -p $target_path
|
||||
|
||||
build_dir=`pwd`
|
||||
library_path=$target_path/Libraries
|
||||
|
||||
cp version.txt $target_path
|
||||
|
||||
# TactilityC
|
||||
tactility_library_path=$library_path/TactilityC
|
||||
mkdir -p $tactility_library_path/Binary
|
||||
cp build/esp-idf/TactilityC/libTactilityC.a $tactility_library_path/Binary/
|
||||
mkdir -p $tactility_library_path/Include
|
||||
find_target_dir="$build_dir/$tactility_library_path"
|
||||
cp TactilityC/Include/* "$find_target_dir/Include"
|
||||
cp TactilityC/*.txt "$find_target_dir"
|
||||
cp TactilityC/*.md "$find_target_dir"
|
||||
|
||||
# TactilityFreeRtos
|
||||
tactilityfreertos_library_path=$library_path/TactilityFreeRtos
|
||||
mkdir -p "$tactilityfreertos_library_path/Include"
|
||||
find_target_dir="$build_dir/$tactilityfreertos_library_path"
|
||||
cp -r TactilityFreeRtos/Include/* "$find_target_dir/Include"
|
||||
cp TactilityFreeRtos/*.txt "$find_target_dir"
|
||||
cp TactilityFreeRtos/*.md "$find_target_dir"
|
||||
|
||||
# lvgl
|
||||
lvgl_library_path=$library_path/lvgl
|
||||
mkdir -p "$lvgl_library_path/Binary"
|
||||
mkdir -p "$lvgl_library_path/Include"
|
||||
cp build/esp-idf/lvgl/liblvgl.a "$lvgl_library_path/Binary/"
|
||||
find_target_dir="$build_dir/$lvgl_library_path"
|
||||
cd Libraries/lvgl
|
||||
find src/ -name '*.h' | cpio -pdm "$find_target_dir/Include"
|
||||
cd -
|
||||
cp Libraries/lvgl/lvgl.h "$find_target_dir/Include"
|
||||
cp Libraries/lvgl/lv_version.h "$find_target_dir/Include"
|
||||
cp Libraries/lvgl/LICENCE.txt "$lvgl_library_path/LICENSE.txt"
|
||||
cp Libraries/lvgl/src/lv_conf_kconfig.h "$lvgl_library_path/Include/lv_conf.h"
|
||||
|
||||
# elf_loader
|
||||
elf_loader_library_path="$library_path/elf_loader"
|
||||
mkdir -p "$elf_loader_library_path"
|
||||
cp Libraries/elf_loader/elf_loader.cmake "$elf_loader_library_path/"
|
||||
cp Libraries/elf_loader/license.txt "$elf_loader_library_path/"
|
||||
|
||||
cp Buildscripts/CMake/TactilitySDK.cmake "$target_path/"
|
||||
cp Buildscripts/CMake/CMakeLists.txt "$target_path/"
|
||||
printf '%s' "$ESP_IDF_VERSION" >> "$target_path/idf-version.txt"
|
||||
Reference in New Issue
Block a user