Skip to content

Commit a24d0f1

Browse files
committed
Merge branch 'dev' into release
2 parents da68f2e + 86da6a7 commit a24d0f1

File tree

174 files changed

+8326
-1745
lines changed

Some content is hidden

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

174 files changed

+8326
-1745
lines changed

.ci_files/anims_ofw.txt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,6 @@ Min level: 1
3636
Max level: 1
3737
Weight: 3
3838

39-
Name: L1_Happy_holidays_128x64
40-
Min butthurt: 0
41-
Max butthurt: 14
42-
Min level: 1
43-
Max level: 3
44-
Weight: 4
45-
4639
Name: L1_Read_books_128x64
4740
Min butthurt: 0
4841
Max butthurt: 8

.vscode/example/launch.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111
"args": {
1212
"useSingleResult": true,
1313
"env": {
14-
"PATH": "${workspaceFolder};${env:PATH}"
14+
"PATH": "${workspaceFolder};${env:PATH}",
15+
"FBT_QUIET": 1
1516
},
16-
"command": "./fbt get_blackmagic",
17+
"command": "fbt get_blackmagic",
1718
"description": "Get Blackmagic device",
1819
}
1920
}

CHANGELOG.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
### New changes
2-
* SubGHz: **Nice ON2E (Nice One)** support (by @assasinfil | PR #335)
3-
* SubGHz: Remove 467.75 From freq analyzer since it has too much noise (Frequency is still can be used, just excluded from FA to avoid false detections)
4-
* Archive and FileBrowser: **Fixed more navigation issues** (by @Willy-JL | PR #334)
5-
* Plugins -> SubGHz Bruteforcer: Fix Linear Delta 3 repeats (now its more stable and we will be sure signal is received correctly)
6-
* Plugins: Updated TOTP (Authenticator) [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator)
7-
* OFW: **Fix Cyfral & Metakom emulation (My temp fix removed and proper fix from OFW applied)**
8-
* OFW: BadUSB: disable CDC mode, USB mode switch fix
9-
* OFW: Updater visual fixes
2+
* Desktop: Autolock with PIN Code (by @Willy-JL | PR #338) - **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**
3+
* Desktop: Faster back button hold time for power off, was 2 seconds, now 1.3sec
4+
* GUI: Fix keyboard capitalization bug (by @Willy-JL | PR #362) (fixes #361)
5+
* Plugins: Added **SWD Probe** [(by g3gg0)](https://github.com/g3gg0/flipper-swd_probe) (moved from extra pack into main FW)
6+
* Plugins: Show RSSI in Weather Station app and in POCSAG Pager app
7+
* Plugins: Improve Tetris fall speed algorithm (by @p3ngu19z | PR #343)
8+
* Plugins: Add missing buttons into HID app, remove old keyboard app, move Bluetooth remote to Misc
9+
* Infrared: Assets update (by @amec0e | PR #340 / #357 / #358)
10+
* Misc: Typo combing (by @Round-Pi | PR #352)
11+
* OFW: Dolphin: drop holiday animation
12+
* OFW: fbt: FBT_QUIET option; docs on environment
13+
* OFW: Delete rwfiletest.bin on exit SDcard benchmark
14+
* OFW: Re-init NFC when starting the worker
15+
* OFW: Up toolchain version to 21
16+
* OFW: Display Mifare Classic data in NFC app
1017

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

ReadMe.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212

1313
Our goal is to make all features possible on this device without any limitations!
1414

15-
Please help us implement emulation for all Sub-GHz dynamic (rolling code) protocols!
16-
1715
<br>
1816

1917
### This software is for experimental purposes only and is not meant for any illegal activity/purposes. <br> We do not condone illegal activity and strongly encourage keeping transmissions to legal/valid uses allowed by law. <br> Also, this software is made without any support from Flipper Devices and is in no way related to the official devs.
@@ -56,7 +54,7 @@ Our Discord Community:
5654
Also check the changelog in releases for latest updates!
5755

5856
### Current modified and new Sub-GHz protocols list:
59-
Thanks to Official team (to thier SubGHz Developer, Skorp) for implementing decoders for these protocols.
57+
Thanks to Official team (to their SubGHz Developer, Skorp) for implementing decoders for these protocols.
6058

6159
Encoders/sending made by Eng1n33r & @xMasterX:
6260

@@ -118,7 +116,6 @@ You can support us by using links or addresses below:
118116
- ESP8266 Deauther plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module)
119117
- WiFi Scanner plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module)
120118
- MultiConverter plugin [(by theisolinearchip)](https://github.com/theisolinearchip/flipperzero_stuff)
121-
- USB Keyboard plugin [(by huuck)](https://github.com/huuck/FlipperZeroUSBKeyboard)
122119
- WAV Player [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) - Fixed and improved by [LTVA1](https://github.com/LTVA1/wav_player)
123120
- Barcode generator plugin [(original by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator) - [EAN-8 and refactoring](https://github.com/DarkFlippers/unleashed-firmware/pull/154) by @msvsergey
124121
- GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin)
@@ -142,6 +139,7 @@ You can support us by using links or addresses below:
142139
- Text Viewer [(by kowalski7cc & kyhwana)](https://github.com/kowalski7cc/flipper-zero-text-viewer/tree/refactor-text-app)
143140
- **UART Terminal** [(by cool4uma)](https://github.com/cool4uma/UART_Terminal/tree/main)
144141
- **ProtoView** [(by antirez)](https://github.com/antirez/protoview)
142+
- **SWD Probe** [(by g3gg0)](https://github.com/g3gg0/flipper-swd_probe)
145143

146144
Games:
147145
- DOOM (fixed) [(by p4nic4ttack)](https://github.com/p4nic4ttack/doom-flipper-zero/)
@@ -230,15 +228,16 @@ Games:
230228
# Where I can find IR, Sub-GHz, ... files, DBs, and other stuff?
231229
## [UberGuidoZ Playground - Large collection of files - Github](https://github.com/UberGuidoZ/Flipper)
232230
## [Awesome Flipper Zero - Github](https://github.com/djsime1/awesome-flipperzero)
233-
## [CAME-12bit, NICE-12bit, Linear-10bit, PT-2240 - Sub-GHz fixed code bruteforce](https://github.com/tobiabocchi/flipperzero-bruteforce)
234-
## [SMC5326, UNILARM - Sub-GHz fixed code bruteforce](https://github.com/Hong5489/flipperzero-gate-bruteforce)
235231

236232
<br>
237233
<br>
238234

239235
# Links
240236

241237
* Unofficial Discord: [discord.unleashedflip.com](https://discord.unleashedflip.com)
238+
* Hello world - plugin tutorial (English): [https://github.com/DroomOne/Flipper-Plugin-Tutorial](https://github.com/DroomOne/Flipper-Plugin-Tutorial)
239+
* Hello world - plugin tutorial (in Russian): [https://yakovlev.me/hello-flipper-zero/](https://yakovlev.me/hello-flipper-zero/)
240+
* CLion IDE - How to setup workspace for flipper firmware development: [https://krasovs.ky/2022/11/01/flipper-zero-clion.html](https://krasovs.ky/2022/11/01/flipper-zero-clion.html)
242241
* Docs by atmanos / How to write your own app (outdated API): [https://flipper.atmanos.com/docs/overview/intro](https://flipper.atmanos.com/docs/overview/intro)
243242

244243
* Official Docs: [http://docs.flipperzero.one](http://docs.flipperzero.one)

SConstruct

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ if GetOption("fullenv") or any(
139139
basic_dist = distenv.DistCommand("fw_dist", distenv["DIST_DEPENDS"])
140140
distenv.Default(basic_dist)
141141

142-
dist_dir = distenv.GetProjetDirName()
142+
dist_dir = distenv.GetProjectDirName()
143143
fap_dist = [
144144
distenv.Install(
145145
distenv.Dir(f"#/dist/{dist_dir}/apps/debug_elf"),

applications/main/infrared/views/infrared_progress_view.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
extern "C" {
1111
#endif
1212

13-
/** Anonumous instance */
13+
/** Anonymous instance */
1414
typedef struct InfraredProgressView InfraredProgressView;
1515

1616
/** Callback for back button handling */

applications/main/lfrfid/scenes/lfrfid_scene_clear_t5577.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ static void lfrfid_clear_t5577_password_and_config_to_EM(LfRfid* app) {
1414
T55xxTiming* t55xxtiming = malloc(sizeof(T55xxTiming));
1515
Popup* popup = app->popup;
1616
char curr_buf[32] = {};
17-
//TODO: use .txt file in resourses for passwords.
17+
//TODO: use .txt file in resources for passwords.
1818
const uint32_t default_passwords[] = {
1919
0x51243648, 0x000D8787, 0x19920427, 0x50524F58, 0xF9DCEBA0, 0x65857569, 0x05D73B9F,
2020
0x89A69E60, 0x314159E0, 0xAA55BBBB, 0xA5B4C3D2, 0x1C0B5848, 0x00434343, 0x444E4752,

applications/main/nfc/helpers/nfc_emv_parser.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* @param aid - AID number array
1010
* @param aid_len - AID length
1111
* @param aid_name - string to keep AID name
12-
* @return - true if AID found, false otherwies
12+
* @return - true if AID found, false otherwise
1313
*/
1414
bool nfc_emv_parser_get_aid_name(
1515
Storage* storage,
@@ -21,7 +21,7 @@ bool nfc_emv_parser_get_aid_name(
2121
* @param storage Storage instance
2222
* @param country_code - ISO 3166 country code
2323
* @param country_name - string to keep country name
24-
* @return - true if country found, false otherwies
24+
* @return - true if country found, false otherwise
2525
*/
2626
bool nfc_emv_parser_get_country_name(
2727
Storage* storage,
@@ -32,7 +32,7 @@ bool nfc_emv_parser_get_country_name(
3232
* @param storage Storage instance
3333
* @param currency_code - ISO 3166 currency code
3434
* @param currency_name - string to keep currency name
35-
* @return - true if currency found, false otherwies
35+
* @return - true if currency found, false otherwise
3636
*/
3737
bool nfc_emv_parser_get_currency_name(
3838
Storage* storage,

applications/main/nfc/nfc_cli.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ static void nfc_cli_detect(Cli* cli, FuriString* args) {
3232
while(!cmd_exit) {
3333
cmd_exit |= cli_cmd_interrupt_received(cli);
3434
if(furi_hal_nfc_detect(&dev_data, 400)) {
35-
printf("found: %s ", nfc_get_dev_type(dev_data.type));
35+
printf("Found: %s ", nfc_get_dev_type(dev_data.type));
3636
printf("UID length: %d, UID:", dev_data.uid_len);
3737
for(size_t i = 0; i < dev_data.uid_len; i++) {
3838
printf("%02X", dev_data.uid[i]);

applications/main/nfc/scenes/nfc_scene_config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ ADD_SCENE(nfc, mf_desfire_menu, MfDesfireMenu)
2929
ADD_SCENE(nfc, mf_desfire_data, MfDesfireData)
3030
ADD_SCENE(nfc, mf_desfire_app, MfDesfireApp)
3131
ADD_SCENE(nfc, mf_classic_read_success, MfClassicReadSuccess)
32+
ADD_SCENE(nfc, mf_classic_data, MfClassicData)
3233
ADD_SCENE(nfc, mf_classic_menu, MfClassicMenu)
3334
ADD_SCENE(nfc, mf_classic_emulate, MfClassicEmulate)
3435
ADD_SCENE(nfc, mf_classic_keys, MfClassicKeys)
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#include "../nfc_i.h"
2+
3+
void nfc_scene_mf_classic_data_on_enter(void* context) {
4+
Nfc* nfc = context;
5+
MfClassicType type = nfc->dev->dev_data.mf_classic_data.type;
6+
MfClassicData* data = &nfc->dev->dev_data.mf_classic_data;
7+
TextBox* text_box = nfc->text_box;
8+
9+
text_box_set_font(text_box, TextBoxFontHex);
10+
11+
int card_blocks = 0;
12+
if(type == MfClassicType1k) {
13+
card_blocks = MF_CLASSIC_1K_TOTAL_SECTORS_NUM * 4;
14+
} else if(type == MfClassicType4k) {
15+
// 16 sectors of 4 blocks each plus 8 sectors of 16 blocks each
16+
card_blocks = MF_CLASSIC_1K_TOTAL_SECTORS_NUM * 4 + 8 * 16;
17+
} else if(type == MfClassicTypeMini) {
18+
card_blocks = MF_MINI_TOTAL_SECTORS_NUM * 4;
19+
}
20+
21+
int bytes_written = 0;
22+
for(int block_num = 0; block_num < card_blocks; block_num++) {
23+
bool is_sec_trailer = mf_classic_is_sector_trailer(block_num);
24+
if(is_sec_trailer) {
25+
uint8_t sector_num = mf_classic_get_sector_by_block(block_num);
26+
MfClassicSectorTrailer* sec_tr =
27+
mf_classic_get_sector_trailer_by_sector(data, sector_num);
28+
// Key A
29+
for(size_t i = 0; i < sizeof(sec_tr->key_a); i += 2) {
30+
if((bytes_written % 8 == 0) && (bytes_written != 0)) {
31+
furi_string_push_back(nfc->text_box_store, '\n');
32+
}
33+
if(mf_classic_is_key_found(data, sector_num, MfClassicKeyA)) {
34+
furi_string_cat_printf(
35+
nfc->text_box_store, "%02X%02X ", sec_tr->key_a[i], sec_tr->key_a[i + 1]);
36+
} else {
37+
furi_string_cat_printf(nfc->text_box_store, "???? ");
38+
}
39+
bytes_written += 2;
40+
}
41+
// Access bytes
42+
for(size_t i = 0; i < MF_CLASSIC_ACCESS_BYTES_SIZE; i += 2) {
43+
if((bytes_written % 8 == 0) && (bytes_written != 0)) {
44+
furi_string_push_back(nfc->text_box_store, '\n');
45+
}
46+
if(mf_classic_is_block_read(data, block_num)) {
47+
furi_string_cat_printf(
48+
nfc->text_box_store,
49+
"%02X%02X ",
50+
sec_tr->access_bits[i],
51+
sec_tr->access_bits[i + 1]);
52+
} else {
53+
furi_string_cat_printf(nfc->text_box_store, "???? ");
54+
}
55+
bytes_written += 2;
56+
}
57+
// Key B
58+
for(size_t i = 0; i < sizeof(sec_tr->key_b); i += 2) {
59+
if((bytes_written % 8 == 0) && (bytes_written != 0)) {
60+
furi_string_push_back(nfc->text_box_store, '\n');
61+
}
62+
if(mf_classic_is_key_found(data, sector_num, MfClassicKeyB)) {
63+
furi_string_cat_printf(
64+
nfc->text_box_store, "%02X%02X ", sec_tr->key_b[i], sec_tr->key_b[i + 1]);
65+
} else {
66+
furi_string_cat_printf(nfc->text_box_store, "???? ");
67+
}
68+
bytes_written += 2;
69+
}
70+
} else {
71+
// Write data block
72+
for(size_t i = 0; i < MF_CLASSIC_BLOCK_SIZE; i += 2) {
73+
if((bytes_written % 8 == 0) && (bytes_written != 0)) {
74+
furi_string_push_back(nfc->text_box_store, '\n');
75+
}
76+
if(mf_classic_is_block_read(data, block_num)) {
77+
furi_string_cat_printf(
78+
nfc->text_box_store,
79+
"%02X%02X ",
80+
data->block[block_num].value[i],
81+
data->block[block_num].value[i + 1]);
82+
} else {
83+
furi_string_cat_printf(nfc->text_box_store, "???? ");
84+
}
85+
bytes_written += 2;
86+
}
87+
}
88+
}
89+
text_box_set_text(text_box, furi_string_get_cstr(nfc->text_box_store));
90+
91+
view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox);
92+
}
93+
94+
bool nfc_scene_mf_classic_data_on_event(void* context, SceneManagerEvent event) {
95+
UNUSED(context);
96+
UNUSED(event);
97+
return false;
98+
}
99+
100+
void nfc_scene_mf_classic_data_on_exit(void* context) {
101+
Nfc* nfc = context;
102+
103+
// Clean view
104+
text_box_reset(nfc->text_box);
105+
furi_string_reset(nfc->text_box_store);
106+
}

applications/main/nfc/scenes/nfc_scene_nfc_data_info.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ void nfc_scene_nfc_data_info_on_enter(void* context) {
1414
NfcDeviceData* dev_data = &nfc->dev->dev_data;
1515
NfcProtocol protocol = dev_data->protocol;
1616
uint8_t text_scroll_height = 0;
17-
if((protocol == NfcDeviceProtocolMifareDesfire) || (protocol == NfcDeviceProtocolMifareUl)) {
17+
if((protocol == NfcDeviceProtocolMifareDesfire) || (protocol == NfcDeviceProtocolMifareUl) ||
18+
(protocol == NfcDeviceProtocolMifareClassic)) {
1819
widget_add_button_element(
1920
widget, GuiButtonTypeRight, "More", nfc_scene_nfc_data_info_widget_callback, nfc);
2021
text_scroll_height = 52;
@@ -136,6 +137,9 @@ bool nfc_scene_nfc_data_info_on_event(void* context, SceneManagerEvent event) {
136137
} else if(protocol == NfcDeviceProtocolMifareUl) {
137138
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightData);
138139
consumed = true;
140+
} else if(protocol == NfcDeviceProtocolMifareClassic) {
141+
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicData);
142+
consumed = true;
139143
}
140144
}
141145
}

applications/main/nfc/scenes/nfc_scene_saved_menu.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ bool nfc_scene_saved_menu_on_event(void* context, SceneManagerEvent event) {
151151
application_info_present = nfc_supported_card_verify_and_parse(dev_data);
152152
}
153153

154+
FURI_LOG_I("nfc", "application_info_present: %d", application_info_present);
155+
154156
if(application_info_present) {
155157
scene_manager_next_scene(nfc->scene_manager, NfcSceneDeviceInfo);
156158
} else {

applications/main/subghz/helpers/subghz_chat.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ struct SubGhzChatWorker {
99
SubGhzTxRxWorker* subghz_txrx;
1010

1111
volatile bool worker_running;
12-
volatile bool worker_stoping;
12+
volatile bool worker_stopping;
1313
FuriMessageQueue* event_queue;
1414
uint32_t last_time_rx_data;
1515

applications/main/subghz/helpers/subghz_frequency_analyzer_worker.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,15 @@ static int32_t subghz_frequency_analyzer_worker_thread(void* context) {
117117

118118
// First stage: coarse scan
119119
for(size_t i = 0; i < subghz_setting_get_frequency_count(instance->setting); i++) {
120-
uint32_t current_frequnecy = subghz_setting_get_frequency(instance->setting, i);
121-
if(furi_hal_subghz_is_frequency_valid(current_frequnecy) &&
122-
(current_frequnecy != 467750000) &&
120+
uint32_t current_frequency = subghz_setting_get_frequency(instance->setting, i);
121+
if(furi_hal_subghz_is_frequency_valid(current_frequency) &&
122+
(current_frequency != 467750000) &&
123123
!((furi_hal_subghz.radio_type == SubGhzRadioExternal) &&
124-
(current_frequnecy >= 311900000 && current_frequnecy <= 312200000))) {
124+
(current_frequency >= 311900000 && current_frequency <= 312200000))) {
125125
furi_hal_spi_acquire(furi_hal_subghz.spi_bus_handle);
126126
cc1101_switch_to_idle(furi_hal_subghz.spi_bus_handle);
127127
frequency =
128-
cc1101_set_frequency(furi_hal_subghz.spi_bus_handle, current_frequnecy);
128+
cc1101_set_frequency(furi_hal_subghz.spi_bus_handle, current_frequency);
129129

130130
cc1101_calibrate(furi_hal_subghz.spi_bus_handle);
131131
do {
@@ -330,4 +330,4 @@ void subghz_frequency_analyzer_worker_set_trigger_level(
330330

331331
float subghz_frequency_analyzer_worker_get_trigger_level(SubGhzFrequencyAnalyzerWorker* instance) {
332332
return instance->trigger_level;
333-
}
333+
}

applications/main/subghz/helpers/subghz_types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ typedef enum {
2323
/** SubGhzHopperState state */
2424
typedef enum {
2525
SubGhzHopperStateOFF,
26-
SubGhzHopperStateRunnig,
26+
SubGhzHopperStateRunning,
2727
SubGhzHopperStatePause,
2828
SubGhzHopperStateRSSITimeOut,
2929
} SubGhzHopperState;

applications/main/subghz/scenes/subghz_scene_read_raw.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {
368368

369369
float rssi = furi_hal_subghz_get_rssi();
370370

371-
if(float_is_equal(subghz->txrx->raw_threshold_rssi, SUBGHZ_RAW_TRESHOLD_MIN)) {
371+
if(float_is_equal(subghz->txrx->raw_threshold_rssi, SUBGHZ_RAW_THRESHOLD_MIN)) {
372372
subghz_read_raw_add_data_rssi(subghz->subghz_read_raw, rssi, true);
373373
subghz_protocol_raw_save_to_file_pause(
374374
(SubGhzProtocolDecoderRAW*)subghz->txrx->decoder_result, false);
@@ -421,4 +421,4 @@ void subghz_scene_read_raw_on_exit(void* context) {
421421

422422
//filter restoration
423423
subghz_receiver_set_filter(subghz->txrx->receiver, subghz->txrx->filter);
424-
}
424+
}

0 commit comments

Comments
 (0)