SubGhz: Сreating and delivering Security+ 1.0 (#1268)

* SubGhz: fix frequency reset on incomplete exit from the transmission menu
* SubGhz: fix incorrect shutdown of CC1101 if it was not turned on
* SubGhz: consciousness and transmission support Security+ 1.0
* Unit_test: add test encoder Security+ 1/0
* SubGhz: fix start counter Security+ 1.0

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Skorpionm
2022-05-27 15:29:52 +04:00
committed by GitHub
parent 79920a3522
commit 5c45250dd2
7 changed files with 360 additions and 11 deletions

View File

@@ -1,5 +1,6 @@
#include "../subghz_i.h"
#include <lib/subghz/protocols/keeloq.h>
#include <lib/subghz/protocols/secplus_v1.h>
#include <lib/subghz/blocks/math.h>
#include <dolphin/dolphin.h>
#include <flipper_format/flipper_format_i.h>
@@ -21,6 +22,8 @@ enum SubmenuIndex {
SubmenuIndexDoorHan_315_00,
SubmenuIndexDoorHan_433_92,
SubmenuIndexFirefly_300_00,
SubmenuIndexLiftMaster_315_00,
SubmenuIndexLiftMaster_390_00,
};
bool subghz_scene_set_type_submenu_gen_data_protocol(
@@ -142,6 +145,18 @@ void subghz_scene_set_type_on_enter(void* context) {
SubmenuIndexDoorHan_433_92,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"LiftMaster_315",
SubmenuIndexLiftMaster_315_00,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"LiftMaster_390",
SubmenuIndexLiftMaster_390_00,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_set_selected_item(
subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneSetType));
@@ -311,6 +326,37 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
}
break;
case SubmenuIndexLiftMaster_315_00:
while(!subghz_protocol_secplus_v1_check_fixed(key)) {
key = subghz_random_serial();
}
if(subghz_scene_set_type_submenu_gen_data_protocol(
subghz,
SUBGHZ_PROTOCOL_SECPLUS_V1_NAME,
(uint64_t)key << 32 | 0xE6000000,
42,
315000000,
FuriHalSubGhzPresetOok650Async)) {
generated_protocol = true;
}
break;
case SubmenuIndexLiftMaster_390_00:
while(!subghz_protocol_secplus_v1_check_fixed(key)) {
key = subghz_random_serial();
}
if(subghz_scene_set_type_submenu_gen_data_protocol(
subghz,
SUBGHZ_PROTOCOL_SECPLUS_V1_NAME,
(uint64_t)key << 32 | 0xE6000000,
42,
390000000,
FuriHalSubGhzPresetOok650Async)) {
generated_protocol = true;
}
break;
default:
return false;
break;

View File

@@ -108,8 +108,5 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) {
void subghz_scene_transmitter_on_exit(void* context) {
SubGhz* subghz = context;
//Restore default setting
subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
subghz->state_notifications = SubGhzNotificationStateIDLE;
}

View File

@@ -174,7 +174,9 @@ bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format) {
}
if(!ret) {
subghz_transmitter_free(subghz->txrx->transmitter);
subghz_idle(subghz);
if(subghz->txrx->txrx_state != SubGhzTxRxStateSleep) {
subghz_idle(subghz);
}
}
} while(false);

View File

@@ -416,6 +416,12 @@ MU_TEST(subghz_encoder_holtek_test) {
"Test encoder " SUBGHZ_PROTOCOL_HOLTEK_NAME " error\r\n");
}
MU_TEST(subghz_encoder_secplus_v1_test) {
mu_assert(
subghz_encoder_test("/ext/unit_tests/subghz/security_pls_1_0.sub"),
"Test encoder " SUBGHZ_PROTOCOL_SECPLUS_V1_NAME " error\r\n");
}
MU_TEST(subghz_random_test) {
mu_assert(subghz_decode_random_test(TEST_RANDOM_DIR_NAME), "Random test error\r\n");
}
@@ -457,6 +463,7 @@ MU_TEST_SUITE(subghz) {
MU_RUN_TEST(subghz_encoder_firefly_test);
MU_RUN_TEST(subghz_encoder_megacode_test);
MU_RUN_TEST(subghz_encoder_holtek_test);
MU_RUN_TEST(subghz_encoder_secplus_v1_test);
MU_RUN_TEST(subghz_random_test);
subghz_test_deinit();