Skip to content

Commit

Permalink
Merge branch 'dev' into release
Browse files Browse the repository at this point in the history
  • Loading branch information
xMasterX committed Feb 24, 2023
2 parents da68f2e + 86da6a7 commit a24d0f1
Show file tree
Hide file tree
Showing 174 changed files with 8,326 additions and 1,745 deletions.
7 changes: 0 additions & 7 deletions .ci_files/anims_ofw.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,6 @@ Min level: 1
Max level: 1
Weight: 3

Name: L1_Happy_holidays_128x64
Min butthurt: 0
Max butthurt: 14
Min level: 1
Max level: 3
Weight: 4

Name: L1_Read_books_128x64
Min butthurt: 0
Max butthurt: 8
Expand Down
5 changes: 3 additions & 2 deletions .vscode/example/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@
"args": {
"useSingleResult": true,
"env": {
"PATH": "${workspaceFolder};${env:PATH}"
"PATH": "${workspaceFolder};${env:PATH}",
"FBT_QUIET": 1
},
"command": "./fbt get_blackmagic",
"command": "fbt get_blackmagic",
"description": "Get Blackmagic device",
}
}
Expand Down
23 changes: 15 additions & 8 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
### New changes
* SubGHz: **Nice ON2E (Nice One)** support (by @assasinfil | PR #335)
* 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)
* Archive and FileBrowser: **Fixed more navigation issues** (by @Willy-JL | PR #334)
* Plugins -> SubGHz Bruteforcer: Fix Linear Delta 3 repeats (now its more stable and we will be sure signal is received correctly)
* Plugins: Updated TOTP (Authenticator) [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator)
* OFW: **Fix Cyfral & Metakom emulation (My temp fix removed and proper fix from OFW applied)**
* OFW: BadUSB: disable CDC mode, USB mode switch fix
* OFW: Updater visual fixes
* 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**
* Desktop: Faster back button hold time for power off, was 2 seconds, now 1.3sec
* GUI: Fix keyboard capitalization bug (by @Willy-JL | PR #362) (fixes #361)
* Plugins: Added **SWD Probe** [(by g3gg0)](https://github.com/g3gg0/flipper-swd_probe) (moved from extra pack into main FW)
* Plugins: Show RSSI in Weather Station app and in POCSAG Pager app
* Plugins: Improve Tetris fall speed algorithm (by @p3ngu19z | PR #343)
* Plugins: Add missing buttons into HID app, remove old keyboard app, move Bluetooth remote to Misc
* Infrared: Assets update (by @amec0e | PR #340 / #357 / #358)
* Misc: Typo combing (by @Round-Pi | PR #352)
* OFW: Dolphin: drop holiday animation
* OFW: fbt: FBT_QUIET option; docs on environment
* OFW: Delete rwfiletest.bin on exit SDcard benchmark
* OFW: Re-init NFC when starting the worker
* OFW: Up toolchain version to 21
* OFW: Display Mifare Classic data in NFC app

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

Expand Down
11 changes: 5 additions & 6 deletions ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@

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

Please help us implement emulation for all Sub-GHz dynamic (rolling code) protocols!

<br>

### 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.
Expand Down Expand Up @@ -56,7 +54,7 @@ Our Discord Community:
Also check the changelog in releases for latest updates!

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

Encoders/sending made by Eng1n33r & @xMasterX:

Expand Down Expand Up @@ -118,7 +116,6 @@ You can support us by using links or addresses below:
- ESP8266 Deauther plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module)
- WiFi Scanner plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module)
- MultiConverter plugin [(by theisolinearchip)](https://github.com/theisolinearchip/flipperzero_stuff)
- USB Keyboard plugin [(by huuck)](https://github.com/huuck/FlipperZeroUSBKeyboard)
- 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)
- 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
- GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin)
Expand All @@ -142,6 +139,7 @@ You can support us by using links or addresses below:
- Text Viewer [(by kowalski7cc & kyhwana)](https://github.com/kowalski7cc/flipper-zero-text-viewer/tree/refactor-text-app)
- **UART Terminal** [(by cool4uma)](https://github.com/cool4uma/UART_Terminal/tree/main)
- **ProtoView** [(by antirez)](https://github.com/antirez/protoview)
- **SWD Probe** [(by g3gg0)](https://github.com/g3gg0/flipper-swd_probe)

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

<br>
<br>

# Links

* Unofficial Discord: [discord.unleashedflip.com](https://discord.unleashedflip.com)
* Hello world - plugin tutorial (English): [https://github.com/DroomOne/Flipper-Plugin-Tutorial](https://github.com/DroomOne/Flipper-Plugin-Tutorial)
* Hello world - plugin tutorial (in Russian): [https://yakovlev.me/hello-flipper-zero/](https://yakovlev.me/hello-flipper-zero/)
* 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)
* 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)

* Official Docs: [http://docs.flipperzero.one](http://docs.flipperzero.one)
Expand Down
2 changes: 1 addition & 1 deletion SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ if GetOption("fullenv") or any(
basic_dist = distenv.DistCommand("fw_dist", distenv["DIST_DEPENDS"])
distenv.Default(basic_dist)

dist_dir = distenv.GetProjetDirName()
dist_dir = distenv.GetProjectDirName()
fap_dist = [
distenv.Install(
distenv.Dir(f"#/dist/{dist_dir}/apps/debug_elf"),
Expand Down
2 changes: 1 addition & 1 deletion applications/main/infrared/views/infrared_progress_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
extern "C" {
#endif

/** Anonumous instance */
/** Anonymous instance */
typedef struct InfraredProgressView InfraredProgressView;

/** Callback for back button handling */
Expand Down
2 changes: 1 addition & 1 deletion applications/main/lfrfid/scenes/lfrfid_scene_clear_t5577.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ static void lfrfid_clear_t5577_password_and_config_to_EM(LfRfid* app) {
T55xxTiming* t55xxtiming = malloc(sizeof(T55xxTiming));
Popup* popup = app->popup;
char curr_buf[32] = {};
//TODO: use .txt file in resourses for passwords.
//TODO: use .txt file in resources for passwords.
const uint32_t default_passwords[] = {
0x51243648, 0x000D8787, 0x19920427, 0x50524F58, 0xF9DCEBA0, 0x65857569, 0x05D73B9F,
0x89A69E60, 0x314159E0, 0xAA55BBBB, 0xA5B4C3D2, 0x1C0B5848, 0x00434343, 0x444E4752,
Expand Down
6 changes: 3 additions & 3 deletions applications/main/nfc/helpers/nfc_emv_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
* @param aid - AID number array
* @param aid_len - AID length
* @param aid_name - string to keep AID name
* @return - true if AID found, false otherwies
* @return - true if AID found, false otherwise
*/
bool nfc_emv_parser_get_aid_name(
Storage* storage,
Expand All @@ -21,7 +21,7 @@ bool nfc_emv_parser_get_aid_name(
* @param storage Storage instance
* @param country_code - ISO 3166 country code
* @param country_name - string to keep country name
* @return - true if country found, false otherwies
* @return - true if country found, false otherwise
*/
bool nfc_emv_parser_get_country_name(
Storage* storage,
Expand All @@ -32,7 +32,7 @@ bool nfc_emv_parser_get_country_name(
* @param storage Storage instance
* @param currency_code - ISO 3166 currency code
* @param currency_name - string to keep currency name
* @return - true if currency found, false otherwies
* @return - true if currency found, false otherwise
*/
bool nfc_emv_parser_get_currency_name(
Storage* storage,
Expand Down
2 changes: 1 addition & 1 deletion applications/main/nfc/nfc_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ static void nfc_cli_detect(Cli* cli, FuriString* args) {
while(!cmd_exit) {
cmd_exit |= cli_cmd_interrupt_received(cli);
if(furi_hal_nfc_detect(&dev_data, 400)) {
printf("found: %s ", nfc_get_dev_type(dev_data.type));
printf("Found: %s ", nfc_get_dev_type(dev_data.type));
printf("UID length: %d, UID:", dev_data.uid_len);
for(size_t i = 0; i < dev_data.uid_len; i++) {
printf("%02X", dev_data.uid[i]);
Expand Down
1 change: 1 addition & 0 deletions applications/main/nfc/scenes/nfc_scene_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ ADD_SCENE(nfc, mf_desfire_menu, MfDesfireMenu)
ADD_SCENE(nfc, mf_desfire_data, MfDesfireData)
ADD_SCENE(nfc, mf_desfire_app, MfDesfireApp)
ADD_SCENE(nfc, mf_classic_read_success, MfClassicReadSuccess)
ADD_SCENE(nfc, mf_classic_data, MfClassicData)
ADD_SCENE(nfc, mf_classic_menu, MfClassicMenu)
ADD_SCENE(nfc, mf_classic_emulate, MfClassicEmulate)
ADD_SCENE(nfc, mf_classic_keys, MfClassicKeys)
Expand Down
106 changes: 106 additions & 0 deletions applications/main/nfc/scenes/nfc_scene_mf_classic_data.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#include "../nfc_i.h"

void nfc_scene_mf_classic_data_on_enter(void* context) {
Nfc* nfc = context;
MfClassicType type = nfc->dev->dev_data.mf_classic_data.type;
MfClassicData* data = &nfc->dev->dev_data.mf_classic_data;
TextBox* text_box = nfc->text_box;

text_box_set_font(text_box, TextBoxFontHex);

int card_blocks = 0;
if(type == MfClassicType1k) {
card_blocks = MF_CLASSIC_1K_TOTAL_SECTORS_NUM * 4;
} else if(type == MfClassicType4k) {
// 16 sectors of 4 blocks each plus 8 sectors of 16 blocks each
card_blocks = MF_CLASSIC_1K_TOTAL_SECTORS_NUM * 4 + 8 * 16;
} else if(type == MfClassicTypeMini) {
card_blocks = MF_MINI_TOTAL_SECTORS_NUM * 4;
}

int bytes_written = 0;
for(int block_num = 0; block_num < card_blocks; block_num++) {
bool is_sec_trailer = mf_classic_is_sector_trailer(block_num);
if(is_sec_trailer) {
uint8_t sector_num = mf_classic_get_sector_by_block(block_num);
MfClassicSectorTrailer* sec_tr =
mf_classic_get_sector_trailer_by_sector(data, sector_num);
// Key A
for(size_t i = 0; i < sizeof(sec_tr->key_a); i += 2) {
if((bytes_written % 8 == 0) && (bytes_written != 0)) {
furi_string_push_back(nfc->text_box_store, '\n');
}
if(mf_classic_is_key_found(data, sector_num, MfClassicKeyA)) {
furi_string_cat_printf(
nfc->text_box_store, "%02X%02X ", sec_tr->key_a[i], sec_tr->key_a[i + 1]);
} else {
furi_string_cat_printf(nfc->text_box_store, "???? ");
}
bytes_written += 2;
}
// Access bytes
for(size_t i = 0; i < MF_CLASSIC_ACCESS_BYTES_SIZE; i += 2) {
if((bytes_written % 8 == 0) && (bytes_written != 0)) {
furi_string_push_back(nfc->text_box_store, '\n');
}
if(mf_classic_is_block_read(data, block_num)) {
furi_string_cat_printf(
nfc->text_box_store,
"%02X%02X ",
sec_tr->access_bits[i],
sec_tr->access_bits[i + 1]);
} else {
furi_string_cat_printf(nfc->text_box_store, "???? ");
}
bytes_written += 2;
}
// Key B
for(size_t i = 0; i < sizeof(sec_tr->key_b); i += 2) {
if((bytes_written % 8 == 0) && (bytes_written != 0)) {
furi_string_push_back(nfc->text_box_store, '\n');
}
if(mf_classic_is_key_found(data, sector_num, MfClassicKeyB)) {
furi_string_cat_printf(
nfc->text_box_store, "%02X%02X ", sec_tr->key_b[i], sec_tr->key_b[i + 1]);
} else {
furi_string_cat_printf(nfc->text_box_store, "???? ");
}
bytes_written += 2;
}
} else {
// Write data block
for(size_t i = 0; i < MF_CLASSIC_BLOCK_SIZE; i += 2) {
if((bytes_written % 8 == 0) && (bytes_written != 0)) {
furi_string_push_back(nfc->text_box_store, '\n');
}
if(mf_classic_is_block_read(data, block_num)) {
furi_string_cat_printf(
nfc->text_box_store,
"%02X%02X ",
data->block[block_num].value[i],
data->block[block_num].value[i + 1]);
} else {
furi_string_cat_printf(nfc->text_box_store, "???? ");
}
bytes_written += 2;
}
}
}
text_box_set_text(text_box, furi_string_get_cstr(nfc->text_box_store));

view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox);
}

bool nfc_scene_mf_classic_data_on_event(void* context, SceneManagerEvent event) {
UNUSED(context);
UNUSED(event);
return false;
}

void nfc_scene_mf_classic_data_on_exit(void* context) {
Nfc* nfc = context;

// Clean view
text_box_reset(nfc->text_box);
furi_string_reset(nfc->text_box_store);
}
6 changes: 5 additions & 1 deletion applications/main/nfc/scenes/nfc_scene_nfc_data_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ void nfc_scene_nfc_data_info_on_enter(void* context) {
NfcDeviceData* dev_data = &nfc->dev->dev_data;
NfcProtocol protocol = dev_data->protocol;
uint8_t text_scroll_height = 0;
if((protocol == NfcDeviceProtocolMifareDesfire) || (protocol == NfcDeviceProtocolMifareUl)) {
if((protocol == NfcDeviceProtocolMifareDesfire) || (protocol == NfcDeviceProtocolMifareUl) ||
(protocol == NfcDeviceProtocolMifareClassic)) {
widget_add_button_element(
widget, GuiButtonTypeRight, "More", nfc_scene_nfc_data_info_widget_callback, nfc);
text_scroll_height = 52;
Expand Down Expand Up @@ -136,6 +137,9 @@ bool nfc_scene_nfc_data_info_on_event(void* context, SceneManagerEvent event) {
} else if(protocol == NfcDeviceProtocolMifareUl) {
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightData);
consumed = true;
} else if(protocol == NfcDeviceProtocolMifareClassic) {
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicData);
consumed = true;
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions applications/main/nfc/scenes/nfc_scene_saved_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ bool nfc_scene_saved_menu_on_event(void* context, SceneManagerEvent event) {
application_info_present = nfc_supported_card_verify_and_parse(dev_data);
}

FURI_LOG_I("nfc", "application_info_present: %d", application_info_present);

if(application_info_present) {
scene_manager_next_scene(nfc->scene_manager, NfcSceneDeviceInfo);
} else {
Expand Down
2 changes: 1 addition & 1 deletion applications/main/subghz/helpers/subghz_chat.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ struct SubGhzChatWorker {
SubGhzTxRxWorker* subghz_txrx;

volatile bool worker_running;
volatile bool worker_stoping;
volatile bool worker_stopping;
FuriMessageQueue* event_queue;
uint32_t last_time_rx_data;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,15 +117,15 @@ static int32_t subghz_frequency_analyzer_worker_thread(void* context) {

// First stage: coarse scan
for(size_t i = 0; i < subghz_setting_get_frequency_count(instance->setting); i++) {
uint32_t current_frequnecy = subghz_setting_get_frequency(instance->setting, i);
if(furi_hal_subghz_is_frequency_valid(current_frequnecy) &&
(current_frequnecy != 467750000) &&
uint32_t current_frequency = subghz_setting_get_frequency(instance->setting, i);
if(furi_hal_subghz_is_frequency_valid(current_frequency) &&
(current_frequency != 467750000) &&
!((furi_hal_subghz.radio_type == SubGhzRadioExternal) &&
(current_frequnecy >= 311900000 && current_frequnecy <= 312200000))) {
(current_frequency >= 311900000 && current_frequency <= 312200000))) {
furi_hal_spi_acquire(furi_hal_subghz.spi_bus_handle);
cc1101_switch_to_idle(furi_hal_subghz.spi_bus_handle);
frequency =
cc1101_set_frequency(furi_hal_subghz.spi_bus_handle, current_frequnecy);
cc1101_set_frequency(furi_hal_subghz.spi_bus_handle, current_frequency);

cc1101_calibrate(furi_hal_subghz.spi_bus_handle);
do {
Expand Down Expand Up @@ -330,4 +330,4 @@ void subghz_frequency_analyzer_worker_set_trigger_level(

float subghz_frequency_analyzer_worker_get_trigger_level(SubGhzFrequencyAnalyzerWorker* instance) {
return instance->trigger_level;
}
}
2 changes: 1 addition & 1 deletion applications/main/subghz/helpers/subghz_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ typedef enum {
/** SubGhzHopperState state */
typedef enum {
SubGhzHopperStateOFF,
SubGhzHopperStateRunnig,
SubGhzHopperStateRunning,
SubGhzHopperStatePause,
SubGhzHopperStateRSSITimeOut,
} SubGhzHopperState;
Expand Down
4 changes: 2 additions & 2 deletions applications/main/subghz/scenes/subghz_scene_read_raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {

float rssi = furi_hal_subghz_get_rssi();

if(float_is_equal(subghz->txrx->raw_threshold_rssi, SUBGHZ_RAW_TRESHOLD_MIN)) {
if(float_is_equal(subghz->txrx->raw_threshold_rssi, SUBGHZ_RAW_THRESHOLD_MIN)) {
subghz_read_raw_add_data_rssi(subghz->subghz_read_raw, rssi, true);
subghz_protocol_raw_save_to_file_pause(
(SubGhzProtocolDecoderRAW*)subghz->txrx->decoder_result, false);
Expand Down Expand Up @@ -421,4 +421,4 @@ void subghz_scene_read_raw_on_exit(void* context) {

//filter restoration
subghz_receiver_set_filter(subghz->txrx->receiver, subghz->txrx->filter);
}
}
Loading

0 comments on commit a24d0f1

Please sign in to comment.