diff --git a/TactilityC/Include/tt_app.h b/TactilityC/Include/tt_app.h index d36d622c..cefed07f 100644 --- a/TactilityC/Include/tt_app.h +++ b/TactilityC/Include/tt_app.h @@ -1,9 +1,11 @@ #pragma once +#include + #include #include -#include "tt_app_manifest.h" +#include #ifdef __cplusplus extern "C" { @@ -11,6 +13,44 @@ extern "C" { typedef void* AppHandle; +/** Important: These values must map to tt::app::Result values exactly */ +typedef enum { + APP_RESULT_OK = 0, + APP_RESULT_CANCELLED = 1, + APP_RESULT_ERROR = 2 +} AppResult; + +typedef unsigned int AppLaunchId; + +/** Important: These function types must map to t::app types exactly */ +typedef void* (*AppCreateData)(); +typedef void (*AppDestroyData)(void* data); +typedef void (*AppOnCreate)(AppHandle app, void* _Nullable data); +typedef void (*AppOnDestroy)(AppHandle app, void* _Nullable data); +typedef void (*AppOnShow)(AppHandle app, void* _Nullable data, lv_obj_t* parent); +typedef void (*AppOnHide)(AppHandle app, void* _Nullable data); +typedef void (*AppOnResult)(AppHandle app, void* _Nullable data, AppLaunchId launchId, AppResult result, BundleHandle resultData); + +typedef struct { + /** The application can allocate data to re-use later (e.g. struct with state) */ + AppCreateData _Nullable createData; + /** If createData is specified, this one must be specified too */ + AppDestroyData _Nullable destroyData; + /** Called when the app is launched (started) */ + AppOnCreate _Nullable onCreate; + /** Called when the app is exited (stopped) */ + AppOnDestroy _Nullable onDestroy; + /** Called when the app is about to be shown to the user (app becomes visible) */ + AppOnShow _Nullable onShow; + /** Called when the app is about to be invisible to the user (e.g. other app was launched by this app, and this app goes to the background) */ + AppOnHide _Nullable onHide; + /** Called when the app receives a result after launching another app */ + AppOnResult _Nullable onResult; +} AppRegistration; + +/** This is used to register the manifest of an external app. */ +void tt_app_register(const AppRegistration app); + /** @return the bundle that belongs to this application, or null if it wasn't started with parameters. */ BundleHandle _Nullable tt_app_get_parameters(AppHandle handle); diff --git a/TactilityC/Include/tt_app_manifest.h b/TactilityC/Include/tt_app_manifest.h deleted file mode 100644 index a7657e90..00000000 --- a/TactilityC/Include/tt_app_manifest.h +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once - -#include "tt_bundle.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** Important: These values must map to tt::app::Result values exactly */ -typedef enum { - APP_RESULT_OK = 0, - APP_RESULT_CANCELLED = 1, - APP_RESULT_ERROR = 2 -} AppResult; - -typedef void* AppHandle; - -typedef unsigned int AppLaunchId; - -/** Important: These function types must map to t::app types exactly */ -typedef void* (*AppCreateData)(); -typedef void (*AppDestroyData)(void* data); -typedef void (*AppOnCreate)(AppHandle app, void* _Nullable data); -typedef void (*AppOnDestroy)(AppHandle app, void* _Nullable data); -typedef void (*AppOnShow)(AppHandle app, void* _Nullable data, lv_obj_t* parent); -typedef void (*AppOnHide)(AppHandle app, void* _Nullable data); -typedef void (*AppOnResult)(AppHandle app, void* _Nullable data, AppLaunchId launchId, AppResult result, BundleHandle resultData); - -typedef struct { - /** The application can allocate data to re-use later (e.g. struct with state) */ - AppCreateData _Nullable createData; - /** If createData is specified, this one must be specified too */ - AppDestroyData _Nullable destroyData; - /** Called when the app is launched (started) */ - AppOnCreate _Nullable onCreate; - /** Called when the app is exited (stopped) */ - AppOnDestroy _Nullable onDestroy; - /** Called when the app is about to be shown to the user (app becomes visible) */ - AppOnShow _Nullable onShow; - /** Called when the app is about to be invisible to the user (e.g. other app was launched by this app, and this app goes to the background) */ - AppOnHide _Nullable onHide; - /** Called when the app receives a result after launching another app */ - AppOnResult _Nullable onResult; -} ExternalAppManifest; - -/** This is used to register the manifest of an external app. */ -void tt_app_register(const ExternalAppManifest* manifest); - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/TactilityC/Source/tt_app.cpp b/TactilityC/Source/tt_app.cpp index 104d5fd5..0dd0a9a4 100644 --- a/TactilityC/Source/tt_app.cpp +++ b/TactilityC/Source/tt_app.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include extern "C" { @@ -10,6 +11,25 @@ constexpr auto* TAG = "tt_app"; #define HANDLE_AS_APP_CONTEXT(handle) ((tt::app::AppContext*)(handle)) +void tt_app_register( + const AppRegistration appRegistration +) { +#ifdef ESP_PLATFORM + assert((appRegistration.createData == nullptr) == (appRegistration.destroyData == nullptr)); + tt::app::setElfAppParameters( + appRegistration.createData, + appRegistration.destroyData, + appRegistration.onCreate, + appRegistration.onDestroy, + appRegistration.onShow, + appRegistration.onHide, + reinterpret_cast(appRegistration.onResult) + ); +#else + tt_crash("TactilityC is not intended for PC/Simulator"); +#endif +} + BundleHandle _Nullable tt_app_get_parameters(AppHandle handle) { return (BundleHandle)HANDLE_AS_APP_CONTEXT(handle)->getParameters().get(); } diff --git a/TactilityC/Source/tt_app_manifest.cpp b/TactilityC/Source/tt_app_manifest.cpp deleted file mode 100644 index 9e38deb9..00000000 --- a/TactilityC/Source/tt_app_manifest.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "tt_app_manifest.h" - -#include -#include - -extern "C" { - -constexpr auto TAG = "tt_app"; - -void tt_app_register( - const ExternalAppManifest* manifest -) { -#ifdef ESP_PLATFORM - assert((manifest->createData == nullptr) == (manifest->destroyData == nullptr)); - tt::app::setElfAppParameters( - manifest->createData, - manifest->destroyData, - manifest->onCreate, - manifest->onDestroy, - manifest->onShow, - manifest->onHide, - reinterpret_cast(manifest->onResult) - ); -#else - tt_crash("TactilityC is not intended for PC/Simulator"); -#endif -} - -} diff --git a/TactilityC/Source/tt_init.cpp b/TactilityC/Source/tt_init.cpp index 8c865039..1ac208c6 100644 --- a/TactilityC/Source/tt_init.cpp +++ b/TactilityC/Source/tt_init.cpp @@ -2,7 +2,6 @@ #include "tt_app.h" #include "tt_app_alertdialog.h" -#include "tt_app_manifest.h" #include "tt_app_selectiondialog.h" #include "tt_bundle.h" #include "tt_file.h"