mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 04:34:43 +04:00
SubGHz: Add manually extend, add support for new protocols
Schellenberg / Stilmatic and Came Space keeloq protocols support
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
### New changes
|
### New changes
|
||||||
|
* SubGHz: New protocols support: CAME Space, Stilmatic / Schellenberg
|
||||||
|
* SubGHz: Add Manually - new protocols -> Beninca, Sommer(FSK), IronLogic, DTM Neo, Gibidi, Elmes Electronic (Elmes Poland), CAME Space
|
||||||
|
* 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)
|
||||||
* Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379)
|
* Plugins: Updated **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (fixed issue #379)
|
||||||
* Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us)
|
* Plugins: Update for SubGHz Bruteforcer, added - Holtek HT12X 12bit AM 433.920MHz/315MHz/868MHz/915MHz (TE: 433us)
|
||||||
* OFW: Fbt: fix broken resource deployment
|
* OFW: Fbt: fix broken resource deployment
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ Our Discord Community:
|
|||||||
* Customizable Flipper name
|
* Customizable Flipper name
|
||||||
- BadUSB -> Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout)
|
- BadUSB -> Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout)
|
||||||
- Sub-GHz -> External CC1101 module support - [(by quen0n)](https://github.com/DarkFlippers/unleashed-firmware/pull/307)
|
- Sub-GHz -> External CC1101 module support - [(by quen0n)](https://github.com/DarkFlippers/unleashed-firmware/pull/307)
|
||||||
|
- Sub-GHz -> `Add manually` menu extended with new protocols
|
||||||
- Sub-GHz -> New frequency analyzer - [(by ClusterM)](https://github.com/DarkFlippers/unleashed-firmware/pull/43)
|
- Sub-GHz -> New frequency analyzer - [(by ClusterM)](https://github.com/DarkFlippers/unleashed-firmware/pull/43)
|
||||||
- Sub-GHz -> Save last used frequency [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
|
- Sub-GHz -> Save last used frequency [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
|
||||||
- Sub-GHz -> Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
|
- Sub-GHz -> Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
|
||||||
@@ -81,6 +82,8 @@ Encoders/sending made by Eng1n33r & @xMasterX:
|
|||||||
- Keeloq: Mutancode
|
- Keeloq: Mutancode
|
||||||
- Keeloq: Normstahl
|
- Keeloq: Normstahl
|
||||||
- Keeloq: Beninca
|
- Keeloq: Beninca
|
||||||
|
- Keeloq: Stilmatic / Schellenberg
|
||||||
|
- Keeloq: CAME Space
|
||||||
- CAME Atomo
|
- CAME Atomo
|
||||||
- Nice Flor S
|
- Nice Flor S
|
||||||
- FAAC SLH (Spa) [External seed calculation required (For info contact me in Discord: Nano#8998)]
|
- FAAC SLH (Spa) [External seed calculation required (For info contact me in Discord: Nano#8998)]
|
||||||
|
|||||||
@@ -11,7 +11,14 @@ typedef enum {
|
|||||||
SubmenuIndexBFTClone,
|
SubmenuIndexBFTClone,
|
||||||
SubmenuIndexBFTMitto,
|
SubmenuIndexBFTMitto,
|
||||||
SubmenuIndexSomfyTelis,
|
SubmenuIndexSomfyTelis,
|
||||||
SubmenuIndexPricenton,
|
SubmenuIndexBeninca433,
|
||||||
|
SubmenuIndexBeninca868,
|
||||||
|
SubmenuIndexIronLogic,
|
||||||
|
SubmenuIndexElmesElectronic,
|
||||||
|
SubmenuIndexSommer_FM_434,
|
||||||
|
SubmenuIndexSommer_FM_868,
|
||||||
|
SubmenuIndexDTMNeo433,
|
||||||
|
SubmenuIndexGibidi433,
|
||||||
SubmenuIndexNiceFlo12bit,
|
SubmenuIndexNiceFlo12bit,
|
||||||
SubmenuIndexNiceFlo24bit,
|
SubmenuIndexNiceFlo24bit,
|
||||||
SubmenuIndexNiceFlorS_433_92,
|
SubmenuIndexNiceFlorS_433_92,
|
||||||
@@ -19,14 +26,19 @@ typedef enum {
|
|||||||
SubmenuIndexNiceSmilo_433_92,
|
SubmenuIndexNiceSmilo_433_92,
|
||||||
SubmenuIndexCAME12bit,
|
SubmenuIndexCAME12bit,
|
||||||
SubmenuIndexCAME24bit,
|
SubmenuIndexCAME24bit,
|
||||||
SubmenuIndexBETT_433,
|
SubmenuIndexCAME12bit868,
|
||||||
|
SubmenuIndexCAME24bit868,
|
||||||
SubmenuIndexCAMETwee,
|
SubmenuIndexCAMETwee,
|
||||||
|
SubmenuIndexCAMESpace,
|
||||||
|
SubmenuIndexPricenton,
|
||||||
|
SubmenuIndexPricenton315,
|
||||||
|
SubmenuIndexBETT_433,
|
||||||
|
SubmenuIndexLinear_300_00,
|
||||||
SubmenuIndexNeroSketch,
|
SubmenuIndexNeroSketch,
|
||||||
SubmenuIndexNeroRadio,
|
SubmenuIndexNeroRadio,
|
||||||
SubmenuIndexGateTX,
|
SubmenuIndexGateTX,
|
||||||
SubmenuIndexDoorHan_315_00,
|
SubmenuIndexDoorHan_315_00,
|
||||||
SubmenuIndexDoorHan_433_92,
|
SubmenuIndexDoorHan_433_92,
|
||||||
SubmenuIndexLinear_300_00,
|
|
||||||
SubmenuIndexLiftMaster_315_00,
|
SubmenuIndexLiftMaster_315_00,
|
||||||
SubmenuIndexLiftMaster_390_00,
|
SubmenuIndexLiftMaster_390_00,
|
||||||
SubmenuIndexLiftMaster_433_00,
|
SubmenuIndexLiftMaster_433_00,
|
||||||
|
|||||||
@@ -100,25 +100,67 @@ void subghz_scene_set_type_on_enter(void* context) {
|
|||||||
subghz);
|
subghz);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"Princeton 433MHz",
|
"KL: DoorHan 315MHz",
|
||||||
SubmenuIndexPricenton,
|
SubmenuIndexDoorHan_315_00,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"Nice Flo 12bit 433MHz",
|
"KL: DoorHan 433MHz",
|
||||||
SubmenuIndexNiceFlo12bit,
|
SubmenuIndexDoorHan_433_92,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"Nice Flo 24bit 433MHz",
|
"KL: Beninca 433MHz",
|
||||||
SubmenuIndexNiceFlo24bit,
|
SubmenuIndexBeninca433,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"Nice Smilo 433MHz",
|
"KL: Beninca 868MHz",
|
||||||
|
SubmenuIndexBeninca868,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: Sommer 434MHz",
|
||||||
|
SubmenuIndexSommer_FM_434,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: Sommer 868MHz",
|
||||||
|
SubmenuIndexSommer_FM_868,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: IronLogic 433MHz",
|
||||||
|
SubmenuIndexIronLogic,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: DTM Neo 433MHz",
|
||||||
|
SubmenuIndexDTMNeo433,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: Gibidi 433MHz",
|
||||||
|
SubmenuIndexGibidi433,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: Elmes (PL) 433MHz",
|
||||||
|
SubmenuIndexElmesElectronic,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: Nice Smilo 433MHz",
|
||||||
SubmenuIndexNiceSmilo_433_92,
|
SubmenuIndexNiceSmilo_433_92,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
@@ -134,6 +176,18 @@ void subghz_scene_set_type_on_enter(void* context) {
|
|||||||
SubmenuIndexNiceOne_433_92,
|
SubmenuIndexNiceOne_433_92,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"Nice Flo 12bit 433MHz",
|
||||||
|
SubmenuIndexNiceFlo12bit,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"Nice Flo 24bit 433MHz",
|
||||||
|
SubmenuIndexNiceFlo24bit,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"CAME 12bit 433MHz",
|
"CAME 12bit 433MHz",
|
||||||
@@ -146,6 +200,42 @@ void subghz_scene_set_type_on_enter(void* context) {
|
|||||||
SubmenuIndexCAME24bit,
|
SubmenuIndexCAME24bit,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"CAME 12bit 868MHz",
|
||||||
|
SubmenuIndexCAME12bit868,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"CAME 24bit 868MHz",
|
||||||
|
SubmenuIndexCAME24bit868,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"CAME TWEE 433MHz",
|
||||||
|
SubmenuIndexCAMETwee,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"CAME Space 433MHz",
|
||||||
|
SubmenuIndexCAMESpace,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"Princeton 315MHz",
|
||||||
|
SubmenuIndexPricenton315,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"Princeton 433MHz",
|
||||||
|
SubmenuIndexPricenton,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"BETT 433MHz",
|
"BETT 433MHz",
|
||||||
@@ -158,12 +248,6 @@ void subghz_scene_set_type_on_enter(void* context) {
|
|||||||
SubmenuIndexLinear_300_00,
|
SubmenuIndexLinear_300_00,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
submenu_add_item(
|
|
||||||
subghz->submenu,
|
|
||||||
"CAME TWEE 433MHz",
|
|
||||||
SubmenuIndexCAMETwee,
|
|
||||||
subghz_scene_set_type_submenu_callback,
|
|
||||||
subghz);
|
|
||||||
// submenu_add_item(
|
// submenu_add_item(
|
||||||
// subghz->submenu, "Nero Sketch", SubmenuIndexNeroSketch, subghz_scene_set_type_submenu_callback, subghz);
|
// subghz->submenu, "Nero Sketch", SubmenuIndexNeroSketch, subghz_scene_set_type_submenu_callback, subghz);
|
||||||
// submenu_add_item(
|
// submenu_add_item(
|
||||||
@@ -174,18 +258,6 @@ void subghz_scene_set_type_on_enter(void* context) {
|
|||||||
SubmenuIndexGateTX,
|
SubmenuIndexGateTX,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
submenu_add_item(
|
|
||||||
subghz->submenu,
|
|
||||||
"DoorHan 315MHz",
|
|
||||||
SubmenuIndexDoorHan_315_00,
|
|
||||||
subghz_scene_set_type_submenu_callback,
|
|
||||||
subghz);
|
|
||||||
submenu_add_item(
|
|
||||||
subghz->submenu,
|
|
||||||
"DoorHan 433MHz",
|
|
||||||
SubmenuIndexDoorHan_433_92,
|
|
||||||
subghz_scene_set_type_submenu_callback,
|
|
||||||
subghz);
|
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"Security+1.0 315MHz",
|
"Security+1.0 315MHz",
|
||||||
@@ -261,6 +333,15 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
|
|||||||
generated_protocol = true;
|
generated_protocol = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SubmenuIndexPricenton315:
|
||||||
|
key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
|
||||||
|
if(subghz_scene_set_type_submenu_gen_data_protocol(
|
||||||
|
subghz, SUBGHZ_PROTOCOL_PRINCETON_NAME, key, 24, 315000000, "AM650")) {
|
||||||
|
uint32_t te = 400;
|
||||||
|
flipper_format_update_uint32(subghz->txrx->fff_data, "TE", (uint32_t*)&te, 1);
|
||||||
|
generated_protocol = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SubmenuIndexNiceFlo12bit:
|
case SubmenuIndexNiceFlo12bit:
|
||||||
key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4
|
key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4
|
||||||
if(subghz_scene_set_type_submenu_gen_data_protocol(
|
if(subghz_scene_set_type_submenu_gen_data_protocol(
|
||||||
@@ -289,6 +370,20 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
|
|||||||
generated_protocol = true;
|
generated_protocol = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SubmenuIndexCAME12bit868:
|
||||||
|
key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4
|
||||||
|
if(subghz_scene_set_type_submenu_gen_data_protocol(
|
||||||
|
subghz, SUBGHZ_PROTOCOL_CAME_NAME, key, 12, 868350000, "AM650")) {
|
||||||
|
generated_protocol = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexCAME24bit868:
|
||||||
|
key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
|
||||||
|
if(subghz_scene_set_type_submenu_gen_data_protocol(
|
||||||
|
subghz, SUBGHZ_PROTOCOL_CAME_NAME, key, 24, 868350000, "AM650")) {
|
||||||
|
generated_protocol = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SubmenuIndexLinear_300_00:
|
case SubmenuIndexLinear_300_00:
|
||||||
key = (key & 0x3FF);
|
key = (key & 0x3FF);
|
||||||
if(subghz_scene_set_type_submenu_gen_data_protocol(
|
if(subghz_scene_set_type_submenu_gen_data_protocol(
|
||||||
@@ -325,6 +420,236 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
|
|||||||
generated_protocol = true;
|
generated_protocol = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SubmenuIndexBeninca433:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "AM650", 433920000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
(key & 0x000FFF00) | 0x00800080,
|
||||||
|
0x1,
|
||||||
|
0x0005,
|
||||||
|
"Beninca",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "Beninca");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexBeninca868:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "AM650", 868350000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
(key & 0x000FFF00) | 0x00800080,
|
||||||
|
0x1,
|
||||||
|
0x0005,
|
||||||
|
"Beninca",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "Beninca");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexElmesElectronic:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "AM650", 433920000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
(key & 0x00FFFFFF) | 0x02000000,
|
||||||
|
0x2,
|
||||||
|
0x0003,
|
||||||
|
"Elmes_Poland",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(
|
||||||
|
subghz->txrx->fff_data, "Manufacture", "Elmes_Poland");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexGibidi433:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "AM650", 433920000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
key & 0x00FFFFFF,
|
||||||
|
0x2,
|
||||||
|
0x0003,
|
||||||
|
"Gibidi",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "Gibidi");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexIronLogic:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "AM650", 433920000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
key & 0x0FFFFFFF,
|
||||||
|
0x2,
|
||||||
|
0x0003,
|
||||||
|
"IronLogic",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(
|
||||||
|
subghz->txrx->fff_data, "Manufacture", "IronLogic");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexSommer_FM_434:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "FM476", 434420000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
key & 0x0FFFFFFF,
|
||||||
|
0x4,
|
||||||
|
0x0003,
|
||||||
|
"Sommer(fsk476)",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(
|
||||||
|
subghz->txrx->fff_data, "Manufacture", "Sommer(fsk476)");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexSommer_FM_868:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "FM476", 868800000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
key & 0x0FFFFFFF,
|
||||||
|
0x4,
|
||||||
|
0x0003,
|
||||||
|
"Sommer(fsk476)",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(
|
||||||
|
subghz->txrx->fff_data, "Manufacture", "Sommer(fsk476)");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexDTMNeo433:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "AM650", 433920000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
key & 0x000FFFFF,
|
||||||
|
0x2,
|
||||||
|
0x0003,
|
||||||
|
"DTM_Neo",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "DTM_Neo");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexCAMESpace:
|
||||||
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
|
subghz_preset_init(subghz, "AM650", 433920000, NULL, 0);
|
||||||
|
if(subghz->txrx->transmitter) {
|
||||||
|
subghz_protocol_keeloq_create_data(
|
||||||
|
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
|
||||||
|
subghz->txrx->fff_data,
|
||||||
|
key & 0x00FFFFFF,
|
||||||
|
0x2,
|
||||||
|
0x0003,
|
||||||
|
"Came_Space",
|
||||||
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(
|
||||||
|
subghz->txrx->fff_data, "Manufacture", "Came_Space");
|
||||||
|
generated_protocol = true;
|
||||||
|
} else {
|
||||||
|
generated_protocol = false;
|
||||||
|
}
|
||||||
|
subghz_transmitter_free(subghz->txrx->transmitter);
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SubmenuIndexBFTMitto:
|
case SubmenuIndexBFTMitto:
|
||||||
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
|
||||||
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
@@ -397,6 +722,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
|
|||||||
0x0003,
|
0x0003,
|
||||||
"DoorHan",
|
"DoorHan",
|
||||||
subghz->txrx->preset);
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "DoorHan");
|
||||||
generated_protocol = true;
|
generated_protocol = true;
|
||||||
} else {
|
} else {
|
||||||
generated_protocol = false;
|
generated_protocol = false;
|
||||||
@@ -421,6 +747,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
|
|||||||
0x0003,
|
0x0003,
|
||||||
"DoorHan",
|
"DoorHan",
|
||||||
subghz->txrx->preset);
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(subghz->txrx->fff_data, "Manufacture", "DoorHan");
|
||||||
generated_protocol = true;
|
generated_protocol = true;
|
||||||
} else {
|
} else {
|
||||||
generated_protocol = false;
|
generated_protocol = false;
|
||||||
@@ -493,6 +820,8 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
|
|||||||
0x0003,
|
0x0003,
|
||||||
"NICE_Smilo",
|
"NICE_Smilo",
|
||||||
subghz->txrx->preset);
|
subghz->txrx->preset);
|
||||||
|
flipper_format_write_string_cstr(
|
||||||
|
subghz->txrx->fff_data, "Manufacture", "NICE_Smilo");
|
||||||
generated_protocol = true;
|
generated_protocol = true;
|
||||||
} else {
|
} else {
|
||||||
generated_protocol = false;
|
generated_protocol = false;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#### CC1101 Frequency range specs: 300-348 MHz, 386-464 MHz, and 778-928 MHz (+ 350MHz and 467MHz was added to default range)
|
#### CC1101 Frequency range specs: 300-348 MHz, 386-464 MHz, and 778-928 MHz (+ 350MHz and 467MHz was added to default range)
|
||||||
|
|
||||||
Edit user settings file located on your microSD card - `subghz/assets/setting_user`
|
Edit user settings file located on your microSD card - `subghz/assets/setting_user` (remove .example from name to use config)
|
||||||
|
|
||||||
in this file you will find we already have extra frequencies added
|
in this file you will find we already have extra frequencies added
|
||||||
if you need your custom one, make sure it doesn't listed here
|
if you need your custom one, make sure it doesn't listed here
|
||||||
@@ -90,7 +90,6 @@ Your frequencies will be added after default ones
|
|||||||
### Default hopper list
|
### Default hopper list
|
||||||
```
|
```
|
||||||
315000000,
|
315000000,
|
||||||
330000000,
|
|
||||||
390000000,
|
390000000,
|
||||||
433420000,
|
433420000,
|
||||||
433920000,
|
433920000,
|
||||||
|
|||||||
@@ -198,10 +198,12 @@ static bool subghz_protocol_keeloq_gen_data(
|
|||||||
(instance->generic.serial & 0x3FF)
|
(instance->generic.serial & 0x3FF)
|
||||||
<< 16 | //ToDo in some protocols the discriminator is 0
|
<< 16 | //ToDo in some protocols the discriminator is 0
|
||||||
instance->generic.cnt;
|
instance->generic.cnt;
|
||||||
// DTM Neo uses 12bit -> simple learning -- FAAC_RC,XT , Mutanco_Mutancode -> 12bit normal learning
|
// DTM Neo, Came_Space uses 12bit -> simple learning -- FAAC_RC,XT , Mutanco_Mutancode, Stilmatic(Schellenberg) -> 12bit normal learning
|
||||||
if((strcmp(instance->manufacture_name, "DTM_Neo") == 0) ||
|
if((strcmp(instance->manufacture_name, "DTM_Neo") == 0) ||
|
||||||
(strcmp(instance->manufacture_name, "FAAC_RC,XT") == 0) ||
|
(strcmp(instance->manufacture_name, "FAAC_RC,XT") == 0) ||
|
||||||
(strcmp(instance->manufacture_name, "Mutanco_Mutancode") == 0)) {
|
(strcmp(instance->manufacture_name, "Mutanco_Mutancode") == 0) ||
|
||||||
|
(strcmp(instance->manufacture_name, "Stilmatic") == 0) ||
|
||||||
|
(strcmp(instance->manufacture_name, "Came_Space") == 0)) {
|
||||||
decrypt = btn << 28 | (instance->generic.serial & 0xFFF) << 16 | instance->generic.cnt;
|
decrypt = btn << 28 | (instance->generic.serial & 0xFFF) << 16 | instance->generic.cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -567,6 +569,10 @@ SubGhzProtocolStatus
|
|||||||
instance->generic.seed = seed_data[0] << 24 | seed_data[1] << 16 | seed_data[2] << 8 |
|
instance->generic.seed = seed_data[0] << 24 | seed_data[1] << 16 | seed_data[2] << 8 |
|
||||||
seed_data[3];
|
seed_data[3];
|
||||||
|
|
||||||
|
if(!flipper_format_rewind(flipper_format)) {
|
||||||
|
FURI_LOG_E(TAG, "Rewind error");
|
||||||
|
break;
|
||||||
|
}
|
||||||
// Read manufacturer from file
|
// Read manufacturer from file
|
||||||
if(flipper_format_read_string(
|
if(flipper_format_read_string(
|
||||||
flipper_format, "Manufacture", instance->manufacture_from_file)) {
|
flipper_format, "Manufacture", instance->manufacture_from_file)) {
|
||||||
@@ -1247,6 +1253,10 @@ SubGhzProtocolStatus
|
|||||||
instance->generic.seed = seed_data[0] << 24 | seed_data[1] << 16 | seed_data[2] << 8 |
|
instance->generic.seed = seed_data[0] << 24 | seed_data[1] << 16 | seed_data[2] << 8 |
|
||||||
seed_data[3];
|
seed_data[3];
|
||||||
|
|
||||||
|
if(!flipper_format_rewind(flipper_format)) {
|
||||||
|
FURI_LOG_E(TAG, "Rewind error");
|
||||||
|
break;
|
||||||
|
}
|
||||||
// Read manufacturer from file
|
// Read manufacturer from file
|
||||||
if(flipper_format_read_string(
|
if(flipper_format_read_string(
|
||||||
flipper_format, "Manufacture", instance->manufacture_from_file)) {
|
flipper_format, "Manufacture", instance->manufacture_from_file)) {
|
||||||
|
|||||||
@@ -78,7 +78,6 @@ static const uint32_t subghz_frequency_list[] = {
|
|||||||
|
|
||||||
static const uint32_t subghz_hopper_frequency_list[] = {
|
static const uint32_t subghz_hopper_frequency_list[] = {
|
||||||
315000000,
|
315000000,
|
||||||
330000000,
|
|
||||||
390000000,
|
390000000,
|
||||||
433420000,
|
433420000,
|
||||||
433920000,
|
433920000,
|
||||||
|
|||||||
Reference in New Issue
Block a user