1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 12:42:30 +04:00

Merge branch 'dev' into desktop_favorite_port

This commit is contained in:
MX
2023-08-19 23:34:08 +03:00
8 changed files with 100 additions and 54 deletions

114
ReadMe.md
View File

@@ -32,43 +32,57 @@ Our Discord Community:
- https://t.me/unleashed_fw - https://t.me/unleashed_fw
# What's changed # What's changed
* Sub-GHz regional TX restrictions removed - **Sub-GHz** *lib & hal*
* Sub-GHz frequency range can be extended in settings file (Warning: It can damage Flipper's hardware) - regional TX restrictions removed
* Many rolling code protocols now have the ability to save & send captured signals - Extra Sub-GHz frequencies
* FAAC SLH (Spa) & BFT Mitto (keeloq secure with seed) manual creation - frequency range can be extended in settings file (Warning: It can damage Flipper's hardware)
* Sub-GHz static code brute-force plugin - Many rolling code [protocols](https://github.com/DarkFlippers/unleashed-firmware#current-modified-and-new-sub-ghz-protocols-list) now have the ability to save & send captured signals
* LFRFID Fuzzer plugin - FAAC SLH (Spa) & BFT Mitto (keeloq secure with seed) manual creation
* Custom community plugins and games added + all known working apps can be downloaded in extra pack in every release - External CC1101 module support [(by quen0n)](https://github.com/DarkFlippers/unleashed-firmware/pull/307)
* Extra Sub-GHz frequencies + extra Mifare Classic keys - **Sub-GHz** *Main App*
* Picopass/iClass plugin included in releases - Save last used frequency [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
* Recompiled IR TV Universal Remote for ALL buttons - New frequency analyzer [(by ClusterM)](https://github.com/DarkFlippers/unleashed-firmware/pull/43)
* Universal remote for Projectors, Fans, A/Cs and Audio(soundbars, etc.) - Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
* Customizable Flipper name **Update! Now can be changed in Settings->Desktop** (by @xMasterX and @Willy-JL) - Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/79)
* Text Input UI element -> Cursor feature (by @Willy-JL) - New option to use timestamps + protocol name when you saving file, instead of random name - Enable in `Radio Settings -> Time in names = ON`
- **BadBT** plugin (BT version of BadKB) [(by Willy-JL, ClaraCrazy, XFW contributors)](https://github.com/ClaraCrazy/Flipper-Xtreme/tree/dev/applications/main/bad_kb) - (See in Applications->Tools) - (aka BadUSB via Bluetooth) - Read mode UI improvements (scrolling text, + shows time when signal was received) (by @wosk)
- BadUSB -> Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout) - External CC1101 module support (Hardware SPI used)
- Sub-GHz -> External CC1101 module support - [(by quen0n)](https://github.com/DarkFlippers/unleashed-firmware/pull/307) - **Hold right in received signal list to delete selected signal**
- Sub-GHz -> `Add manually` menu extended with new protocols - **Custom buttons for Keeloq / Alutech AT4N / Nice Flor S / Somfy Telis / Security+ 2.0 / CAME Atomo** - now you can use arrow buttons to send signal with different button code
- Sub-GHz -> New frequency analyzer - [(by ClusterM)](https://github.com/DarkFlippers/unleashed-firmware/pull/43) - `Add manually` menu extended with new protocols
- Sub-GHz -> Save last used frequency [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77) - BFT Mitto / Somfy Telis / Nice Flor S / CAME Atomo, etc.. manual creation with programming new remote into receiver (use button 0xF for BFT Mitto, 0x8 (Prog) on Somfy Telis)
- Sub-GHz -> Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77) - Debug mode counter increase settings (+1 -> +5, +10, default: +1)
- Sub-GHz -> Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/79) - Debug PIN output settings for protocol development
- Lock device with pin(or regular lock if pin not set) by holding UP button on main screen [(by an4tur0r)](https://github.com/DarkFlippers/unleashed-firmware/pull/107)
* Sub-GHz -> Short press OK in frequency analyzer to save detected frequency for usage in Read modes - **Sub-GHz apps** *by unleashed team*
* Sub-GHz -> Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu and automatically use selected frequency - Sub-GHz Bruteforce - static code brute-force plugin |
* SubGHz -> New option to use timestamps + protocol name when you saving file, instead of random name - Enable in `Radio Settings -> Time in names = ON` - Time delay (between signals) setting (hold Up in main screen(says Up to Save)) + configure repeats in protocols list by pressing right button on selected protocol
* SubGHz Bruteforcer plugin -> Time delay (between signals) setting (hold Up in main screen(says Up to Save)) + configure repeats in protocols list by pressing right button on selected protocol - Load your own file and select bytes you want to bruteforce or use preconfigured options in protocols list
* SubGHz -> Read mode UI improvements (scrolling text, + shows time when signal was received) (by @wosk) - Sub-GHz Remote - remote control for 5 sub-ghz files | bind one file for each button
* Sub-GHz -> External CC1101 module support (Hardware SPI used) - use the built-in constructor or make config file by following this [instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemotePlugin.md)
* SubGHz -> **Hold right in received signal list to delete selected signal** - **Infrared**
* SubGHz -> **Custom buttons for Keeloq / Alutech AT4N / Nice Flor S / Somfy Telis / Security+ 2.0 / CAME Atomo** - now you can use arrow buttons to send signal with different button code - Recompiled IR TV Universal Remote for ALL buttons
* SubGHz -> BFT Mitto / Somfy Telis / Nice Flor S / CAME Atomo, etc.. manual creation with programming new remote into receiver (use button 0xF for BFT Mitto, 0x8 (Prog) on Somfy Telis) - Universal remotes for Projectors, Fans, A/Cs and Audio(soundbars, etc.) -> Also always updated and verified by our team
* SubGHz -> Debug mode counter increase settings (+1 -> +5, +10, default: +1) - Infrared -> `RCA` Protocol
* SubGHz -> Debug PIN output settings for protocol development - Infrared -> Debug TX PIN output settings
* Infrared -> `RCA` Protocol - **NFC/RFID/iButton**
* Infrared -> Debug TX PIN output settings * LFRFID/iButton Fuzzer plugins
* Other small fixes and changes throughout * Extra Mifare Classic keys
* See other changes in readme below * `Add manually` -> Mifare Classic with custom UID
* Picopass/iClass plugin (now with emulation support!) included in releases
- **Quality of life & other features**
- Customizable Flipper name **Update! Now can be changed in Settings->Desktop** (by @xMasterX and @Willy-JL)
- Text Input UI element -> Cursor feature (by @Willy-JL)
- Byte Input Mini editor -> **Press UP** multiple times until the nibble editor appears
- Clock on Desktop -> `Settings -> Desktop -> Show Clock`
- Battery percentage display with different styles `Settings -> Desktop -> Battery View`
- More games in Dummy Mode -> click or hold any of arrow buttons
- Lock device with pin(or regular lock if pin not set) by holding UP button on main screen [(by an4tur0r)](https://github.com/DarkFlippers/unleashed-firmware/pull/107)
- **BadBT** plugin (BT version of BadKB) [(by Willy-JL, ClaraCrazy, XFW contributors)](https://github.com/ClaraCrazy/Flipper-Xtreme/tree/dev/applications/main/bad_kb) - (See in Applications->Tools) - (aka BadUSB via Bluetooth)
- BadUSB -> Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout)
- Custom community plugins and games added + all known working apps can be downloaded in extra pack in every release
- Other small fixes and changes throughout
- See other changes in readme below
Also check the changelog in releases for latest updates! Also check the changelog in releases for latest updates!
@@ -124,17 +138,19 @@ Our team is small and the guys are working on this project as much as they can s
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. 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.
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. 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.
You can support us by using links or addresses below: You can support us by using links or addresses below:
* **Boosty** (patreon alternative): https://boosty.to/mmxdev |Service|Remark|Link/Wallet|
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65 |-|-|-|
* YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209 |**Boosty**|patreon alternative|https://boosty.to/mmxdev|
* USDT(TRC20): `TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs` |cloudtips|only RU payments accepted|https://pay.cloudtips.ru/p/7b3e9d65|
* BCH: `qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3` |YooMoney|only RU payments accepted|https://yoomoney.ru/fundraise/XA49mgQLPA0.221209|
* ETH/BSC/ERC20-Tokens: `darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`) |USDT|(TRC20)|`TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`|
* BTC: `bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9` |BCH||`qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3`|
* DOGE: `D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv` |ETH|(BSC/ERC20-Tokens)|`darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`)|
* LTC: `ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9` |BTC||`bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9`|
* XMR (Monero): `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn` |DOGE||`D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv`|
* TON: `EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf` |LTC||`ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9`|
|XMR|(Monero)| `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn`|
|TON||`EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf`|
### Community apps included: ### Community apps included:
@@ -224,7 +240,7 @@ You can support us by using links or addresses below:
* 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) * 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) * 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) * Official Docs: [docs.flipper.net](https://docs.flipper.net/)
* Official Forum: [forum.flipperzero.one](https://forum.flipperzero.one/) * Official Forum: [forum.flipperzero.one](https://forum.flipperzero.one/)
# Project structure # Project structure

View File

@@ -357,7 +357,7 @@ bool subghz_device_cc1101_ext_rx_pipe_not_empty() {
(CC1101_STATUS_RXBYTES) | CC1101_BURST, (CC1101_STATUS_RXBYTES) | CC1101_BURST,
(uint8_t*)status); (uint8_t*)status);
furi_hal_spi_release(subghz_device_cc1101_ext->spi_bus_handle); furi_hal_spi_release(subghz_device_cc1101_ext->spi_bus_handle);
// TODO: you can add a buffer overflow flag if needed // TODO: Find reason why RXFIFO_OVERFLOW doesnt work correctly
if(status->NUM_RXBYTES > 0) { if(status->NUM_RXBYTES > 0) {
return true; return true;
} else { } else {

View File

@@ -199,7 +199,7 @@ bool subghz_txrx_gen_faac_slh_protocol(
uint32_t frequency, uint32_t frequency,
uint32_t serial, uint32_t serial,
uint8_t btn, uint8_t btn,
uint16_t cnt, uint32_t cnt,
uint32_t seed, uint32_t seed,
const char* manufacture_name) { const char* manufacture_name) {
SubGhzTxRx* txrx = context; SubGhzTxRx* txrx = context;

View File

@@ -88,7 +88,7 @@ bool subghz_txrx_gen_faac_slh_protocol(
uint32_t frequency, uint32_t frequency,
uint32_t serial, uint32_t serial,
uint8_t btn, uint8_t btn,
uint16_t cnt, uint32_t cnt,
uint32_t seed, uint32_t seed,
const char* manufacture_name); const char* manufacture_name);

View File

@@ -45,6 +45,13 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) {
seed = subghz->secure_data->seed[0] << 24 | subghz->secure_data->seed[1] << 16 | seed = subghz->secure_data->seed[0] << 24 | subghz->secure_data->seed[1] << 16 |
subghz->secure_data->seed[2] << 8 | subghz->secure_data->seed[3]; subghz->secure_data->seed[2] << 8 | subghz->secure_data->seed[3];
if(seed == 0) {
furi_string_set(subghz->error_str, "Seed value\ncan not be 0.");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
consumed = true;
break;
}
generated_protocol = subghz_txrx_gen_keeloq_bft_protocol( generated_protocol = subghz_txrx_gen_keeloq_bft_protocol(
subghz->txrx, subghz->txrx,
"AM650", "AM650",
@@ -73,6 +80,12 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) {
seed = subghz->secure_data->seed[0] << 24 | subghz->secure_data->seed[1] << 16 | seed = subghz->secure_data->seed[0] << 24 | subghz->secure_data->seed[1] << 16 |
subghz->secure_data->seed[2] << 8 | subghz->secure_data->seed[3]; subghz->secure_data->seed[2] << 8 | subghz->secure_data->seed[3];
if(seed == 0) {
furi_string_set(subghz->error_str, "Seed value\ncan not be 0.");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
consumed = true;
break;
}
if(state == SubmenuIndexFaacSLH_433) { if(state == SubmenuIndexFaacSLH_433) {
generated_protocol = subghz_txrx_gen_faac_slh_protocol( generated_protocol = subghz_txrx_gen_faac_slh_protocol(
subghz->txrx, subghz->txrx,
@@ -108,8 +121,14 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) {
} }
} }
// Reset Seed, Fix, Cnt in secure data after successful or unsuccessful generation
memset(subghz->secure_data->seed, 0, sizeof(subghz->secure_data->seed));
memset(subghz->secure_data->cnt, 0, sizeof(subghz->secure_data->cnt));
memset(subghz->secure_data->fix, 0, sizeof(subghz->secure_data->fix));
if(generated_protocol) { if(generated_protocol) {
subghz_file_name_clear(subghz); subghz_file_name_clear(subghz);
scene_manager_set_scene_state( scene_manager_set_scene_state(
subghz->scene_manager, SubGhzSceneSetType, SubGhzCustomEventManagerSet); subghz->scene_manager, SubGhzSceneSetType, SubGhzCustomEventManagerSet);
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName);

View File

@@ -309,10 +309,14 @@ bool subghz_save_protocol_to_file(
if(!storage_simply_remove(storage, dev_file_name)) { if(!storage_simply_remove(storage, dev_file_name)) {
break; break;
} }
//ToDo check Write
stream_seek(flipper_format_stream, 0, StreamOffsetFromStart); stream_seek(flipper_format_stream, 0, StreamOffsetFromStart);
stream_save_to_file(flipper_format_stream, storage, dev_file_name, FSOM_CREATE_ALWAYS); stream_save_to_file(flipper_format_stream, storage, dev_file_name, FSOM_CREATE_ALWAYS);
if(storage_common_stat(storage, dev_file_name, NULL) != FSE_OK) {
break;
}
saved = true; saved = true;
} while(0); } while(0);
furi_string_free(file_dir); furi_string_free(file_dir);

View File

@@ -234,7 +234,8 @@ bool furi_hal_subghz_rx_pipe_not_empty() {
cc1101_read_reg( cc1101_read_reg(
&furi_hal_spi_bus_handle_subghz, (CC1101_STATUS_RXBYTES) | CC1101_BURST, (uint8_t*)status); &furi_hal_spi_bus_handle_subghz, (CC1101_STATUS_RXBYTES) | CC1101_BURST, (uint8_t*)status);
furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz); furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
if(status->NUM_RXBYTES > 0 && (status->RXFIFO_OVERFLOW == 0)) { // TODO: Find reason why RXFIFO_OVERFLOW doesnt work correctly
if(status->NUM_RXBYTES > 0) {
return true; return true;
} else { } else {
return false; return false;

View File

@@ -112,6 +112,9 @@ void subghz_protocol_encoder_faac_slh_free(void* context) {
static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* instance) { static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* instance) {
if(instance->generic.seed != 0x0) { if(instance->generic.seed != 0x0) {
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult(); instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
} else {
// Do not generate new data, send data from buffer
return true;
} }
uint32_t fix = instance->generic.serial << 4 | instance->generic.btn; uint32_t fix = instance->generic.serial << 4 | instance->generic.btn;
uint32_t hop = 0; uint32_t hop = 0;
@@ -434,6 +437,9 @@ SubGhzProtocolStatus subghz_protocol_decoder_faac_slh_serialize(
furi_assert(context); furi_assert(context);
SubGhzProtocolDecoderFaacSLH* instance = context; SubGhzProtocolDecoderFaacSLH* instance = context;
// Reset seed leftover from previous decoded signal
instance->generic.seed = 0x0;
SubGhzProtocolStatus res = SubGhzProtocolStatus res =
subghz_block_generic_serialize(&instance->generic, flipper_format, preset); subghz_block_generic_serialize(&instance->generic, flipper_format, preset);