diff --git a/CHANGELOG.md b/CHANGELOG.md index aa0af23adb..b3f4dbaab1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ - Reworks how communication with battery guage is done, improves reliability and fixes issues with battery percentage not showing - After installing firmware with this change, downgrading to old firmware will cause battery percentage to be blank - If you must downgrade firmware, use the [Guage Tool app](https://github.com/skotopes/flipperzero_gauge_tool) to unseal the guage +- OFW: Furi: RTC Alarm support (目覚め時計) (by @skotopes) + - Reworks RTC initialization to support Alarms functionality + - Older firmware will be unable to handle alarm, downgrading might be problematic + - If you must downgrade firmware, disable Alarm in Settings > Clock & Alarm first - OFW: JS: Modules backport & overhaul (by @portasynthinca3), backport of backport (by @Willy-JL & @xMasterX) - OFW backported some modules we had, added lots of new stuff, and overhauled many other things - Non-exhaustive list of changes to help you fix your scripts: @@ -47,7 +51,6 @@ - effort required to update old scripts using these: minimal - Added type definitions (typescript files for type checking in IDE, Flipper does not run typescript) - Documentation is incomplete and deprecated, from now on you should refer to type definitions (`applications/system/js_app/packages/fz-sdk`), those will always be correct - - Type definitions for extra modules we have that OFW doesn't will come later - GUI: Refactored TextInput illegal symbols (by @Willy-JL) - If your app used `text_input_add_illegal_symbols(text_input)` it should change to `text_input_show_illegal_symbols(text_input, true)` @@ -103,7 +106,9 @@ - Added typedocs for all extra JS modules in Momentum (by @Willy-JL) - RPC: Added ASCII event support (#284 by @Willy-JL) - FBT/SDK: New app flag UnloadAssetPacks to free RAM in heavy apps like NFC, MFKey, uPython (#260 by @Willy-JL) -- OFW: Settings: Clock editing & Alarm function (目覚め時計) (by @skotopes) +- Settings: + - OFW: Clock editing & Alarm function (目覚め時計) (by @skotopes) + - Add warnings for some settings you shouldn't touch like Debug, Sleep Method, Heap Trace (#296 by @Willy-JL) - BadKB: - OFW: Add linux/gnome badusb demo files (by @thomasnemer) - Add older qFlipper install demos for windows and macos (by @DXVVAY & @grugnoymeme) @@ -119,7 +124,6 @@ - Furi: - OFW: Add FuriEventLoop support for FuriEventFlag, simplify API (by @Skorpionm) - OFW: Put errno into TCB, better integration with libc (by @portasynthinca3) - - OFW: FuriHalRtc Alarm support (目覚め時計) (by @skotopes) ### Updated: - Apps: @@ -139,6 +143,7 @@ - CLI-GUI Bridge: Add more symbols to keyboard (#222 by @Willy-JL) - NRF24 Batch: Add Aeropac SN board txt file (by @vad7) - UL: Sub-GHz Bruteforcer: Add new protocols for existing dump option (by @xMasterX), use FW functions for top buttons (by @DerSkythe) + - UL: RFID/iButton Fuzzer: Add protocols Electra, Idteck, Gallagher, Nexwatch, refactor to make RFID protocols easier to add (by @SkeletonMan03), add more Dallas 1990 IDs (by @eblis) - UL: NRF24 Apps: Use string library compatible with OFW SDK (by @xMasterX) - UL: W5500 Ethernet: Various fixes and improvements (by @xMasterX) - OFW: SPI Mem Manager: Fixed UI rendering bug related to line breaks (by @portasynthinca3) @@ -150,6 +155,7 @@ - Decoding of URL-encoded URI characters (#267 by @jaylikesbunda) - SmartPoster record support (#275 by @Willy-JL) - Enable parsing NTAG I2C Plus 1k and 2k chips too (#237 by @RocketGod-git) + - NFC: Updated MFC dict, +100 keys from RRG proxmark3, +17 keys from Mifare Classic Tool - Added 6 new Mifare Classic keys from Bulgaria Hotel (#216 by @z3r0l1nk) - UL: Add iq aparts hotel key (by @xMasterX) - OFW/UL: Rename 'Detect Reader' to 'Extract MFC Keys' (by @bettse & @xMasterX) @@ -178,7 +184,9 @@ - Move more commands as plugins on SD, refactor plugin wrapper (#276 by @Willy-JL) - FBT: Optimize icons blob, scrub unused icons (#291 by @Willy-JL) - OFW: BadKB: Improve ChromeOS and GNOME demo scripts (by @kowalski7cc) -- OFW: GUI: Change dialog_ex text ownership model (by @skotopes) +- GUI: + - OFW: Change dialog_ex text ownership model (by @skotopes) + - Improve some error messages to be more clear, like Sub-GHz region missing and Main Menu .fap file missing (#296 by @Willy-JL) - OFW: CCID: App changes and improvements (by @kidbomb) - OFW: API: Exposed `view_dispatcher_get_event_loop` (by @CookiePLMonster) - Furi: @@ -199,6 +207,7 @@ - OFW: Fix detection of GProx II cards and false detection of other cards (by @Astrrra) - OFW: Fix Guard GProxII False Positive and 36-bit Parsing (by @zinongli) - OFW: GProxII Fix Writing and Rendering Conflict (by @zinongli) +- Asset Packer: Fix font terminator causing freezes/crashes, like in Marauder AP scan/list (#295 by @Willy-JL) - Desktop: - Fallback Poweroff prompt when power settings is unavailable (by @Willy-JL) - Sub-GHz: diff --git a/ReadMe.md b/ReadMe.md index 5552bdb86f..deadcccf1f 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,6 +1,12 @@

Momentum Firmware -

for Flipper Zero

+

With 5 passport icons: Angry, Lonely, Okay, Happy, Awesome

+

With added **better-pet** asset pack

+

- Many vanilla-friendly(dolphin) animations, every level unlocks at least 1 new animation

+
+

USE **BETTER-PET** BRANCH.

+

Dev branch is without any changes and I use it just to merge new updates from momentum

+

diff --git a/applications/external b/applications/external index 1b8f9fcf6c..861fe33513 160000 --- a/applications/external +++ b/applications/external @@ -1 +1 @@ -Subproject commit 1b8f9fcf6cd977dff6bc8192588e37c172bf07b4 +Subproject commit 861fe3351399f62a705bf3ebea3ca291b4319670 diff --git a/applications/main/nfc/resources/nfc/assets/mf_classic_dict.nfc b/applications/main/nfc/resources/nfc/assets/mf_classic_dict.nfc index c0b1a35e5c..0e7b62b471 100644 --- a/applications/main/nfc/resources/nfc/assets/mf_classic_dict.nfc +++ b/applications/main/nfc/resources/nfc/assets/mf_classic_dict.nfc @@ -278,6 +278,7 @@ AFBECD121004 763958704B78 # Onity S1 A/B 8A19D40CF2B5 +3961EA82C46D # 24-7 D21762B2DE3B 0E83A374B513 @@ -1955,6 +1956,15 @@ FC9418BF788B 4E4F584D2105 686B35333376 861861861861 +# Transport System Cracow / Polen +B071A76BA2E9 +B3A181BCA5F2 +3225942F7717 +80D00703C5FB +6DD510E080B1 +87529F30FC58 +B75C4FA614AE +42DC568C64F4 # Data from "the more the marriott" mifare project (colonelborkmundus) # aka The Horde # These keys seem to be from Vingcard / Saflok system which means they are diversified @@ -2257,12 +2267,179 @@ BD6AF9754C18 722F24F0722F # STS Hotel 2A 535453535453 +# Public transport in Sofia, Bulgaria (SKGT) +# upgraded to DESFire since January 2024 +# SKGT common +# Sector 15, key A +F618B3D7855A +# Sector 15, key B +F1AFA4DA949F +# SKGT multi-use ticket +# Sector 0 +67362DACE527 +633A010FA3C3 +# Sector 1 +F93C98655B9C +67EC0A47B0FB +# Sector 2 +54A028818AC7 +B2E87E53C5A0 +# Sector 3 +3E93CF0644B6 +79E12280E219 +# Sector 4 +2204B9FBF033 +4537FD238C8E +# Sector 5 +D1B44A9DF05F +CFA526835A1F +# Sector 6 +21CC007AD81C +C097D0A85446 +# Sector 7 +D2268262710F +730BB7B8B3DE +# Sector 8 +9FE7C5BE7DFF +61AE2D920C79 +# Sector 9 +78FCD4470C50 +B638CAF7357B +# Sector 10 +0DC1DD7C8EA2 +4C6A6866B934 +# Sector 11 +03DE2CEB2EA1 +93E0118B21ED +# Sector 12 +8FBCED387BF4 +F57CA95C6EDD +# Sector 13 +EF24FE3B4CF7 +8B44D303D62F +# Sector 14 +B1EA40B2CAA6 +3ABF8431003B +# Sector 15 - see above +# SKGT personalised subscription card +# Sector 0, 2, 16, key A +# Sector 8-14, 17-39, key A +# Sector 1, key A +# blue +F1DF0CA8948B +# yellow +7747B4912984 +# Sector 3, key A +# blue +09D556D57A4B +# yellow +3ED158C6934E +# Sector 4-7, key A +# blue +839DEDBFEC0D +# yellow +C694A9ED2F9E +# Sector 15 - see above +# Sector 0, 16, key B (blue) +81D55F4551B9 +# Sector 0, key B (yellow) +6E9A040C3C91 +# Sector 1, key B +# blue +5B72C63FB416 +# yellow +A3CDCED46371 +# Sector 2, key B +# blue +87A61433D026 +# yellow +9CD3A81F11AB +# Sector 3, key B +# blue +7070D331360C +# yellow +836C790F6E2C +# Sector 4-7, key B +# blue +7FE057787C4F +# yellow +FF59C6D13F88 +# Sector 8-14, 17-39, key B +536F6669614D +# Sector 15 - see above +# End of SKGT +# Hanoi Bus Rapid Transit - 1/2/3 A +AAAFBA10FC37 +C61F2C28DADF +23AACA30CBF2 +# Keys dumped from student ID (AGH Cracow - Poland), may be diversified +# Need to be verified +833E4F32589E +432D02DA59F3 +5C161CA2716F +F60B5F9666B8 +98EAC5321D2F +CC945E3FE5C4 +70783C436CF4 +2D186C7149A9 +5D60AC0939FC +93A5CE63C873 +87174550E900 +45675B25A3DA +F91750E629D5 +A3E662ABCDC8 +33D99E9FFA6A +FF7AABA39C61 +A8248C049BEA +C2AF731771C4 +9263B2E0DD80 +CE7FCCBBA5D8 +F8E385E5A2A0 +B27678B5C4AE +D68D7EBB9551 +7AB63F082328 +# Payment cards used by Eurest on certain campuses +7E2BC58168EB +# Shower cards provided by Seijsener +291A65CBEA7B +344A359BBAD9 +476572726974 +4D696368656C +4F3748E6C826 +69D40AF8B353 +72DEA10F21DF +74845AA8E3F1 +8C3C43EDCC55 +ACD30DFFB434 +D1A27C8EC5DF +F14D329CBDBE +# Hotel cards from Austria +AB287B3B4903 +7B0DEDA7E162 # +-----------------------------------------------------------------------------------------------------------------------------------+ # | https://github.com/ikarus23/MifareClassicTool/blob/master/Mifare%20Classic%20Tool/app/src/main/assets/key-files/extended-std.keys | # +-----------------------------------------------------------------------------------------------------------------------------------+ # UK London Office 435DF6296EC4 2338B4913222 +# Acces card of students, and more in Occitanie, France +E9A553102EA5 +F982E971CFED +1F42AB9159EE +BBFB836A48B8 +B5D170B2E8F5 +E76978A05F10 +0B1A995DD007 +650DB9CEDB6B +13E54B4448B7 +3E3540C2C273 +A76152840117 +066CCC7666BC +3C0B3AC3AFA3 +CCB541598D72 +1988B5D48EC3 +892EEF0D30FB +0FE5CE5CC640 # +----------------------------------------------------------------------------------------------+ # | https://github.com/UberGuidoZ/Flipper/blob/main/NFC/mf_classic_dict/mf_classic_dict_user.nfc | # +----------------------------------------------------------------------------------------------+ diff --git a/applications/main/subghz/subghz_i.c b/applications/main/subghz/subghz_i.c index 9b5e26bdf1..d8cf5240a1 100644 --- a/applications/main/subghz/subghz_i.c +++ b/applications/main/subghz/subghz_i.c @@ -51,7 +51,7 @@ void subghz_dialog_message_freq_error(SubGhz* subghz, SubGhzTx can_tx) { default: return; case SubGhzTxBlockedRegionNotProvisioned: - message_text = "Region is not\nprovisioned.\nUpdate firmware\nor bypass region."; + message_text = "Missing region file.\nReinstall firmware\nwith Web/App\nor bypass region."; break; case SubGhzTxBlockedRegion: message_text = "Frequency outside\nof region range.\nMNTM > Protocols\n> Bypass Region"; diff --git a/applications/services/cli/cli.c b/applications/services/cli/cli.c index e9c123081c..9756d1eef6 100644 --- a/applications/services/cli/cli.c +++ b/applications/services/cli/cli.c @@ -596,7 +596,7 @@ void cli_plugin_wrapper(const char* name, Cli* cli, FuriString* args, void* cont handler(cli, args, context); } else { printf( - "CLI plugin '%s' failed (code %" PRIu16 "), update firmware or check logs\r\n", + "CLI plugin '%s' failed (code %" PRIu16 "), reinstall firmware or check logs\r\n", name, error); } diff --git a/applications/services/loader/loader.c b/applications/services/loader/loader.c index 7efae76d1c..bcaa9b2509 100644 --- a/applications/services/loader/loader.c +++ b/applications/services/loader/loader.c @@ -107,7 +107,7 @@ static void loader_show_gui_error( Storage* storage = furi_record_open(RECORD_STORAGE); if(storage_sd_status(storage) == FSE_OK) { header = "Update needed"; - text = "Update firmware\nto run this app"; + text = "Reinstall firmware\nto run this app"; } else { header = "SD card needed"; text = "Install SD card\nto run this app"; diff --git a/applications/services/loader/loader_menu_storage.c b/applications/services/loader/loader_menu_storage.c index 8823ec2087..755ee12430 100644 --- a/applications/services/loader/loader_menu_storage.c +++ b/applications/services/loader/loader_menu_storage.c @@ -46,10 +46,10 @@ int32_t loader_menu_storage_settings(void* context) { dialog_ex_set_header(dialog_ex, "Update needed", 64, 0, AlignCenter, AlignTop); dialog_ex_set_text( dialog_ex, - "Update firmware\n" - "to run this app\n" + "Reinstall firmware\n" + "to run this app.\n" "Can format SD\n" - "here if needed", + "here if needed.", 3, 17, AlignLeft, diff --git a/applications/settings/system/system_settings.c b/applications/settings/system/system_settings.c index b853abd337..43163dc170 100644 --- a/applications/settings/system/system_settings.c +++ b/applications/settings/system/system_settings.c @@ -2,6 +2,21 @@ #include #include #include +#include + +enum VarItemListIndex { + VarItemListIndexHandOrient, + VarItemListIndexUnits, + VarItemListIndexTimeFormat, + VarItemListIndexDateFormat, + VarItemListIndexLogLevel, + VarItemListIndexLogDevice, + VarItemListIndexLogBaudRate, + VarItemListIndexDebug, + VarItemListIndexHeapTrace, + VarItemListIndexSleepMethod, + VarItemListIndexFileNaming, +}; const char* const log_level_text[] = { "Default", @@ -80,10 +95,11 @@ const char* const debug_text[] = { }; static void debug_changed(VariableItem* item) { + SystemSettings* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, debug_text[index]); if(index) { - furi_hal_rtc_set_flag(FuriHalRtcFlagDebug); + view_dispatcher_send_custom_event(app->view_dispatcher, VarItemListIndexDebug); } else { furi_hal_rtc_reset_flag(FuriHalRtcFlagDebug); } @@ -108,9 +124,13 @@ const uint32_t heap_trace_mode_value[] = { }; static void heap_trace_mode_changed(VariableItem* item) { + SystemSettings* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, heap_trace_mode_text[index]); furi_hal_rtc_set_heap_track_mode(heap_trace_mode_value[index]); + if(index) { + view_dispatcher_send_custom_event(app->view_dispatcher, VarItemListIndexHeapTrace); + } } const char* const measurement_units_text[] = { @@ -184,10 +204,11 @@ const char* const sleep_method[] = { }; static void sleep_method_changed(VariableItem* item) { + SystemSettings* app = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); variable_item_set_current_value_text(item, sleep_method[index]); if(index) { - furi_hal_rtc_set_flag(FuriHalRtcFlagLegacySleep); + view_dispatcher_send_custom_event(app->view_dispatcher, VarItemListIndexSleepMethod); } else { furi_hal_rtc_reset_flag(FuriHalRtcFlagLegacySleep); } @@ -213,6 +234,81 @@ static uint32_t system_settings_exit(void* context) { return VIEW_NONE; } +static bool system_settings_custom_event_callback(void* context, uint32_t event) { + furi_assert(context); + SystemSettings* app = context; + + VariableItem* item = variable_item_list_get(app->var_item_list, event); + DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS); + DialogMessage* msg = dialog_message_alloc(); + dialog_message_set_buttons(msg, "No", NULL, "Yes"); + + switch(event) { + case VarItemListIndexDebug: + dialog_message_set_header(msg, "Enable Debug?", 64, 4, AlignCenter, AlignTop); + dialog_message_set_text( + msg, + "This consumes 400% more\n" + "battery life. Don't use unless\n" + "you know exactly what\n" + "you're doing.", + 64, + 36, + AlignCenter, + AlignCenter); + if(dialog_message_show(dialogs, msg) == DialogMessageButtonRight) { + furi_hal_rtc_set_flag(FuriHalRtcFlagDebug); + } else { + variable_item_set_current_value_text(item, debug_text[0]); + variable_item_set_current_value_index(item, 0); + } + break; + case VarItemListIndexSleepMethod: + dialog_message_set_header(msg, "Disable DeepSleep?", 64, 4, AlignCenter, AlignTop); + dialog_message_set_text( + msg, + "Disabling will consume 400%\n" + "more battery life. Only\n" + "disable if you have a\n" + "specific reason.", + 64, + 36, + AlignCenter, + AlignCenter); + if(dialog_message_show(dialogs, msg) == DialogMessageButtonRight) { + furi_hal_rtc_set_flag(FuriHalRtcFlagLegacySleep); + } else { + variable_item_set_current_value_text(item, sleep_method[0]); + variable_item_set_current_value_index(item, 0); + } + break; + case VarItemListIndexHeapTrace: + dialog_message_set_header(msg, "Enable Heap Trace?", 64, 4, AlignCenter, AlignTop); + dialog_message_set_text( + msg, + "Will use more RAM and might\n" + "cause Out Of Memory errors.\n" + "Don't enable without a\n" + "specific reason.", + 64, + 36, + AlignCenter, + AlignCenter); + if(dialog_message_show(dialogs, msg) != DialogMessageButtonRight) { + furi_hal_rtc_set_heap_track_mode(heap_trace_mode_value[0]); + variable_item_set_current_value_text(item, heap_trace_mode_text[0]); + variable_item_set_current_value_index(item, 0); + } + break; + default: + break; + } + + dialog_message_free(msg); + furi_record_close(RECORD_DIALOGS); + return true; +} + SystemSettings* system_settings_alloc(void) { SystemSettings* app = malloc(sizeof(SystemSettings)); @@ -221,6 +317,8 @@ SystemSettings* system_settings_alloc(void) { app->view_dispatcher = view_dispatcher_alloc(); view_dispatcher_set_event_callback_context(app->view_dispatcher, app); + view_dispatcher_set_custom_event_callback( + app->view_dispatcher, system_settings_custom_event_callback); view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); diff --git a/lib/toolbox/name_generator.c b/lib/toolbox/name_generator.c index ea6213d986..1700006e7b 100644 --- a/lib/toolbox/name_generator.c +++ b/lib/toolbox/name_generator.c @@ -15,25 +15,9 @@ const char* const name_generator_left[] = { }; const char* const name_generator_right[] = { - "bidet", - "sus", - "fed", - "moroder", - "bobr", - "chomik", - "sidorovich", - "stalker", - "yapper", - "bnuuy", - "jezyk", - "juzyk", - "cult", - "pp", - "zalaz", - "breeky", - "bunker" - "pingwin", - "kot", + "bidet", "sus", "fed", "moroder", "bobr", "chomik", "sidorovich", + "stalker", "yapper", "bnuuy", "jezyk", "juzyk", "cult", "pp", + "zalaz", "breeky", "bunker", "pingwin", "kot", }; void name_generator_make_auto_datetime( diff --git a/scripts/asset_packer.py b/scripts/asset_packer.py index dda625fc32..6f3187d774 100644 --- a/scripts/asset_packer.py +++ b/scripts/asset_packer.py @@ -119,6 +119,7 @@ def pack_font(src: pathlib.Path, dst: pathlib.Path): .decode("unicode_escape") .encode("latin_1") ) + font += b"\0" dst.with_suffix(".u8f").write_bytes(font) elif src.suffix == ".u8f": if not dst.is_file():