Skip to content

Commit 56adcf1

Browse files
committed
Merge branch 'dev' into release
2 parents ad27f87 + 9e94b1f commit 56adcf1

File tree

30 files changed

+456
-405
lines changed

30 files changed

+456
-405
lines changed

.drone.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ steps:
192192
Version: {{build.tag}}
193193
194194
195+
[-> Sponsor our project](https://boosty.to/mmxdev)
196+
197+
195198
[-Github - Changelog-](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/${DRONE_TAG})
196199
197200
@@ -220,7 +223,7 @@ steps:
220223
commands:
221224
- wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh"
222225
- chmod +x ./discord.sh
223-
- ./discord.sh --text 'New Unleashed firmware released!\n\nVersion - '${DRONE_TAG}'\n\n[[Github - Changelog]](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/'${DRONE_TAG}')\n\n[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)\n\n[-Download latest extra apps pack-](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip)\n\n[-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/'${DRONE_TAG}'/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=release-cfw&version='${DRONE_TAG}')\n\n[-Version without custom animations - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-'${DRONE_TAG}'n.tgz&channel=release-cfw&version='${DRONE_TAG}'n)\n\n[-Version with extra apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'e.tgz&channel=release-cfw&version='${DRONE_TAG}'e)'
226+
- ./discord.sh --text 'New Unleashed firmware released!\n\nVersion - '${DRONE_TAG}'\n\n[-> Sponsor our project](https://boosty.to/mmxdev)\n\n[[Github - Changelog]](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/'${DRONE_TAG}')\n\n[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)\n\n[-Download latest extra apps pack-](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip)\n\n[-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/'${DRONE_TAG}'/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=release-cfw&version='${DRONE_TAG}')\n\n[-Version without custom animations - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-'${DRONE_TAG}'n.tgz&channel=release-cfw&version='${DRONE_TAG}'n)\n\n[-Version with extra apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'e.tgz&channel=release-cfw&version='${DRONE_TAG}'e)'
224227

225228
- name: "Send extra pack build to telegram"
226229
image: appleboy/drone-telegram
@@ -385,6 +388,9 @@ steps:
385388
Commit: {{commit.message}}
386389
387390
391+
[-> Sponsor our project](https://boosty.to/mmxdev)
392+
393+
388394
[-Version with extra apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_BUILD_NUMBER}e.tgz&channel=dev-cfw&version=${DRONE_BUILD_NUMBER}e)
389395
390396
@@ -413,7 +419,7 @@ steps:
413419
commands:
414420
- wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh"
415421
- chmod +x ./discord.sh
416-
- ./discord.sh --text 'Unleashed firmware dev build successful!\n\nBuild - '${DRONE_BUILD_NUMBER}'\n\nSHA - '${DRONE_COMMIT_SHA}'\n\n[-Version with extra apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'e.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}'e)\n\n[-Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/dev/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}')'
422+
- ./discord.sh --text 'Unleashed firmware dev build successful!\n\nBuild - '${DRONE_BUILD_NUMBER}'\n\nSHA - '${DRONE_COMMIT_SHA}'\n\n[-> Sponsor our project](https://boosty.to/mmxdev)\n\n[-Version with extra apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'e.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}'e)\n\n[-Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/dev/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}')'
417423

418424
trigger:
419425
branch:

CHANGELOG.md

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,11 @@
11
### New changes
2-
* SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg
3-
* SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space
4-
* SubGHz: Security+ 2.0 -> Ability to send custom buttons codes (0x80, 0x81, 0xE2)
5-
* SubGHz: Remember last external module setting and power setting, so if you turn off flipper it will remember last external module settings (only for subghz app)
6-
* SubGHz: Fix issues when external module is not found but plugins tries to use it, now they will fallback to internal in that case
7-
* SubGHz: Fixed external CC1101 module power issues, added more checks, fixed issues when launching subghz favourites
8-
* SubGHz: Removed 330MHz from default freq hopper to make it faster, to change freq hopper settings and remove/add your freqs see -> [Instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md)
9-
* SubGHz: Small UI text fixes
10-
* GUI: Fix submenu elements text size, now we can fit more symbols
11-
* Plugins: Added delay and retries to avoid power issues in plugins -> WiFi Scanner, ESP8266 Deauther
12-
* Plugins: Update for WiFi Marauder companion -> `sniff` saves pcaps in `YourFlippersMicroSD/apps_data/marauder/` -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) - [(by tcpassos)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/pull/7)
13-
* Plugins: Removed `cdefines` from external plugins as it was not used in any way
14-
* Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379)
15-
* Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us)
16-
* OFW: iButton: Add support for Dallas DS1971
17-
* OFW: fbt: explicitly set dist suffix length, not depending on environment settings
18-
* OFW: NFC -> Skip the read when the card is not present
19-
* OFW: NFC -> Mark keys as not found when they couldn't auth successfully
20-
* OFW: Storage -> Require the trailing slash for root paths
21-
* OFW: gh: use shallow clones whenever possible
22-
* OFW: Add new nfc apdu cli command
23-
* OFW: Picopass standard KDF dictionary
24-
* OFW: Nfc: fixes for latest PVS-studio 7.23
25-
* OFW: Dolphin: new spring animation, weight adjust, drop winter animation.
26-
* OFW: fbt, faploader: minimal app module implementation -> **All plugins now should have** `apptype=FlipperAppType.EXTERNAL`
27-
* OFW: Fbt: fix broken resource deployment
28-
* OFW: NFC: Fix 0 block write possibility in Mifare Classic emulation
29-
* OFW: BadUSB: updated parser and added stringln, hold and release
30-
* OFW: Upside down / left handed orientation support
31-
* OFW: Embed assets in elf file
32-
* OFW: Dumb mode menu freeze fix
2+
* iButton: Add support for DS1420 (not fully tested)
3+
* Desktop: Option to set Tertiary favourite app (Hold right arrow on desktop) - **Desktop settings (pin code, favourite app, autolock time) will be resetted!!! Only one time after installing - due to changes in settings structure, after installing of this release desktop settings will not be reset with next release**
4+
* Desktop: Ability to disable favourite app (use last element in a main list `None (disable)`)
5+
* Desktop: Fix issue #387 (Ok button was showing invalid file error in dummy mode)
6+
* OFW PR: SD Driver: reinit sd card on error (by DrZlo13 | OFW PR 2493)
7+
* OFW PR: iButton -> Fix a typo: use right shift instead of greater than (by gsurkov | OFW PR 2506)
8+
* OFW: Optimize trailing slash check
339

3410
#### [🎲 Download latest extra apps pack](https://github.com/xMasterX/unleashed-extra-pack/archive/refs/heads/main.zip)
3511

@@ -38,7 +14,7 @@
3814
[-> Download qFlipper (official link)](https://flipperzero.one/update)
3915

4016
## Please support development of the project
41-
* Boosty: https://boosty.to/mmxdev
17+
* **Boosty** (patreon alternative): https://boosty.to/mmxdev
4218
* Ko-Fi: https://ko-fi.com/masterx
4319
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65
4420
* YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209

ReadMe.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ Our team is small and the guys are working on this project as much as they can s
111111
The amount of work done on this project is huge and we need your support, no matter how large or small. Even if you just say, "Thank you Unleashed firmware developers!" somewhere. Doing so will help us continue our work and will help drive us to make the firmware better every time.
112112
Also, regarding our releases, every build has and always will be free and open-source. There will be no paywall releases or closed-source apps within the firmware. As long as I am working on this project it will never happen.
113113
You can support us by using links or addresses below:
114-
* Boosty: https://boosty.to/mmxdev
114+
* **Boosty** (patreon alternative): https://boosty.to/mmxdev
115115
* Ko-Fi: https://ko-fi.com/masterx
116116
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65
117117
* YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209

applications/external/snake_game/application.fam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
App(
2-
appid="snake_game",
2+
appid="Snake",
33
name="Snake Game",
44
apptype=FlipperAppType.EXTERNAL,
55
entry_point="snake_game_app",

applications/services/desktop/animations/views/bubble_animation_view.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,11 @@ static bool bubble_animation_input_callback(InputEvent* event, void* context) {
126126
bubble_animation_activate(animation_view, false);
127127
}
128128

129-
if(event->key == InputKeyRight) {
129+
if(event->key == InputKeyRight && event->type == InputTypeShort) {
130130
/* Right button reserved for animation activation, so consume */
131131
consumed = true;
132-
if(event->type == InputTypeShort) {
133-
if(animation_view->interact_callback) {
134-
animation_view->interact_callback(animation_view->interact_callback_context);
135-
}
132+
if(animation_view->interact_callback) {
133+
animation_view->interact_callback(animation_view->interact_callback_context);
136134
}
137135
}
138136

applications/services/desktop/desktop_settings.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <toolbox/saved_struct.h>
99
#include <storage/storage.h>
1010

11-
#define DESKTOP_SETTINGS_VER (7)
11+
#define DESKTOP_SETTINGS_VER (8)
1212

1313
#define DESKTOP_SETTINGS_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME)
1414
#define DESKTOP_SETTINGS_MAGIC (0x17)
@@ -58,6 +58,7 @@ typedef struct {
5858
typedef struct {
5959
FavoriteApp favorite_primary;
6060
FavoriteApp favorite_secondary;
61+
FavoriteApp favorite_tertiary;
6162
PinCode pin_code;
6263
uint8_t is_locked;
6364
uint32_t auto_lock_delay_ms;

applications/services/desktop/scenes/desktop_scene_main.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,25 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
170170
}
171171
consumed = true;
172172
break;
173+
case DesktopMainEventOpenFavoriteTertiary:
174+
DESKTOP_SETTINGS_LOAD(&desktop->settings);
175+
if(desktop->settings.favorite_tertiary.is_external) {
176+
LoaderStatus status = loader_start(
177+
desktop->loader,
178+
FAP_LOADER_APP_NAME,
179+
desktop->settings.favorite_tertiary.name_or_path);
180+
if(status != LoaderStatusOk) {
181+
FURI_LOG_E(TAG, "loader_start failed: %d", status);
182+
}
183+
} else {
184+
LoaderStatus status = loader_start(
185+
desktop->loader, desktop->settings.favorite_tertiary.name_or_path, NULL);
186+
if(status != LoaderStatusOk) {
187+
FURI_LOG_E(TAG, "loader_start failed: %d", status);
188+
}
189+
}
190+
consumed = true;
191+
break;
173192
case DesktopAnimationEventCheckAnimation:
174193
animation_manager_check_blocking_process(desktop->animation_manager);
175194
consumed = true;

applications/services/desktop/views/desktop_events.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ typedef enum {
55
DesktopMainEventOpenArchive,
66
DesktopMainEventOpenFavoritePrimary,
77
DesktopMainEventOpenFavoriteSecondary,
8+
DesktopMainEventOpenFavoriteTertiary,
89
DesktopMainEventOpenMenu,
910
DesktopMainEventOpenDebug,
1011
DesktopMainEventOpenPassport,

applications/services/desktop/views/desktop_view_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ bool desktop_main_input_callback(InputEvent* event, void* context) {
6767
main_view->callback(DesktopMainEventOpenDebug, main_view->context);
6868
} else if(event->key == InputKeyLeft) {
6969
main_view->callback(DesktopMainEventOpenFavoriteSecondary, main_view->context);
70+
} else if(event->key == InputKeyRight) {
71+
main_view->callback(DesktopMainEventOpenFavoriteTertiary, main_view->context);
7072
} else if(event->key == InputKeyUp) {
7173
main_view->callback(DesktopMainEventLock, main_view->context);
7274
} else if(event->key == InputKeyOk) {

applications/services/storage/storage_glue.c

Lines changed: 19 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -73,29 +73,34 @@ uint32_t storage_data_get_timestamp(StorageData* storage) {
7373

7474
/****************** storage glue ******************/
7575

76-
bool storage_has_file(const File* file, StorageData* storage_data) {
77-
bool result = false;
76+
static StorageFile* storage_get_file(const File* file, StorageData* storage) {
77+
StorageFile* storage_file_ref = NULL;
7878

7979
StorageFileList_it_t it;
80-
for(StorageFileList_it(it, storage_data->files); !StorageFileList_end_p(it);
80+
for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it);
8181
StorageFileList_next(it)) {
82-
const StorageFile* storage_file = StorageFileList_cref(it);
82+
StorageFile* storage_file = StorageFileList_ref(it);
8383

8484
if(storage_file->file->file_id == file->file_id) {
85-
result = true;
85+
storage_file_ref = storage_file;
8686
break;
8787
}
8888
}
8989

90-
return result;
90+
return storage_file_ref;
91+
}
92+
93+
bool storage_has_file(const File* file, StorageData* storage) {
94+
return storage_get_file(file, storage) != NULL;
9195
}
9296

93-
bool storage_path_already_open(FuriString* path, StorageFileList_t array) {
97+
bool storage_path_already_open(FuriString* path, StorageData* storage) {
9498
bool open = false;
9599

96100
StorageFileList_it_t it;
97101

98-
for(StorageFileList_it(it, array); !StorageFileList_end_p(it); StorageFileList_next(it)) {
102+
for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it);
103+
StorageFileList_next(it)) {
99104
const StorageFile* storage_file = StorageFileList_cref(it);
100105

101106
if(furi_string_cmp(storage_file->path, path) == 0) {
@@ -108,43 +113,15 @@ bool storage_path_already_open(FuriString* path, StorageFileList_t array) {
108113
}
109114

110115
void storage_set_storage_file_data(const File* file, void* file_data, StorageData* storage) {
111-
StorageFile* founded_file = NULL;
112-
113-
StorageFileList_it_t it;
114-
115-
for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it);
116-
StorageFileList_next(it)) {
117-
StorageFile* storage_file = StorageFileList_ref(it);
118-
119-
if(storage_file->file->file_id == file->file_id) {
120-
founded_file = storage_file;
121-
break;
122-
}
123-
}
124-
125-
furi_check(founded_file != NULL);
126-
127-
founded_file->file_data = file_data;
116+
StorageFile* storage_file_ref = storage_get_file(file, storage);
117+
furi_check(storage_file_ref != NULL);
118+
storage_file_ref->file_data = file_data;
128119
}
129120

130121
void* storage_get_storage_file_data(const File* file, StorageData* storage) {
131-
const StorageFile* founded_file = NULL;
132-
133-
StorageFileList_it_t it;
134-
135-
for(StorageFileList_it(it, storage->files); !StorageFileList_end_p(it);
136-
StorageFileList_next(it)) {
137-
const StorageFile* storage_file = StorageFileList_cref(it);
138-
139-
if(storage_file->file->file_id == file->file_id) {
140-
founded_file = storage_file;
141-
break;
142-
}
143-
}
144-
145-
furi_check(founded_file != NULL);
146-
147-
return founded_file->file_data;
122+
StorageFile* storage_file_ref = storage_get_file(file, storage);
123+
furi_check(storage_file_ref != NULL);
124+
return storage_file_ref->file_data;
148125
}
149126

150127
void storage_push_storage_file(File* file, FuriString* path, StorageData* storage) {

applications/services/storage/storage_glue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ struct StorageData {
6060
};
6161

6262
bool storage_has_file(const File* file, StorageData* storage_data);
63-
bool storage_path_already_open(FuriString* path, StorageFileList_t files);
63+
bool storage_path_already_open(FuriString* path, StorageData* storage_data);
6464

6565
void storage_set_storage_file_data(const File* file, void* file_data, StorageData* storage);
6666
void* storage_get_storage_file_data(const File* file, StorageData* storage);

0 commit comments

Comments
 (0)