Actually working progmode, new add manually options + bonus fixes

This commit is contained in:
MX
2023-09-05 05:31:03 +03:00
parent 2a789ae1c1
commit 0eb06ba2b7
13 changed files with 208 additions and 89 deletions

View File

@@ -6,6 +6,8 @@ typedef enum {
SubGhzCustomEventManagerSetRAW,
//SubmenuIndex
SubmenuIndexFaacSLH_Manual_433,
SubmenuIndexFaacSLH_Manual_868,
SubmenuIndexFaacSLH_433,
SubmenuIndexFaacSLH_868,
SubmenuIndexBFTClone,

View File

@@ -665,6 +665,8 @@ void subghz_txrx_reset_dynamic_and_custom_btns(SubGhzTxRx* instance) {
furi_assert(instance);
subghz_environment_reset_keeloq(instance->environment);
faac_slh_reset_prog_mode();
subghz_custom_btns_reset();
}

View File

@@ -132,7 +132,12 @@ bool subghz_scene_save_name_on_event(void* context, SceneManagerEvent event) {
furi_string_set(subghz->file_path, subghz->file_path_tmp);
}
}
scene_manager_previous_scene(subghz->scene_manager);
if(scene_manager_has_previous_scene(subghz->scene_manager, SubGhzSceneSetSeed)) {
scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneSetType);
} else {
scene_manager_previous_scene(subghz->scene_manager);
}
return true;
} else if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzCustomEventSceneSaveName) {

View File

@@ -18,7 +18,7 @@ void subghz_scene_set_cnt_on_enter(void* context) {
switch(state) {
case SubmenuIndexBFTClone:
byte_input_set_header_text(byte_input, "Enter COUNTER in hex");
byte_input_set_header_text(byte_input, "Enter COUNTER in Hex");
byte_input_set_result_callback(
byte_input,
subghz_scene_set_cnt_byte_input_callback,
@@ -27,9 +27,9 @@ void subghz_scene_set_cnt_on_enter(void* context) {
subghz->secure_data->cnt,
2);
break;
case SubmenuIndexFaacSLH_433:
case SubmenuIndexFaacSLH_868:
byte_input_set_header_text(byte_input, "Enter COUNTER in hex [20 bits]");
case SubmenuIndexFaacSLH_Manual_433:
case SubmenuIndexFaacSLH_Manual_868:
byte_input_set_header_text(byte_input, "Enter COUNTER in Hex 20 bits");
byte_input_set_result_callback(
byte_input,
subghz_scene_set_cnt_byte_input_callback,

View File

@@ -13,7 +13,7 @@ void subghz_scene_set_fix_on_enter(void* context) {
// Setup view
ByteInput* byte_input = subghz->byte_input;
byte_input_set_header_text(byte_input, "Enter FIX in hex");
byte_input_set_header_text(byte_input, "Enter FIX in Hex");
byte_input_set_result_callback(
byte_input,
subghz_scene_set_fix_byte_input_callback,

View File

@@ -14,7 +14,7 @@ void subghz_scene_set_seed_on_enter(void* context) {
// Setup view
ByteInput* byte_input = subghz->byte_input;
byte_input_set_header_text(byte_input, "Enter SEED in hex");
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,
@@ -62,8 +62,8 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) {
}
consumed = true;
break;
case SubmenuIndexFaacSLH_433:
case SubmenuIndexFaacSLH_868:
case SubmenuIndexFaacSLH_Manual_433:
case SubmenuIndexFaacSLH_Manual_868:
fix_part = subghz->secure_data->fix[0] << 24 | subghz->secure_data->fix[1] << 16 |
subghz->secure_data->fix[2] << 8 | subghz->secure_data->fix[3];
@@ -73,7 +73,7 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) {
seed = subghz->secure_data->seed[0] << 24 | subghz->secure_data->seed[1] << 16 |
subghz->secure_data->seed[2] << 8 | subghz->secure_data->seed[3];
if(state == SubmenuIndexFaacSLH_433) {
if(state == SubmenuIndexFaacSLH_Manual_433) {
generated_protocol = subghz_txrx_gen_faac_slh_protocol(
subghz->txrx,
"AM650",
@@ -83,7 +83,7 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) {
(cnt & 0xFFFFF),
seed,
"FAAC_SLH");
} else if(state == SubmenuIndexFaacSLH_868) {
} else if(state == SubmenuIndexFaacSLH_Manual_868) {
generated_protocol = subghz_txrx_gen_faac_slh_protocol(
subghz->txrx,
"AM650",

View File

@@ -13,6 +13,24 @@ void subghz_scene_set_type_submenu_callback(void* context, uint32_t index) {
void subghz_scene_set_type_on_enter(void* context) {
SubGhz* subghz = context;
submenu_add_item(
subghz->submenu,
"Faac SLH [Man.] 868MHz",
SubmenuIndexFaacSLH_Manual_868,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"Faac SLH [Man.] 433MHz",
SubmenuIndexFaacSLH_Manual_433,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"BFT [Manual] 433MHz",
SubmenuIndexBFTClone,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"Faac SLH 868MHz",
@@ -25,12 +43,6 @@ void subghz_scene_set_type_on_enter(void* context) {
SubmenuIndexFaacSLH_433,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"BFT [Manual] 433MHz",
SubmenuIndexBFTClone,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"BFT Mitto 433MHz",
@@ -319,10 +331,10 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
if(event.type == SceneManagerEventTypeCustom) {
uint32_t key = (uint32_t)rand();
switch(event.event) {
case SubmenuIndexFaacSLH_868:
case SubmenuIndexFaacSLH_Manual_868:
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetFix);
break;
case SubmenuIndexFaacSLH_433:
case SubmenuIndexFaacSLH_Manual_433:
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetFix);
break;
case SubmenuIndexBFTClone:
@@ -390,6 +402,38 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
generated_protocol = subghz_txrx_gen_data_protocol(
subghz->txrx, "AM650", 433920000, SUBGHZ_PROTOCOL_GATE_TX_NAME, rev_key, 24);
break;
case SubmenuIndexFaacSLH_433:
generated_protocol = subghz_txrx_gen_faac_slh_protocol(
subghz->txrx,
"AM650",
433920000,
((key & 0x00FFFFF0) | 0xA0000006) >> 4,
0x6,
0x00002,
key,
"FAAC_SLH");
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 SubmenuIndexFaacSLH_868:
generated_protocol = subghz_txrx_gen_faac_slh_protocol(
subghz->txrx,
"AM650",
868350000,
((key & 0x00FFFFF0) | 0xA0000006) >> 4,
0x6,
0x00002,
key,
"FAAC_SLH");
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 SubmenuIndexBeninca433:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
subghz->txrx,

View File

@@ -20,7 +20,6 @@ bool subghz_scene_transmitter_update_data_show(void* context) {
FuriString* frequency_str = furi_string_alloc();
FuriString* modulation_str = furi_string_alloc();
if(subghz_protocol_decoder_base_deserialize(
decoder, subghz_txrx_get_fff_data(subghz->txrx)) == SubGhzProtocolStatusOk) {
subghz_protocol_decoder_base_get_string(decoder, key_str);
@@ -83,6 +82,10 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) {
// Calling restore!
subghz_tx_start(subghz, subghz_txrx_get_fff_data(subghz->txrx));
subghz_txrx_stop(subghz->txrx);
// Calling restore 2nd time special for FAAC SLH!
// TODO: Find better way to restore after custom button is used!!!
subghz_tx_start(subghz, subghz_txrx_get_fff_data(subghz->txrx));
subghz_txrx_stop(subghz->txrx);
furi_hal_subghz_set_rolling_counter_mult(tmp_counter);
}
return true;