diff --git a/applications/services/applications.h b/applications/services/applications.h index 7dbb7063f..b155745f5 100644 --- a/applications/services/applications.h +++ b/applications/services/applications.h @@ -62,7 +62,7 @@ extern const FlipperInternalApplication FLIPPER_ARCHIVE; /* Settings list * Spawned by loader */ -extern const FlipperInternalApplication FLIPPER_SETTINGS_APPS[]; +extern const FlipperExternalApplication FLIPPER_SETTINGS_APPS[]; extern const size_t FLIPPER_SETTINGS_APPS_COUNT; /* External Menu Apps list diff --git a/applications/services/bt/application.fam b/applications/services/bt/application.fam index 0cdffa3b5..d871029de 100644 --- a/applications/services/bt/application.fam +++ b/applications/services/bt/application.fam @@ -14,7 +14,7 @@ App( ], stack_size=1 * 1024, order=1000, - sdk_headers=["bt_service/bt.h"], + sdk_headers=["bt_service/bt.h", "bt_settings.h"], ) App( diff --git a/applications/services/desktop/application.fam b/applications/services/desktop/application.fam index da6e2b802..1e9de3d70 100644 --- a/applications/services/desktop/application.fam +++ b/applications/services/desktop/application.fam @@ -14,4 +14,5 @@ App( conflicts=["updater"], stack_size=2 * 1024, order=60, + sdk_headers=["desktop_settings.h"], ) diff --git a/applications/services/desktop/desktop_settings.h b/applications/services/desktop/desktop_settings.h index 1f25367c6..918cf81da 100644 --- a/applications/services/desktop/desktop_settings.h +++ b/applications/services/desktop/desktop_settings.h @@ -53,6 +53,10 @@ typedef struct { typedef Keybind Keybinds[KeybindTypeCount][KeybindKeyCount]; +#ifdef __cplusplus +extern "C" { +#endif + bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x); bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x); @@ -60,3 +64,7 @@ bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x); bool DESKTOP_KEYBINDS_SAVE(Keybinds* x, size_t size); bool DESKTOP_KEYBINDS_LOAD(Keybinds* x, size_t size); + +#ifdef __cplusplus +} +#endif diff --git a/applications/services/expansion/application.fam b/applications/services/expansion/application.fam index dbdde0a52..b489cd235 100644 --- a/applications/services/expansion/application.fam +++ b/applications/services/expansion/application.fam @@ -5,6 +5,8 @@ App( cdefines=["SRV_EXPANSION"], sdk_headers=[ "expansion.h", + "expansion_i.h", + "expansion_settings.h", ], requires=["rpc_start"], provides=["expansion_settings"], diff --git a/applications/services/expansion/expansion_i.h b/applications/services/expansion/expansion_i.h index 13a496252..b4be4b0d6 100644 --- a/applications/services/expansion/expansion_i.h +++ b/applications/services/expansion/expansion_i.h @@ -3,4 +3,12 @@ #include "expansion_settings.h" #include "expansion.h" +#ifdef __cplusplus +extern "C" { +#endif + ExpansionSettings* expansion_get_settings(Expansion* instance); + +#ifdef __cplusplus +} +#endif diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index fffea2866..ba3e2402d 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -26,6 +26,12 @@ static const char* loader_find_external_application_by_name(const char* app_name } } + for(size_t i = 0; i < FLIPPER_SETTINGS_APPS_COUNT; i++) { + if(strcmp(FLIPPER_SETTINGS_APPS[i].name, app_name) == 0) { + return FLIPPER_SETTINGS_APPS[i].path; + } + } + return NULL; } @@ -321,7 +327,6 @@ static const FlipperInternalApplication* loader_find_application_by_name(const c const uint32_t count; } lists[] = { {FLIPPER_APPS, FLIPPER_APPS_COUNT}, - {FLIPPER_SETTINGS_APPS, FLIPPER_SETTINGS_APPS_COUNT}, {FLIPPER_SYSTEM_APPS, FLIPPER_SYSTEM_APPS_COUNT}, {FLIPPER_DEBUG_APPS, FLIPPER_DEBUG_APPS_COUNT}, }; diff --git a/applications/services/notification/application.fam b/applications/services/notification/application.fam index 82f94085a..c93dc4d6c 100644 --- a/applications/services/notification/application.fam +++ b/applications/services/notification/application.fam @@ -8,5 +8,5 @@ App( provides=["notification_settings"], stack_size=int(1.5 * 1024), order=100, - sdk_headers=["notification.h", "notification_messages.h"], + sdk_headers=["notification.h", "notification_messages.h", "notification_app.h"], ) diff --git a/applications/services/notification/notification_app.h b/applications/services/notification/notification_app.h index 40594fd47..71369e1c4 100644 --- a/applications/services/notification/notification_app.h +++ b/applications/services/notification/notification_app.h @@ -59,4 +59,12 @@ struct NotificationApp { NotificationSettings settings; }; +#ifdef __cplusplus +extern "C" { +#endif + void notification_message_save_settings(NotificationApp* app); + +#ifdef __cplusplus +} +#endif diff --git a/applications/services/power/application.fam b/applications/services/power/application.fam index f14d88c54..d390ab965 100644 --- a/applications/services/power/application.fam +++ b/applications/services/power/application.fam @@ -14,7 +14,7 @@ App( ], stack_size=1 * 1024, order=110, - sdk_headers=["power_service/power.h"], + sdk_headers=["power_service/power.h", "power_settings.h"], ) App( diff --git a/applications/services/power/power_settings.h b/applications/services/power/power_settings.h index 5c079369c..78782e0e0 100644 --- a/applications/services/power/power_settings.h +++ b/applications/services/power/power_settings.h @@ -7,6 +7,14 @@ #define POWER_SETTINGS_PATH CFG_PATH("power.settings") #define POWER_SETTINGS_MAGIC (0x21) +#ifdef __cplusplus +extern "C" { +#endif + bool SAVE_POWER_SETTINGS(uint32_t* x); bool LOAD_POWER_SETTINGS(uint32_t* x); + +#ifdef __cplusplus +} +#endif diff --git a/applications/settings/about/application.fam b/applications/settings/about/application.fam index d97817b43..7d22ce98a 100644 --- a/applications/settings/about/application.fam +++ b/applications/settings/about/application.fam @@ -10,4 +10,5 @@ App( ], stack_size=1 * 1024, order=1000, + fap_category="assets", ) diff --git a/applications/settings/bt_settings_app/application.fam b/applications/settings/bt_settings_app/application.fam index 7a985046b..d3330eaf5 100644 --- a/applications/settings/bt_settings_app/application.fam +++ b/applications/settings/bt_settings_app/application.fam @@ -9,4 +9,5 @@ App( "gui", ], order=10, + fap_category="assets", ) diff --git a/applications/settings/desktop_settings/application.fam b/applications/settings/desktop_settings/application.fam index d01a28d36..0506bfeca 100644 --- a/applications/settings/desktop_settings/application.fam +++ b/applications/settings/desktop_settings/application.fam @@ -9,4 +9,5 @@ App( ], stack_size=1 * 1024, order=50, + fap_category="assets", ) diff --git a/applications/settings/desktop_settings/helpers/pin.c b/applications/settings/desktop_settings/helpers/pin.c new file mode 100644 index 000000000..2e2791971 --- /dev/null +++ b/applications/settings/desktop_settings/helpers/pin.c @@ -0,0 +1 @@ +#include diff --git a/applications/settings/desktop_settings/views/desktop_view_pin_input.c b/applications/settings/desktop_settings/views/desktop_view_pin_input.c new file mode 100644 index 000000000..56ed98f53 --- /dev/null +++ b/applications/settings/desktop_settings/views/desktop_view_pin_input.c @@ -0,0 +1 @@ +#include diff --git a/applications/settings/dolphin_passport/application.fam b/applications/settings/dolphin_passport/application.fam index 4167e9dcd..9196b48b2 100644 --- a/applications/settings/dolphin_passport/application.fam +++ b/applications/settings/dolphin_passport/application.fam @@ -10,4 +10,5 @@ App( ], stack_size=1 * 1024, order=60, + fap_category="assets", ) diff --git a/applications/settings/expansion_settings_app/application.fam b/applications/settings/expansion_settings_app/application.fam index b253ad174..6483a33ab 100644 --- a/applications/settings/expansion_settings_app/application.fam +++ b/applications/settings/expansion_settings_app/application.fam @@ -6,4 +6,5 @@ App( requires=["gui"], stack_size=1 * 1024, order=80, + fap_category="assets", ) diff --git a/applications/settings/notification_settings/application.fam b/applications/settings/notification_settings/application.fam index 117a83870..f868fb178 100644 --- a/applications/settings/notification_settings/application.fam +++ b/applications/settings/notification_settings/application.fam @@ -6,4 +6,5 @@ App( requires=["notification"], stack_size=1 * 1024, order=20, + fap_category="assets", ) diff --git a/applications/settings/power_settings_app/about.c b/applications/settings/power_settings_app/about.c new file mode 100644 index 000000000..a6a605667 --- /dev/null +++ b/applications/settings/power_settings_app/about.c @@ -0,0 +1 @@ +#include \ No newline at end of file diff --git a/applications/settings/power_settings_app/application.fam b/applications/settings/power_settings_app/application.fam index 6f3589e1a..65f90b14f 100644 --- a/applications/settings/power_settings_app/application.fam +++ b/applications/settings/power_settings_app/application.fam @@ -11,4 +11,5 @@ App( flags=["InsomniaSafe"], stack_size=1 * 1024, order=40, + fap_category="assets", ) diff --git a/applications/settings/power_settings_app/power_settings_app.c b/applications/settings/power_settings_app/power_settings_app.c index 3f969128f..1f87b4959 100644 --- a/applications/settings/power_settings_app/power_settings_app.c +++ b/applications/settings/power_settings_app/power_settings_app.c @@ -1,5 +1,5 @@ #include "power_settings_app.h" -#include "../about/about.h" +#include static bool power_settings_custom_event_callback(void* context, uint32_t event) { furi_assert(context); diff --git a/applications/settings/storage_settings/application.fam b/applications/settings/storage_settings/application.fam index 1ba0ccd44..7b15bed65 100644 --- a/applications/settings/storage_settings/application.fam +++ b/applications/settings/storage_settings/application.fam @@ -6,4 +6,5 @@ App( requires=["storage"], stack_size=2 * 1024, order=30, + fap_category="assets", ) diff --git a/applications/settings/system/application.fam b/applications/settings/system/application.fam index 69a8f1239..f717892e5 100644 --- a/applications/settings/system/application.fam +++ b/applications/settings/system/application.fam @@ -6,4 +6,5 @@ App( requires=["gui", "locale"], stack_size=1 * 1024, order=70, + fap_category="assets", ) diff --git a/scripts/fbt/appmanifest.py b/scripts/fbt/appmanifest.py index d3cda9250..69d5fab7a 100644 --- a/scripts/fbt/appmanifest.py +++ b/scripts/fbt/appmanifest.py @@ -248,7 +248,6 @@ class AppBuildset: FlipperAppType.APP, FlipperAppType.DEBUG, FlipperAppType.ARCHIVE, - FlipperAppType.SETTINGS, FlipperAppType.STARTUP, ) EXTERNAL_APP_TYPES_MAP = { @@ -257,6 +256,7 @@ class AppBuildset: FlipperAppType.PLUGIN: True, FlipperAppType.DEBUG: True, FlipperAppType.MENUEXTERNAL: False, + FlipperAppType.SETTINGS: False, } @classmethod diff --git a/scripts/fbt_tools/fbt_apps.py b/scripts/fbt_tools/fbt_apps.py index 7e0aec5ea..6c7f212bc 100644 --- a/scripts/fbt_tools/fbt_apps.py +++ b/scripts/fbt_tools/fbt_apps.py @@ -23,20 +23,22 @@ class ApplicationsCGenerator: FlipperAppType.SYSTEM: ("FlipperInternalApplication", "FLIPPER_SYSTEM_APPS"), FlipperAppType.APP: ("FlipperInternalApplication", "FLIPPER_APPS"), FlipperAppType.DEBUG: ("FlipperInternalApplication", "FLIPPER_DEBUG_APPS"), - FlipperAppType.SETTINGS: ( - "FlipperInternalApplication", - "FLIPPER_SETTINGS_APPS", - ), FlipperAppType.STARTUP: ( "FlipperInternalOnStartHook", "FLIPPER_ON_SYSTEM_START", ), } - APP_EXTERNAL_TYPE = ( - "FlipperExternalApplication", - "FLIPPER_EXTERNAL_APPS", - ) + EXTERNAL_TYPE_MAP = { + FlipperAppType.MENUEXTERNAL: ( + "FlipperExternalApplication", + "FLIPPER_EXTERNAL_APPS", + ), + FlipperAppType.SETTINGS: ( + "FlipperExternalApplication", + "FLIPPER_SETTINGS_APPS", + ), + } def __init__(self, buildset: AppBuildset, autorun_app: str = ""): self.buildset = buildset @@ -100,12 +102,15 @@ class ApplicationsCGenerator: ] ) - entry_type, entry_block = self.APP_EXTERNAL_TYPE - external_apps = self.buildset.get_apps_of_type(FlipperAppType.MENUEXTERNAL) - contents.append(f"const {entry_type} {entry_block}[] = {{") - contents.append(",\n".join(map(self.get_external_app_descr, external_apps))) - contents.append("};") - contents.append(f"const size_t {entry_block}_COUNT = COUNT_OF({entry_block});") + for apptype in self.EXTERNAL_TYPE_MAP: + entry_type, entry_block = self.EXTERNAL_TYPE_MAP[apptype] + external_apps = self.buildset.get_apps_of_type(apptype) + contents.append(f"const {entry_type} {entry_block}[] = {{") + contents.append(",\n".join(map(self.get_external_app_descr, external_apps))) + contents.append("};") + contents.append( + f"const size_t {entry_block}_COUNT = COUNT_OF({entry_block});" + ) return "\n".join(contents) diff --git a/scripts/fbt_tools/fbt_extapps.py b/scripts/fbt_tools/fbt_extapps.py index d897dc8fb..f1dbaf9e7 100644 --- a/scripts/fbt_tools/fbt_extapps.py +++ b/scripts/fbt_tools/fbt_extapps.py @@ -488,6 +488,7 @@ def _gather_app_components(env, appname) -> AppDeploymentComponents: if host_app.apptype in [ FlipperAppType.EXTERNAL, FlipperAppType.MENUEXTERNAL, + FlipperAppType.SETTINGS, ]: components.add_app(host_app) else: diff --git a/scripts/ufbt/SConstruct b/scripts/ufbt/SConstruct index a26c2e404..45432a397 100644 --- a/scripts/ufbt/SConstruct +++ b/scripts/ufbt/SConstruct @@ -232,6 +232,7 @@ apps_to_build_as_faps = [ FlipperAppType.PLUGIN, FlipperAppType.EXTERNAL, FlipperAppType.MENUEXTERNAL, + FlipperAppType.SETTINGS, ] known_extapps = [ diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 2f1d35adf..0947eaff0 100644 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -5,12 +5,16 @@ Header,+,applications/main/archive/helpers/archive_helpers_ext.h,, Header,+,applications/main/subghz/subghz_fap.h,, Header,+,applications/services/applications.h,, Header,+,applications/services/bt/bt_service/bt.h,, +Header,+,applications/services/bt/bt_settings.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, +Header,+,applications/services/desktop/desktop_settings.h,, Header,+,applications/services/dialogs/dialogs.h,, Header,+,applications/services/dolphin/dolphin.h,, Header,+,applications/services/dolphin/helpers/dolphin_state.h,, Header,+,applications/services/expansion/expansion.h,, +Header,+,applications/services/expansion/expansion_i.h,, +Header,+,applications/services/expansion/expansion_settings.h,, Header,+,applications/services/gui/elements.h,, Header,+,applications/services/gui/gui.h,, Header,+,applications/services/gui/icon_i.h,, @@ -38,8 +42,10 @@ Header,+,applications/services/loader/firmware_api/firmware_api.h,, Header,+,applications/services/loader/loader.h,, Header,+,applications/services/locale/locale.h,, Header,+,applications/services/notification/notification.h,, +Header,+,applications/services/notification/notification_app.h,, Header,+,applications/services/notification/notification_messages.h,, Header,+,applications/services/power/power_service/power.h,, +Header,+,applications/services/power/power_settings.h,, Header,+,applications/services/rpc/rpc_app.h,, Header,+,applications/services/storage/storage.h,, Header,+,build/icons/assets_icons.h,, @@ -291,6 +297,10 @@ Header,+,targets/furi_hal_include/furi_hal_usb_hid.h,, Header,+,targets/furi_hal_include/furi_hal_usb_hid_u2f.h,, Header,+,targets/furi_hal_include/furi_hal_version.h,, Header,+,targets/furi_hal_include/furi_hal_vibro.h,, +Function,+,DESKTOP_KEYBINDS_LOAD,_Bool,"Keybinds*, size_t" +Function,+,DESKTOP_KEYBINDS_SAVE,_Bool,"Keybinds*, size_t" +Function,-,DESKTOP_SETTINGS_LOAD,_Bool,DesktopSettings* +Function,+,DESKTOP_SETTINGS_SAVE,_Bool,DesktopSettings* Function,-,LL_ADC_CommonDeInit,ErrorStatus,ADC_Common_TypeDef* Function,-,LL_ADC_CommonInit,ErrorStatus,"ADC_Common_TypeDef*, const LL_ADC_CommonInitTypeDef*" Function,-,LL_ADC_CommonStructInit,void,LL_ADC_CommonInitTypeDef* @@ -388,6 +398,8 @@ Function,-,LL_USART_DeInit,ErrorStatus,const USART_TypeDef* Function,+,LL_USART_Init,ErrorStatus,"USART_TypeDef*, const LL_USART_InitTypeDef*" Function,-,LL_USART_StructInit,void,LL_USART_InitTypeDef* Function,-,LL_mDelay,void,uint32_t +Function,+,LOAD_POWER_SETTINGS,_Bool,uint32_t* +Function,+,SAVE_POWER_SETTINGS,_Bool,uint32_t* Function,-,SK6805_get_led_count,uint8_t, Function,-,SK6805_init,void, Function,-,SK6805_set_led_color,void,"uint8_t, uint8_t, uint8_t, uint8_t" @@ -714,6 +726,8 @@ Function,+,bt_set_profile_adv_name,void,"Bt*, const char*, ..." Function,+,bt_set_profile_mac_address,void,"Bt*, const uint8_t[6]" Function,+,bt_set_profile_pairing_method,void,"Bt*, GapPairing" Function,+,bt_set_status_changed_callback,void,"Bt*, BtStatusChangedCallback, void*" +Function,-,bt_settings_load,_Bool,BtSettings* +Function,+,bt_settings_save,_Bool,BtSettings* Function,+,buffered_file_stream_alloc,Stream*,Storage* Function,+,buffered_file_stream_close,_Bool,Stream* Function,+,buffered_file_stream_get_error,FS_Error,Stream* @@ -955,7 +969,10 @@ Function,-,exp2f,float,float Function,-,exp2l,long double,long double Function,+,expansion_disable,void,Expansion* Function,+,expansion_enable,void,Expansion* +Function,+,expansion_get_settings,ExpansionSettings*,Expansion* Function,+,expansion_set_listen_serial,void,"Expansion*, FuriHalSerialId" +Function,-,expansion_settings_load,_Bool,ExpansionSettings* +Function,+,expansion_settings_save,_Bool,ExpansionSettings* Function,-,expf,float,float Function,-,expl,long double,long double Function,-,explicit_bzero,void,"void*, size_t" @@ -2727,6 +2744,7 @@ Function,+,notification_internal_message,void,"NotificationApp*, const Notificat Function,+,notification_internal_message_block,void,"NotificationApp*, const NotificationSequence*" Function,+,notification_message,void,"NotificationApp*, const NotificationSequence*" Function,+,notification_message_block,void,"NotificationApp*, const NotificationSequence*" +Function,+,notification_message_save_settings,void,NotificationApp* Function,-,nrand48,long,unsigned short[3] Function,-,on_exit,int,"void (*)(int, void*), void*" Function,+,onewire_host_alloc,OneWireHost*,const GpioPin* @@ -3646,7 +3664,7 @@ Variable,-,FLIPPER_ON_SYSTEM_START,const FlipperInternalOnStartHook[], Variable,-,FLIPPER_ON_SYSTEM_START_COUNT,const size_t, Variable,-,FLIPPER_SERVICES,const FlipperInternalApplication[], Variable,-,FLIPPER_SERVICES_COUNT,const size_t, -Variable,+,FLIPPER_SETTINGS_APPS,const FlipperInternalApplication[], +Variable,+,FLIPPER_SETTINGS_APPS,const FlipperExternalApplication[], Variable,+,FLIPPER_SETTINGS_APPS_COUNT,const size_t, Variable,-,FLIPPER_SYSTEM_APPS,const FlipperInternalApplication[], Variable,-,FLIPPER_SYSTEM_APPS_COUNT,const size_t,