Skip to content

Commit 9188bf0

Browse files
committed
Merge branch 'dev' into release
2 parents f33ed59 + e756c68 commit 9188bf0

File tree

105 files changed

+1220
-2315
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+1220
-2315
lines changed

.ci_files/anims_ofw.txt

+38-31
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,12 @@ Min level: 1
3636
Max level: 1
3737
Weight: 3
3838

39-
Name: L2_Furippa2_128x64
39+
Name: L2_Wake_up_128x64
4040
Min butthurt: 0
41-
Max butthurt: 6
41+
Max butthurt: 12
4242
Min level: 2
43-
Max level: 2
44-
Weight: 3
45-
46-
Name: L3_Furippa3_128x64
47-
Min butthurt: 0
48-
Max butthurt: 6
49-
Min level: 3
5043
Max level: 3
51-
Weight: 3
44+
Weight: 4
5245

5346
Name: L1_Read_books_128x64
5447
Min butthurt: 0
@@ -57,13 +50,6 @@ Min level: 1
5750
Max level: 1
5851
Weight: 3
5952

60-
Name: L2_Hacking_pc_128x64
61-
Min butthurt: 0
62-
Max butthurt: 8
63-
Min level: 2
64-
Max level: 2
65-
Weight: 3
66-
6753
Name: L1_Cry_128x64
6854
Min butthurt: 8
6955
Max butthurt: 13
@@ -90,27 +76,34 @@ Min butthurt: 0
9076
Max butthurt: 9
9177
Min level: 1
9278
Max level: 3
93-
Weight: 5
79+
Weight: 4
9480

9581
Name: L1_Painting_128x64
9682
Min butthurt: 0
9783
Max butthurt: 7
9884
Min level: 1
9985
Max level: 3
100-
Weight: 4
86+
Weight: 3
10187

102-
Name: L3_Hijack_radio_128x64
103-
Min butthurt: 0
104-
Max butthurt: 8
105-
Min level: 3
88+
Name: L1_Leaving_sad_128x64
89+
Min butthurt: 14
90+
Max butthurt: 14
91+
Min level: 1
10692
Max level: 3
10793
Weight: 3
10894

109-
Name: L3_Lab_research_128x54
95+
Name: L2_Furippa2_128x64
11096
Min butthurt: 0
111-
Max butthurt: 10
112-
Min level: 3
113-
Max level: 3
97+
Max butthurt: 6
98+
Min level: 2
99+
Max level: 2
100+
Weight: 3
101+
102+
Name: L2_Hacking_pc_128x64
103+
Min butthurt: 0
104+
Max butthurt: 8
105+
Min level: 2
106+
Max level: 2
114107
Weight: 3
115108

116109
Name: L2_Soldering_128x64
@@ -120,9 +113,23 @@ Min level: 2
120113
Max level: 2
121114
Weight: 3
122115

123-
Name: L1_Leaving_sad_128x64
124-
Min butthurt: 14
125-
Max butthurt: 14
126-
Min level: 1
116+
Name: L3_Furippa3_128x64
117+
Min butthurt: 0
118+
Max butthurt: 6
119+
Min level: 3
120+
Max level: 3
121+
Weight: 3
122+
123+
Name: L3_Hijack_radio_128x64
124+
Min butthurt: 0
125+
Max butthurt: 8
126+
Min level: 3
127+
Max level: 3
128+
Weight: 3
129+
130+
Name: L3_Lab_research_128x54
131+
Min butthurt: 0
132+
Max butthurt: 10
133+
Min level: 3
127134
Max level: 3
128135
Weight: 3

CHANGELOG.md

+23-13
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,45 @@
11
### New changes
2-
* Plugins: SubGHz Bruteforcer -> Allow to select two bytes in `BF existing dump` ! Change between byte selection size by pressing Up button
3-
* Plugins: SubGHz Bruteforcer -> Add CAME 315Mhz
4-
* SubGHz: Partially fix strange issue with subghz decode raw
5-
* Xmas / New Year animation (by @Svaarich)
6-
* OFW: NFC: fix NTAG203 info scene
7-
* OFW: Fix crash in iButton notifications routine
8-
* OFW: U2F HID descriptor fix
9-
* OFW: USB HID: fix key name
10-
* OFW: SubGhz: unit_test modification of text files to one frequency and modulation
2+
* API: Version was changed due to breaking changes - from 8.x to 10.x - Extra pack was updated, download it by using link below ([- Download latest extra apps pack](https://download-directory.github.io/?url=https://github.com/xMasterX/unleashed-extra-pack/tree/main/apps))
3+
* SubGHz: Improve signals visibility in history
4+
* Infrared: Update universal remote assets **(TV universal remote now works much faster)** (by @Amec0e)
5+
* Plugins: Weather Station -> Improved signal info dashboard, added signal age counter. (PR by @LY2NEO | #197) (Modified and improved by @xMasterX, new icons and UI changes recommendations by @Karator in OFW PR 2087)
6+
* Plugins: Weather Station -> Oregon2 - add support for RTHN129
7+
* Plugins: iButton Fuzzer -> change minimal delay (after @Tobirg successfully verified stability with lower delay)
8+
* Plugins: iButton Fuzzer + RFID Fuzzer -> Attempt to fix crash when exiting from uids from file attack
9+
* OFW: NFC bug fixes **(breaking change, affects API version)**
10+
* OFW: UART echo: fix race conditions causing null pointer dereference
11+
* OFW: File browser base folder **(breaking change, affects API version)**
12+
* OFW: Change NFC emulation screens
13+
* OFW: SubGhz: add RPC error
14+
* OFW: FuriHal, Power, UnitTests: battery charging voltage limit API
15+
* OFW: Fix logical error in storage script
16+
* OFW: VCP session close fix
17+
* OFW: Dolphin: new animation L2_Wake_up_128x64
18+
* OFW: FuriHal: add i2c unit tests
1119

1220
#### [🎲 Download latest extra apps pack](https://download-directory.github.io/?url=https://github.com/xMasterX/unleashed-extra-pack/tree/main/apps)
1321

1422
[-> How to install firmware](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)
1523

16-
[-> Download qFlipper 1.2.1 (allows .tgz installation) (official link)](https://update.flipperzero.one/builds/qFlipper/1.2.1/)
24+
[-> Download qFlipper (official link)](https://flipperzero.one/update)
1725

1826
## Please support development of the project
19-
* Boosty: https://boosty.to/mmxdev
2027
* destream (100 EUR min): https://destream.net/live/MMX/donate
2128
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65
29+
* YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209
2230
* USDT(TRC20): `TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`
2331
* BCH: `qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3`
2432
* ETH/BSC/ERC20-Tokens: `darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`)
2533
* BTC: `bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9`
2634
* DOGE: `D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv`
2735
* LTC: `ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9`
2836
* XMR (Monero): `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn`
37+
* TON: `EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf`
2938

3039
**Note: To avoid issues with .dfu, prefer installing using .tgz with qFlipper, web updater or by self update package, all needed assets will be installed**
3140

32-
Self-update package (update from microSD) - `flipper-z-f7-update-(version).zip` or download `.tgz` for iOS mobile app / qFlipper
41+
**Recommended option - Web Updater**
42+
43+
Self-update package (update from microSD) - `flipper-z-f7-update-(version).zip` or download `.tgz` for mobile app / qFlipper
3344

34-
Update using qFlipper (1.2.0+) is now possible with `.tgz` update package! Also you can use Web Updater or self-update package.
3545

ReadMe.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,17 @@ Also check changelog in releases for latest updates!
6767
- Star Line
6868

6969
## Please support development of the project
70-
* Boosty: https://boosty.to/mmxdev
7170
* destream (100 EUR min): https://destream.net/live/MMX/donate
7271
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65
72+
* YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209
7373
* USDT(TRC20): `TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`
7474
* BCH: `qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3`
7575
* ETH/BSC/ERC20-Tokens: `darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`)
7676
* BTC: `bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9`
7777
* DOGE: `D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv`
7878
* LTC: `ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9`
7979
* XMR (Monero): `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn`
80+
* TON: `EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf`
8081

8182
### Community apps included:
8283

applications/debug/file_browser_test/file_browser_app.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ FileBrowserApp* file_browser_app_alloc(char* arg) {
4848

4949
app->file_path = furi_string_alloc();
5050
app->file_browser = file_browser_alloc(app->file_path);
51-
file_browser_configure(app->file_browser, "*", true, &I_badusb_10px, true);
51+
file_browser_configure(app->file_browser, "*", NULL, true, &I_badusb_10px, true);
5252

5353
view_dispatcher_add_view(
5454
app->view_dispatcher, FileBrowserAppViewStart, widget_get_view(app->widget));

applications/debug/uart_echo/uart_echo.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -215,26 +215,26 @@ static UartEchoApp* uart_echo_app_alloc() {
215215
view_dispatcher_add_view(app->view_dispatcher, 0, app->view);
216216
view_dispatcher_switch_to_view(app->view_dispatcher, 0);
217217

218+
app->worker_thread = furi_thread_alloc_ex("UsbUartWorker", 1024, uart_echo_worker, app);
219+
furi_thread_start(app->worker_thread);
220+
218221
// Enable uart listener
219222
furi_hal_console_disable();
220223
furi_hal_uart_set_br(FuriHalUartIdUSART1, 115200);
221224
furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, uart_echo_on_irq_cb, app);
222225

223-
app->worker_thread = furi_thread_alloc_ex("UsbUartWorker", 1024, uart_echo_worker, app);
224-
furi_thread_start(app->worker_thread);
225-
226226
return app;
227227
}
228228

229229
static void uart_echo_app_free(UartEchoApp* app) {
230230
furi_assert(app);
231231

232+
furi_hal_console_enable(); // this will also clear IRQ callback so thread is no longer referenced
233+
232234
furi_thread_flags_set(furi_thread_get_id(app->worker_thread), WorkerEventStop);
233235
furi_thread_join(app->worker_thread);
234236
furi_thread_free(app->worker_thread);
235237

236-
furi_hal_console_enable();
237-
238238
// Free views
239239
view_dispatcher_remove_view(app->view_dispatcher, 0);
240240

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#include <stdio.h>
2+
#include <furi.h>
3+
#include <furi_hal.h>
4+
#include <lp5562_reg.h>
5+
#include "../minunit.h"
6+
7+
#define DATA_SIZE 4
8+
9+
static void furi_hal_i2c_int_setup() {
10+
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
11+
}
12+
13+
static void furi_hal_i2c_int_teardown() {
14+
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
15+
}
16+
17+
MU_TEST(furi_hal_i2c_int_1b) {
18+
bool ret = false;
19+
uint8_t data_one = 0;
20+
21+
// 1 byte: read, write, read
22+
ret = furi_hal_i2c_read_reg_8(
23+
&furi_hal_i2c_handle_power,
24+
LP5562_ADDRESS,
25+
LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
26+
&data_one,
27+
LP5562_I2C_TIMEOUT);
28+
mu_assert(ret, "0 read_reg_8 failed");
29+
mu_assert(data_one != 0, "0 invalid data");
30+
ret = furi_hal_i2c_write_reg_8(
31+
&furi_hal_i2c_handle_power,
32+
LP5562_ADDRESS,
33+
LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
34+
data_one,
35+
LP5562_I2C_TIMEOUT);
36+
mu_assert(ret, "1 write_reg_8 failed");
37+
ret = furi_hal_i2c_read_reg_8(
38+
&furi_hal_i2c_handle_power,
39+
LP5562_ADDRESS,
40+
LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
41+
&data_one,
42+
LP5562_I2C_TIMEOUT);
43+
mu_assert(ret, "2 read_reg_8 failed");
44+
mu_assert(data_one != 0, "2 invalid data");
45+
}
46+
47+
MU_TEST(furi_hal_i2c_int_3b) {
48+
bool ret = false;
49+
uint8_t data_many[DATA_SIZE] = {0};
50+
51+
// 3 byte: read, write, read
52+
data_many[0] = LP5562_CHANNEL_BLUE_CURRENT_REGISTER;
53+
ret = furi_hal_i2c_tx(
54+
&furi_hal_i2c_handle_power, LP5562_ADDRESS, data_many, 1, LP5562_I2C_TIMEOUT);
55+
mu_assert(ret, "3 tx failed");
56+
ret = furi_hal_i2c_rx(
57+
&furi_hal_i2c_handle_power,
58+
LP5562_ADDRESS,
59+
data_many + 1,
60+
DATA_SIZE - 1,
61+
LP5562_I2C_TIMEOUT);
62+
mu_assert(ret, "4 rx failed");
63+
for(size_t i = 0; i < DATA_SIZE; i++) mu_assert(data_many[i] != 0, "4 invalid data_many");
64+
65+
ret = furi_hal_i2c_tx(
66+
&furi_hal_i2c_handle_power, LP5562_ADDRESS, data_many, DATA_SIZE, LP5562_I2C_TIMEOUT);
67+
mu_assert(ret, "5 tx failed");
68+
69+
ret = furi_hal_i2c_tx(
70+
&furi_hal_i2c_handle_power, LP5562_ADDRESS, data_many, 1, LP5562_I2C_TIMEOUT);
71+
mu_assert(ret, "6 tx failed");
72+
ret = furi_hal_i2c_rx(
73+
&furi_hal_i2c_handle_power,
74+
LP5562_ADDRESS,
75+
data_many + 1,
76+
DATA_SIZE - 1,
77+
LP5562_I2C_TIMEOUT);
78+
mu_assert(ret, "7 rx failed");
79+
for(size_t i = 0; i < DATA_SIZE; i++) mu_assert(data_many[i] != 0, "7 invalid data_many");
80+
}
81+
82+
MU_TEST(furi_hal_i2c_int_1b_fail) {
83+
bool ret = false;
84+
uint8_t data_one = 0;
85+
86+
// 1 byte: fail, read, fail, write, fail, read
87+
data_one = 0;
88+
ret = furi_hal_i2c_read_reg_8(
89+
&furi_hal_i2c_handle_power,
90+
LP5562_ADDRESS + 0x10,
91+
LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
92+
&data_one,
93+
LP5562_I2C_TIMEOUT);
94+
mu_assert(!ret, "8 read_reg_8 failed");
95+
mu_assert(data_one == 0, "8 invalid data");
96+
ret = furi_hal_i2c_read_reg_8(
97+
&furi_hal_i2c_handle_power,
98+
LP5562_ADDRESS,
99+
LP5562_CHANNEL_BLUE_CURRENT_REGISTER,
100+
&data_one,
101+
LP5562_I2C_TIMEOUT);
102+
mu_assert(ret, "9 read_reg_8 failed");
103+
mu_assert(data_one != 0, "9 invalid data");
104+
}
105+
106+
MU_TEST_SUITE(furi_hal_i2c_int_suite) {
107+
MU_SUITE_CONFIGURE(&furi_hal_i2c_int_setup, &furi_hal_i2c_int_teardown);
108+
MU_RUN_TEST(furi_hal_i2c_int_1b);
109+
MU_RUN_TEST(furi_hal_i2c_int_3b);
110+
MU_RUN_TEST(furi_hal_i2c_int_1b_fail);
111+
}
112+
113+
int run_minunit_test_furi_hal() {
114+
MU_RUN_SUITE(furi_hal_i2c_int_suite);
115+
return MU_EXIT_CODE;
116+
}

applications/debug/unit_tests/minunit.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ void minunit_print_fail(const char* error);
316316
MU__SAFE_BLOCK( \
317317
double minunit_tmp_e; double minunit_tmp_r; minunit_assert++; minunit_tmp_e = (expected); \
318318
minunit_tmp_r = (result); \
319-
if(fabs(minunit_tmp_e - minunit_tmp_r) > MINUNIT_EPSILON) { \
319+
if(fabs(minunit_tmp_e - minunit_tmp_r) > (double)MINUNIT_EPSILON) { \
320320
int minunit_significant_figures = 1 - log10(MINUNIT_EPSILON); \
321321
snprintf( \
322322
minunit_last_message, \

applications/debug/unit_tests/nfc/nfc_test.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ static void mf_classic_generator_test(uint8_t uid_len, MfClassicType type) {
393393
"nfc_device_save == true assert failed\r\n");
394394
// Verify that key cache is saved
395395
FuriString* key_cache_name = furi_string_alloc();
396-
furi_string_set_str(key_cache_name, "/ext/nfc/cache/");
396+
furi_string_set_str(key_cache_name, "/ext/nfc/.cache/");
397397
for(size_t i = 0; i < uid_len; i++) {
398398
furi_string_cat_printf(key_cache_name, "%02X", uid[i]);
399399
}

0 commit comments

Comments
 (0)