Kernel improvements (#468)
* **New Features** * Plugin-style modules for platforms and devices with start/stop lifecycle and a runtime-consumable device tree array. * **Refactor** * Consolidated initialization into a kernel/module startup flow. * Generated devicetree artifacts moved to the build Generated directory. * **Changes** * Removed legacy no-op registration hooks and I2C lock/unlock wrappers. * Driver ownership and private state moved to explicit module/owner model. * Added ERROR_NOT_ALLOWED error code.
This commit is contained in:
committed by
GitHub
parent
d62314f41f
commit
c9185740d7
@@ -1 +0,0 @@
|
||||
Generated/
|
||||
+21
-14
@@ -14,16 +14,23 @@ endif ()
|
||||
|
||||
set(DEVICETREE_LOCATION "${CMAKE_SOURCE_DIR}/Devices/${TACTILITY_DEVICE_ID}")
|
||||
|
||||
set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/Generated")
|
||||
# Ensure the directory is built in the correct CMake build phase
|
||||
# If the check is not done, then another directory is created in the root of the build folder.
|
||||
if (DEFINED CMAKE_CURRENT_BINARY_DIR)
|
||||
file(MAKE_DIRECTORY "${GENERATED_DIR}")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{ESP_IDF_VERSION})
|
||||
|
||||
idf_component_register(
|
||||
SRCS ${SOURCE_FILES} "${CMAKE_SOURCE_DIR}/Firmware/Generated/devicetree.c"
|
||||
SRCS ${SOURCE_FILES} "${GENERATED_DIR}/devicetree.c"
|
||||
REQUIRES Tactility TactilityC TactilityKernel PlatformEsp32 ${TACTILITY_DEVICE_PROJECT}
|
||||
)
|
||||
|
||||
else ()
|
||||
|
||||
add_executable(FirmwareSim ${SOURCE_FILES} "${CMAKE_SOURCE_DIR}/Firmware/Generated/devicetree.c")
|
||||
add_executable(FirmwareSim ${SOURCE_FILES} "${GENERATED_DIR}/devicetree.c")
|
||||
target_link_libraries(FirmwareSim PRIVATE
|
||||
Tactility
|
||||
TactilityCore
|
||||
@@ -38,22 +45,22 @@ else ()
|
||||
add_definitions(-D_Nonnull=)
|
||||
endif ()
|
||||
|
||||
file(MAKE_DIRECTORY "${CMAKE_SOURCE_DIR}/Firmware/Generated")
|
||||
|
||||
# Generate devicetree code and attach to Firmware component
|
||||
add_custom_target(AlwaysRun
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -f "${GENERATED_DIR}/devicetree.c"
|
||||
)
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_SOURCE_DIR}/Firmware/Generated/devicetree.c"
|
||||
"${CMAKE_SOURCE_DIR}/Firmware/Generated/devicetree.h"
|
||||
OUTPUT "${GENERATED_DIR}/devicetree.c"
|
||||
"${GENERATED_DIR}/devicetree.h"
|
||||
COMMAND pip install lark pyyaml
|
||||
COMMAND python "${CMAKE_SOURCE_DIR}/Buildscripts/DevicetreeCompiler/compile.py"
|
||||
"${DEVICETREE_LOCATION}" "Firmware/Generated"
|
||||
"${DEVICETREE_LOCATION}" "${GENERATED_DIR}"
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
DEPENDS "${DEVICETREE_LOCATION}/devicetree.yaml" # Optional: trigger rebuild if source changes
|
||||
DEPENDS AlwaysRun "${DEVICETREE_LOCATION}/devicetree.yaml" # AlwaysRun ensures it always gets built
|
||||
COMMENT "Generating devicetree source files..."
|
||||
)
|
||||
add_custom_target(Generated DEPENDS "${CMAKE_SOURCE_DIR}/Firmware/Generated/devicetree.c")
|
||||
set_source_files_properties("${CMAKE_SOURCE_DIR}/Firmware/Generated/devicetree.c" PROPERTIES GENERATED TRUE)
|
||||
set_source_files_properties("${CMAKE_SOURCE_DIR}/Firmware/Generated/devicetree.h" PROPERTIES GENERATED TRUE)
|
||||
add_custom_target(Generated DEPENDS "${GENERATED_DIR}/devicetree.c")
|
||||
set_source_files_properties("${GENERATED_DIR}/devicetree.c" PROPERTIES GENERATED TRUE)
|
||||
set_source_files_properties("${GENERATED_DIR}/devicetree.h" PROPERTIES GENERATED TRUE)
|
||||
# Update target for generated code
|
||||
target_sources(${COMPONENT_LIB} PRIVATE "${CMAKE_SOURCE_DIR}/Firmware/Generated/devicetree.c")
|
||||
target_include_directories(${COMPONENT_LIB} PRIVATE "${CMAKE_SOURCE_DIR}/Firmware/Generated")
|
||||
target_sources(${COMPONENT_LIB} PRIVATE "${GENERATED_DIR}/devicetree.c")
|
||||
target_include_directories(${COMPONENT_LIB} PRIVATE "${GENERATED_DIR}")
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
#include <tactility/driver.h>
|
||||
#include <devicetree.h>
|
||||
|
||||
// From the relevant platform
|
||||
extern struct Module platform_module;
|
||||
// From the relevant device
|
||||
extern struct Module device_module;
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
#include <tt_init.h>
|
||||
#else
|
||||
@@ -14,10 +19,6 @@ extern const tt::hal::Configuration hardwareConfiguration;
|
||||
|
||||
extern "C" {
|
||||
|
||||
extern void register_kernel_drivers();
|
||||
extern void register_platform_drivers();
|
||||
extern void register_device_drivers();
|
||||
|
||||
void app_main() {
|
||||
static const tt::Configuration config = {
|
||||
/**
|
||||
@@ -31,12 +32,7 @@ void app_main() {
|
||||
tt_init_tactility_c(); // ELF bindings for side-loading on ESP32
|
||||
#endif
|
||||
|
||||
register_kernel_drivers();
|
||||
register_platform_drivers();
|
||||
register_device_drivers();
|
||||
|
||||
devices_builtin_init();
|
||||
tt::run(config);
|
||||
tt::run(config, &platform_module, &device_module, devicetree_devices);
|
||||
}
|
||||
|
||||
} // extern
|
||||
Reference in New Issue
Block a user