This commit is contained in:
MX
2025-07-30 06:03:25 +03:00
parent 979e428ad8
commit 9ab4fcb256
8 changed files with 1088 additions and 1097 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -79,6 +79,6 @@ typedef struct {
};
} GenInfo;
void subghz_gen_info_reset(GenInfo *gen_info);
void subghz_gen_info_reset(GenInfo* gen_info);
void subghz_scene_set_type_fill_generation_infos(GenInfo* infos_dest, SetType type);

View File

@@ -16,42 +16,42 @@ void subghz_scene_set_button_on_enter(void* context) {
uint8_t byte_count = 0;
switch(subghz->gen_info->type) {
case GenFaacSLH:
byte_ptr = &subghz->gen_info->faac_slh.btn;
byte_count = sizeof(subghz->gen_info->faac_slh.btn);
break;
case GenKeeloq:
byte_ptr = &subghz->gen_info->keeloq.btn;
byte_count = sizeof(subghz->gen_info->keeloq.btn);
break;
case GenKeeloqBFT:
byte_ptr = &subghz->gen_info->keeloq_bft.btn;
byte_count = sizeof(subghz->gen_info->keeloq_bft.btn);
break;
case GenAlutechAt4n:
byte_ptr = &subghz->gen_info->alutech_at_4n.btn;
byte_count = sizeof(subghz->gen_info->alutech_at_4n.btn);
break;
case GenSomfyTelis:
byte_ptr = &subghz->gen_info->somfy_telis.btn;
byte_count = sizeof(subghz->gen_info->somfy_telis.btn);
break;
case GenNiceFlorS:
byte_ptr = &subghz->gen_info->nice_flor_s.btn;
byte_count = sizeof(subghz->gen_info->nice_flor_s.btn);
break;
case GenSecPlus2:
byte_ptr = &subghz->gen_info->sec_plus_2.btn;
byte_count = sizeof(subghz->gen_info->sec_plus_2.btn);
break;
// Not needed for these types
case GenPhoenixV2:
case GenData:
case GenSecPlus1:
case GenCameAtomo:
default:
furi_crash("Not implemented");
break;
case GenFaacSLH:
byte_ptr = &subghz->gen_info->faac_slh.btn;
byte_count = sizeof(subghz->gen_info->faac_slh.btn);
break;
case GenKeeloq:
byte_ptr = &subghz->gen_info->keeloq.btn;
byte_count = sizeof(subghz->gen_info->keeloq.btn);
break;
case GenKeeloqBFT:
byte_ptr = &subghz->gen_info->keeloq_bft.btn;
byte_count = sizeof(subghz->gen_info->keeloq_bft.btn);
break;
case GenAlutechAt4n:
byte_ptr = &subghz->gen_info->alutech_at_4n.btn;
byte_count = sizeof(subghz->gen_info->alutech_at_4n.btn);
break;
case GenSomfyTelis:
byte_ptr = &subghz->gen_info->somfy_telis.btn;
byte_count = sizeof(subghz->gen_info->somfy_telis.btn);
break;
case GenNiceFlorS:
byte_ptr = &subghz->gen_info->nice_flor_s.btn;
byte_count = sizeof(subghz->gen_info->nice_flor_s.btn);
break;
case GenSecPlus2:
byte_ptr = &subghz->gen_info->sec_plus_2.btn;
byte_count = sizeof(subghz->gen_info->sec_plus_2.btn);
break;
// Not needed for these types
case GenPhoenixV2:
case GenData:
case GenSecPlus1:
case GenCameAtomo:
default:
furi_crash("Not implemented");
break;
}
furi_assert(byte_ptr);

View File

@@ -16,48 +16,48 @@ void subghz_scene_set_counter_on_enter(void* context) {
uint8_t byte_count = 0;
switch(subghz->gen_info->type) {
case GenFaacSLH:
byte_ptr = &subghz->gen_info->faac_slh.cnt;
byte_count = sizeof(subghz->gen_info->faac_slh.cnt);
break;
case GenKeeloq:
byte_ptr = &subghz->gen_info->keeloq.cnt;
byte_count = sizeof(subghz->gen_info->keeloq.cnt);
break;
case GenCameAtomo:
byte_ptr = &subghz->gen_info->came_atomo.cnt;
byte_count = sizeof(subghz->gen_info->came_atomo.cnt);
break;
case GenKeeloqBFT:
byte_ptr = &subghz->gen_info->keeloq_bft.cnt;
byte_count = sizeof(subghz->gen_info->keeloq_bft.cnt);
break;
case GenAlutechAt4n:
byte_ptr = &subghz->gen_info->alutech_at_4n.cnt;
byte_count = sizeof(subghz->gen_info->alutech_at_4n.cnt);
break;
case GenSomfyTelis:
byte_ptr = &subghz->gen_info->somfy_telis.cnt;
byte_count = sizeof(subghz->gen_info->somfy_telis.cnt);
break;
case GenNiceFlorS:
byte_ptr = &subghz->gen_info->nice_flor_s.cnt;
byte_count = sizeof(subghz->gen_info->nice_flor_s.cnt);
break;
case GenSecPlus2:
byte_ptr = (uint8_t*)&subghz->gen_info->sec_plus_2.cnt;
byte_count = sizeof(subghz->gen_info->sec_plus_2.cnt);
break;
case GenPhoenixV2:
byte_ptr = (uint8_t*)&subghz->gen_info->phoenix_v2.cnt;
byte_count = sizeof(subghz->gen_info->phoenix_v2.cnt);
break;
// Not needed for these types
case GenData:
case GenSecPlus1:
default:
furi_crash("Not implemented");
break;
case GenFaacSLH:
byte_ptr = &subghz->gen_info->faac_slh.cnt;
byte_count = sizeof(subghz->gen_info->faac_slh.cnt);
break;
case GenKeeloq:
byte_ptr = &subghz->gen_info->keeloq.cnt;
byte_count = sizeof(subghz->gen_info->keeloq.cnt);
break;
case GenCameAtomo:
byte_ptr = &subghz->gen_info->came_atomo.cnt;
byte_count = sizeof(subghz->gen_info->came_atomo.cnt);
break;
case GenKeeloqBFT:
byte_ptr = &subghz->gen_info->keeloq_bft.cnt;
byte_count = sizeof(subghz->gen_info->keeloq_bft.cnt);
break;
case GenAlutechAt4n:
byte_ptr = &subghz->gen_info->alutech_at_4n.cnt;
byte_count = sizeof(subghz->gen_info->alutech_at_4n.cnt);
break;
case GenSomfyTelis:
byte_ptr = &subghz->gen_info->somfy_telis.cnt;
byte_count = sizeof(subghz->gen_info->somfy_telis.cnt);
break;
case GenNiceFlorS:
byte_ptr = &subghz->gen_info->nice_flor_s.cnt;
byte_count = sizeof(subghz->gen_info->nice_flor_s.cnt);
break;
case GenSecPlus2:
byte_ptr = (uint8_t*)&subghz->gen_info->sec_plus_2.cnt;
byte_count = sizeof(subghz->gen_info->sec_plus_2.cnt);
break;
case GenPhoenixV2:
byte_ptr = (uint8_t*)&subghz->gen_info->phoenix_v2.cnt;
byte_count = sizeof(subghz->gen_info->phoenix_v2.cnt);
break;
// Not needed for these types
case GenData:
case GenSecPlus1:
default:
furi_crash("Not implemented");
break;
}
furi_assert(byte_ptr);
@@ -87,79 +87,79 @@ bool subghz_scene_set_counter_on_event(void* context, SceneManagerEvent event) {
GenInfo gen_info = *subghz->gen_info;
switch(gen_info.type) {
case GenFaacSLH:
case GenKeeloqBFT:
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetSeed);
return true;
case GenKeeloq:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.keeloq.serial,
gen_info.keeloq.btn,
gen_info.keeloq.cnt,
gen_info.keeloq.manuf);
break;
case GenCameAtomo:
generated_protocol = subghz_txrx_gen_came_atomo_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.came_atomo.serial,
gen_info.came_atomo.cnt);
break;
case GenAlutechAt4n:
generated_protocol = subghz_txrx_gen_alutech_at_4n_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.alutech_at_4n.serial,
gen_info.alutech_at_4n.btn,
gen_info.alutech_at_4n.cnt);
break;
case GenSomfyTelis:
generated_protocol = subghz_txrx_gen_somfy_telis_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.somfy_telis.serial,
gen_info.somfy_telis.btn,
gen_info.somfy_telis.cnt);
break;
case GenNiceFlorS:
generated_protocol = subghz_txrx_gen_nice_flor_s_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.nice_flor_s.serial,
gen_info.nice_flor_s.btn,
gen_info.nice_flor_s.cnt,
gen_info.nice_flor_s.nice_one);
break;
case GenSecPlus2:
generated_protocol = subghz_txrx_gen_secplus_v2_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.sec_plus_2.serial,
gen_info.sec_plus_2.btn,
gen_info.sec_plus_2.cnt);
break;
case GenPhoenixV2:
generated_protocol = subghz_txrx_gen_phoenix_v2_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.phoenix_v2.serial,
gen_info.phoenix_v2.cnt);
break;
// Not needed for these types
case GenData:
case GenSecPlus1:
default:
furi_crash("Not implemented");
break;
case GenFaacSLH:
case GenKeeloqBFT:
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetSeed);
return true;
case GenKeeloq:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.keeloq.serial,
gen_info.keeloq.btn,
gen_info.keeloq.cnt,
gen_info.keeloq.manuf);
break;
case GenCameAtomo:
generated_protocol = subghz_txrx_gen_came_atomo_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.came_atomo.serial,
gen_info.came_atomo.cnt);
break;
case GenAlutechAt4n:
generated_protocol = subghz_txrx_gen_alutech_at_4n_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.alutech_at_4n.serial,
gen_info.alutech_at_4n.btn,
gen_info.alutech_at_4n.cnt);
break;
case GenSomfyTelis:
generated_protocol = subghz_txrx_gen_somfy_telis_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.somfy_telis.serial,
gen_info.somfy_telis.btn,
gen_info.somfy_telis.cnt);
break;
case GenNiceFlorS:
generated_protocol = subghz_txrx_gen_nice_flor_s_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.nice_flor_s.serial,
gen_info.nice_flor_s.btn,
gen_info.nice_flor_s.cnt,
gen_info.nice_flor_s.nice_one);
break;
case GenSecPlus2:
generated_protocol = subghz_txrx_gen_secplus_v2_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.sec_plus_2.serial,
gen_info.sec_plus_2.btn,
gen_info.sec_plus_2.cnt);
break;
case GenPhoenixV2:
generated_protocol = subghz_txrx_gen_phoenix_v2_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.phoenix_v2.serial,
gen_info.phoenix_v2.cnt);
break;
// Not needed for these types
case GenData:
case GenSecPlus1:
default:
furi_crash("Not implemented");
break;
}
consumed = true;

View File

@@ -29,12 +29,7 @@ void subghz_scene_set_key_on_enter(void* context) {
ByteInput* byte_input = subghz->byte_input;
byte_input_set_header_text(byte_input, "Enter KEY in hex");
byte_input_set_result_callback(
byte_input,
subghz_scene_set_key_byte_input_callback,
NULL,
subghz,
byte_ptr,
byte_count);
byte_input, subghz_scene_set_key_byte_input_callback, NULL, subghz, byte_ptr, byte_count);
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput);
}

View File

@@ -16,27 +16,27 @@ void subghz_scene_set_seed_on_enter(void* context) {
uint8_t byte_count = 0;
switch(subghz->gen_info->type) {
case GenFaacSLH:
byte_ptr = (uint8_t*)&subghz->gen_info->faac_slh.seed;
byte_count = sizeof(subghz->gen_info->faac_slh.seed);
break;
case GenKeeloqBFT:
byte_ptr = (uint8_t*)&subghz->gen_info->keeloq_bft.seed;
byte_count = sizeof(subghz->gen_info->keeloq_bft.seed);
break;
// Not needed for these types
case GenKeeloq:
case GenAlutechAt4n:
case GenSomfyTelis:
case GenNiceFlorS:
case GenSecPlus2:
case GenPhoenixV2:
case GenData:
case GenSecPlus1:
case GenCameAtomo:
default:
furi_crash("Not implemented");
break;
case GenFaacSLH:
byte_ptr = (uint8_t*)&subghz->gen_info->faac_slh.seed;
byte_count = sizeof(subghz->gen_info->faac_slh.seed);
break;
case GenKeeloqBFT:
byte_ptr = (uint8_t*)&subghz->gen_info->keeloq_bft.seed;
byte_count = sizeof(subghz->gen_info->keeloq_bft.seed);
break;
// Not needed for these types
case GenKeeloq:
case GenAlutechAt4n:
case GenSomfyTelis:
case GenNiceFlorS:
case GenSecPlus2:
case GenPhoenixV2:
case GenData:
case GenSecPlus1:
case GenCameAtomo:
default:
furi_crash("Not implemented");
break;
}
furi_assert(byte_ptr);
@@ -46,12 +46,7 @@ void subghz_scene_set_seed_on_enter(void* context) {
ByteInput* byte_input = subghz->byte_input;
byte_input_set_header_text(byte_input, "Enter SEED in hex");
byte_input_set_result_callback(
byte_input,
subghz_scene_set_seed_byte_input_callback,
NULL,
subghz,
byte_ptr,
byte_count);
byte_input, subghz_scene_set_seed_byte_input_callback, NULL, subghz, byte_ptr, byte_count);
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput);
}
@@ -64,41 +59,41 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) {
GenInfo gen_info = *subghz->gen_info;
switch(gen_info.type) {
case GenFaacSLH:
generated_protocol = subghz_txrx_gen_faac_slh_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.faac_slh.serial,
gen_info.faac_slh.btn,
gen_info.faac_slh.cnt,
gen_info.faac_slh.seed,
gen_info.faac_slh.manuf);
break;
case GenKeeloqBFT:
generated_protocol = subghz_txrx_gen_keeloq_bft_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.keeloq_bft.serial,
gen_info.keeloq_bft.btn,
gen_info.keeloq_bft.cnt,
gen_info.keeloq_bft.seed,
gen_info.keeloq_bft.manuf);
break;
// Not needed for these types
case GenKeeloq:
case GenAlutechAt4n:
case GenSomfyTelis:
case GenNiceFlorS:
case GenSecPlus2:
case GenPhoenixV2:
case GenData:
case GenSecPlus1:
case GenCameAtomo:
default:
furi_crash("Not implemented");
break;
case GenFaacSLH:
generated_protocol = subghz_txrx_gen_faac_slh_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.faac_slh.serial,
gen_info.faac_slh.btn,
gen_info.faac_slh.cnt,
gen_info.faac_slh.seed,
gen_info.faac_slh.manuf);
break;
case GenKeeloqBFT:
generated_protocol = subghz_txrx_gen_keeloq_bft_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.keeloq_bft.serial,
gen_info.keeloq_bft.btn,
gen_info.keeloq_bft.cnt,
gen_info.keeloq_bft.seed,
gen_info.keeloq_bft.manuf);
break;
// Not needed for these types
case GenKeeloq:
case GenAlutechAt4n:
case GenSomfyTelis:
case GenNiceFlorS:
case GenSecPlus2:
case GenPhoenixV2:
case GenData:
case GenSecPlus1:
case GenCameAtomo:
default:
furi_crash("Not implemented");
break;
}
consumed = true;

View File

@@ -16,48 +16,48 @@ void subghz_scene_set_serial_on_enter(void* context) {
uint8_t byte_count = 0;
switch(subghz->gen_info->type) {
case GenFaacSLH:
byte_ptr = (uint8_t*)&subghz->gen_info->faac_slh.serial;
byte_count = sizeof(subghz->gen_info->faac_slh.serial);
break;
case GenKeeloq:
byte_ptr = (uint8_t*)&subghz->gen_info->keeloq.serial;
byte_count = sizeof(subghz->gen_info->keeloq.serial);
break;
case GenCameAtomo:
byte_ptr = (uint8_t*)&subghz->gen_info->came_atomo.serial;
byte_count = sizeof(subghz->gen_info->came_atomo.serial);
break;
case GenKeeloqBFT:
byte_ptr = (uint8_t*)&subghz->gen_info->keeloq_bft.serial;
byte_count = sizeof(subghz->gen_info->keeloq_bft.serial);
break;
case GenAlutechAt4n:
byte_ptr = (uint8_t*)&subghz->gen_info->alutech_at_4n.serial;
byte_count = sizeof(subghz->gen_info->alutech_at_4n.serial);
break;
case GenSomfyTelis:
byte_ptr = (uint8_t*)&subghz->gen_info->somfy_telis.serial;
byte_count = sizeof(subghz->gen_info->somfy_telis.serial);
break;
case GenNiceFlorS:
byte_ptr = (uint8_t*)&subghz->gen_info->nice_flor_s.serial;
byte_count = sizeof(subghz->gen_info->nice_flor_s.serial);
break;
case GenSecPlus2:
byte_ptr = (uint8_t*)&subghz->gen_info->sec_plus_2.serial;
byte_count = sizeof(subghz->gen_info->sec_plus_2.serial);
break;
case GenPhoenixV2:
byte_ptr = (uint8_t*)&subghz->gen_info->phoenix_v2.serial;
byte_count = sizeof(subghz->gen_info->phoenix_v2.serial);
break;
// Not needed for these types
case GenData:
case GenSecPlus1:
default:
furi_crash("Not implemented");
break;
case GenFaacSLH:
byte_ptr = (uint8_t*)&subghz->gen_info->faac_slh.serial;
byte_count = sizeof(subghz->gen_info->faac_slh.serial);
break;
case GenKeeloq:
byte_ptr = (uint8_t*)&subghz->gen_info->keeloq.serial;
byte_count = sizeof(subghz->gen_info->keeloq.serial);
break;
case GenCameAtomo:
byte_ptr = (uint8_t*)&subghz->gen_info->came_atomo.serial;
byte_count = sizeof(subghz->gen_info->came_atomo.serial);
break;
case GenKeeloqBFT:
byte_ptr = (uint8_t*)&subghz->gen_info->keeloq_bft.serial;
byte_count = sizeof(subghz->gen_info->keeloq_bft.serial);
break;
case GenAlutechAt4n:
byte_ptr = (uint8_t*)&subghz->gen_info->alutech_at_4n.serial;
byte_count = sizeof(subghz->gen_info->alutech_at_4n.serial);
break;
case GenSomfyTelis:
byte_ptr = (uint8_t*)&subghz->gen_info->somfy_telis.serial;
byte_count = sizeof(subghz->gen_info->somfy_telis.serial);
break;
case GenNiceFlorS:
byte_ptr = (uint8_t*)&subghz->gen_info->nice_flor_s.serial;
byte_count = sizeof(subghz->gen_info->nice_flor_s.serial);
break;
case GenSecPlus2:
byte_ptr = (uint8_t*)&subghz->gen_info->sec_plus_2.serial;
byte_count = sizeof(subghz->gen_info->sec_plus_2.serial);
break;
case GenPhoenixV2:
byte_ptr = (uint8_t*)&subghz->gen_info->phoenix_v2.serial;
byte_count = sizeof(subghz->gen_info->phoenix_v2.serial);
break;
// Not needed for these types
case GenData:
case GenSecPlus1:
default:
furi_crash("Not implemented");
break;
}
furi_assert(byte_ptr);
@@ -83,25 +83,25 @@ bool subghz_scene_set_serial_on_event(void* context, SceneManagerEvent event) {
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzCustomEventByteInputDone) {
switch(subghz->gen_info->type) {
case GenFaacSLH:
case GenKeeloq:
case GenKeeloqBFT:
case GenAlutechAt4n:
case GenSomfyTelis:
case GenNiceFlorS:
case GenSecPlus2:
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetButton);
break;
case GenCameAtomo:
case GenPhoenixV2:
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetCounter);
break;
// Not needed for these types
case GenData:
case GenSecPlus1:
default:
furi_crash("Not implemented");
break;
case GenFaacSLH:
case GenKeeloq:
case GenKeeloqBFT:
case GenAlutechAt4n:
case GenSomfyTelis:
case GenNiceFlorS:
case GenSecPlus2:
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetButton);
break;
case GenCameAtomo:
case GenPhoenixV2:
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetCounter);
break;
// Not needed for these types
case GenData:
case GenSecPlus1:
default:
furi_crash("Not implemented");
break;
}
consumed = true;

View File

@@ -106,126 +106,125 @@ bool subghz_scene_set_type_generate_protocol_from_infos(SubGhz* subghz) {
GenInfo gen_info = *subghz->gen_info;
bool generated_protocol = false;
switch(gen_info.type) {
case GenData:
if(gen_info.data.te) {
generated_protocol = subghz_txrx_gen_data_protocol_and_te(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.data.name,
gen_info.data.key,
gen_info.data.bits,
gen_info.data.te);
} else {
generated_protocol = subghz_txrx_gen_data_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.data.name,
gen_info.data.key,
gen_info.data.bits);
}
break;
case GenFaacSLH:
generated_protocol = subghz_txrx_gen_faac_slh_protocol(
case GenData:
if(gen_info.data.te) {
generated_protocol = subghz_txrx_gen_data_protocol_and_te(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.faac_slh.serial,
gen_info.faac_slh.btn,
gen_info.faac_slh.cnt,
gen_info.faac_slh.seed,
gen_info.faac_slh.manuf);
break;
case GenKeeloq:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
gen_info.data.name,
gen_info.data.key,
gen_info.data.bits,
gen_info.data.te);
} else {
generated_protocol = subghz_txrx_gen_data_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.keeloq.serial,
gen_info.keeloq.btn,
gen_info.keeloq.cnt,
gen_info.keeloq.manuf);
break;
case GenCameAtomo:
generated_protocol = subghz_txrx_gen_came_atomo_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.came_atomo.serial,
gen_info.came_atomo.cnt);
break;
case GenKeeloqBFT:
generated_protocol = subghz_txrx_gen_keeloq_bft_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.keeloq_bft.serial,
gen_info.keeloq_bft.btn,
gen_info.keeloq_bft.cnt,
gen_info.keeloq_bft.seed,
gen_info.keeloq_bft.manuf);
break;
case GenAlutechAt4n:
generated_protocol = subghz_txrx_gen_alutech_at_4n_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.alutech_at_4n.serial,
gen_info.alutech_at_4n.btn,
gen_info.alutech_at_4n.cnt);
break;
case GenSomfyTelis:
generated_protocol = subghz_txrx_gen_somfy_telis_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.somfy_telis.serial,
gen_info.somfy_telis.btn,
gen_info.somfy_telis.cnt);
break;
case GenNiceFlorS:
generated_protocol = subghz_txrx_gen_nice_flor_s_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.nice_flor_s.serial,
gen_info.nice_flor_s.btn,
gen_info.nice_flor_s.cnt,
gen_info.nice_flor_s.nice_one);
break;
case GenSecPlus1:
generated_protocol =
subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, gen_info.mod, gen_info.freq);
break;
case GenSecPlus2:
generated_protocol = subghz_txrx_gen_secplus_v2_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.sec_plus_2.serial,
gen_info.sec_plus_2.btn,
gen_info.sec_plus_2.cnt);
break;
case GenPhoenixV2:
generated_protocol = subghz_txrx_gen_phoenix_v2_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.phoenix_v2.serial,
gen_info.phoenix_v2.cnt);
break;
default:
furi_crash("Not implemented");
break;
gen_info.data.name,
gen_info.data.key,
gen_info.data.bits);
}
break;
case GenFaacSLH:
generated_protocol = subghz_txrx_gen_faac_slh_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.faac_slh.serial,
gen_info.faac_slh.btn,
gen_info.faac_slh.cnt,
gen_info.faac_slh.seed,
gen_info.faac_slh.manuf);
break;
case GenKeeloq:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.keeloq.serial,
gen_info.keeloq.btn,
gen_info.keeloq.cnt,
gen_info.keeloq.manuf);
break;
case GenCameAtomo:
generated_protocol = subghz_txrx_gen_came_atomo_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.came_atomo.serial,
gen_info.came_atomo.cnt);
break;
case GenKeeloqBFT:
generated_protocol = subghz_txrx_gen_keeloq_bft_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.keeloq_bft.serial,
gen_info.keeloq_bft.btn,
gen_info.keeloq_bft.cnt,
gen_info.keeloq_bft.seed,
gen_info.keeloq_bft.manuf);
break;
case GenAlutechAt4n:
generated_protocol = subghz_txrx_gen_alutech_at_4n_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.alutech_at_4n.serial,
gen_info.alutech_at_4n.btn,
gen_info.alutech_at_4n.cnt);
break;
case GenSomfyTelis:
generated_protocol = subghz_txrx_gen_somfy_telis_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.somfy_telis.serial,
gen_info.somfy_telis.btn,
gen_info.somfy_telis.cnt);
break;
case GenNiceFlorS:
generated_protocol = subghz_txrx_gen_nice_flor_s_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.nice_flor_s.serial,
gen_info.nice_flor_s.btn,
gen_info.nice_flor_s.cnt,
gen_info.nice_flor_s.nice_one);
break;
case GenSecPlus1:
generated_protocol =
subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, gen_info.mod, gen_info.freq);
break;
case GenSecPlus2:
generated_protocol = subghz_txrx_gen_secplus_v2_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.sec_plus_2.serial,
gen_info.sec_plus_2.btn,
gen_info.sec_plus_2.cnt);
break;
case GenPhoenixV2:
generated_protocol = subghz_txrx_gen_phoenix_v2_protocol(
subghz->txrx,
gen_info.mod,
gen_info.freq,
gen_info.phoenix_v2.serial,
gen_info.phoenix_v2.cnt);
break;
default:
furi_crash("Not implemented");
break;
}
if(generated_protocol) {
subghz_file_name_clear(subghz);
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName);
} else {
furi_string_set(
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
furi_string_set(subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
}
return generated_protocol;
@@ -244,15 +243,19 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
subghz_gen_info_reset(subghz->gen_info);
subghz_scene_set_type_fill_generation_infos(subghz->gen_info, event.event);
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneStart) == SubmenuIndexAddManually) {
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneStart) ==
SubmenuIndexAddManually) {
generated_protocol = subghz_scene_set_type_generate_protocol_from_infos(subghz);
} else if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneStart) == SubmenuIndexAddManuallyAdvanced) {
} else if(
scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneStart) ==
SubmenuIndexAddManuallyAdvanced) {
switch(subghz->gen_info->type) {
case GenData: // Key (u64)
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetKey);
break;
case GenSecPlus1: // None
return subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, subghz->gen_info->mod, subghz->gen_info->freq);
return subghz_txrx_gen_secplus_v1_protocol(
subghz->txrx, subghz->gen_info->mod, subghz->gen_info->freq);
case GenFaacSLH: // Serial (u32), Button (u8), Counter (u8), Seed (u32)
case GenKeeloq: // Serial (u32), Button (u8), Counter (u8)
case GenCameAtomo: // Serial (u32), Counter (u8)