SubGHz: Added 9 new protocols, fixes to existing protocols (#4255)

* Fix Typos

* Tune decoders

* Better parsing, show more data in existing protocols

* Add new protocols

* Update keeloqs

* Add unit tests & raws

* Add honeywell unittest

* Comment until better solution is found

Adding GAPs to be sent first to make signal better suitable for decoder (decoding from only one signal sample) does nothing, needs something else
TODO: Fix encoders?

* suppressed missing issue warning

* subghz: re-enabled failing encoder tests

* Fix two?

3 left

* properly do gangqi and marantec for unit test and real use

* fix unit tests now

* fix possible memory leak

* reset decoder step too

* subghz: extra encoder safety; report random signal test results on failure

* unit_tests: subghz: renamed test file for consistency

* subghz: more explicit buffer position resets

* Fix gangqi samples

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: hedger <hedger@nanode.su>
This commit is contained in:
MMX
2025-10-01 17:05:50 +03:00
committed by GitHub
parent df4bf69818
commit fad487df0e
52 changed files with 4432 additions and 105 deletions

View File

@@ -17,7 +17,7 @@
#define NICE_FLOR_S_DIR_NAME EXT_PATH("subghz/assets/nice_flor_s")
#define ALUTECH_AT_4N_DIR_NAME EXT_PATH("subghz/assets/alutech_at_4n")
#define TEST_RANDOM_DIR_NAME EXT_PATH("unit_tests/subghz/test_random_raw.sub")
#define TEST_RANDOM_COUNT_PARSE 331
#define TEST_RANDOM_COUNT_PARSE 328
#define TEST_TIMEOUT 10000
static SubGhzEnvironment* environment_handler;
@@ -672,6 +672,62 @@ MU_TEST(subghz_decoder_dickert_test) {
"Test decoder " SUBGHZ_PROTOCOL_DICKERT_MAHS_NAME " error\r\n");
}
MU_TEST(subghz_decoder_legrand_test) {
mu_assert(
subghz_decoder_test(
EXT_PATH("unit_tests/subghz/legrand_raw.sub"), SUBGHZ_PROTOCOL_LEGRAND_NAME),
"Test decoder " SUBGHZ_PROTOCOL_LEGRAND_NAME " error\r\n");
}
MU_TEST(subghz_decoder_marantec24_test) {
mu_assert(
subghz_decoder_test(
EXT_PATH("unit_tests/subghz/marantec24_raw.sub"), SUBGHZ_PROTOCOL_MARANTEC24_NAME),
"Test decoder " SUBGHZ_PROTOCOL_MARANTEC24_NAME " error\r\n");
}
MU_TEST(subghz_decoder_roger_test) {
mu_assert(
subghz_decoder_test(
EXT_PATH("unit_tests/subghz/roger_raw.sub"), SUBGHZ_PROTOCOL_ROGER_NAME),
"Test decoder " SUBGHZ_PROTOCOL_ROGER_NAME " error\r\n");
}
MU_TEST(subghz_decoder_feron_test) {
mu_assert(
subghz_decoder_test(
EXT_PATH("unit_tests/subghz/feron_raw.sub"), SUBGHZ_PROTOCOL_FERON_NAME),
"Test decoder " SUBGHZ_PROTOCOL_FERON_NAME " error\r\n");
}
MU_TEST(subghz_decoder_gangqi_test) {
mu_assert(
subghz_decoder_test(
EXT_PATH("unit_tests/subghz/gangqi_raw.sub"), SUBGHZ_PROTOCOL_GANGQI_NAME),
"Test decoder " SUBGHZ_PROTOCOL_GANGQI_NAME " error\r\n");
}
MU_TEST(subghz_decoder_hollarm_test) {
mu_assert(
subghz_decoder_test(
EXT_PATH("unit_tests/subghz/hollarm_raw.sub"), SUBGHZ_PROTOCOL_HOLLARM_NAME),
"Test decoder " SUBGHZ_PROTOCOL_HOLLARM_NAME " error\r\n");
}
MU_TEST(subghz_decoder_reversrb2_test) {
mu_assert(
subghz_decoder_test(
EXT_PATH("unit_tests/subghz/revers_rb2_raw.sub"), SUBGHZ_PROTOCOL_REVERSRB2_NAME),
"Test decoder " SUBGHZ_PROTOCOL_REVERSRB2_NAME " error\r\n");
}
MU_TEST(subghz_decoder_hay21_test) {
mu_assert(
subghz_decoder_test(
EXT_PATH("unit_tests/subghz/hay21_raw.sub"), SUBGHZ_PROTOCOL_HAY21_NAME),
"Test decoder " SUBGHZ_PROTOCOL_HAY21_NAME " error\r\n");
}
//test encoders
MU_TEST(subghz_encoder_princeton_test) {
mu_assert(
@@ -835,6 +891,48 @@ MU_TEST(subghz_encoder_dickert_test) {
"Test encoder " SUBGHZ_PROTOCOL_DICKERT_MAHS_NAME " error\r\n");
}
MU_TEST(subghz_encoder_legrand_test) {
mu_assert(
subghz_encoder_test(EXT_PATH("unit_tests/subghz/legrand.sub")),
"Test encoder " SUBGHZ_PROTOCOL_LEGRAND_NAME " error\r\n");
}
MU_TEST(subghz_encoder_feron_test) {
mu_assert(
subghz_encoder_test(EXT_PATH("unit_tests/subghz/feron.sub")),
"Test encoder " SUBGHZ_PROTOCOL_FERON_NAME " error\r\n");
}
MU_TEST(subghz_encoder_gangqi_test) {
mu_assert(
subghz_encoder_test(EXT_PATH("unit_tests/subghz/gangqi.sub")),
"Test encoder " SUBGHZ_PROTOCOL_GANGQI_NAME " error\r\n");
}
MU_TEST(subghz_encoder_hollarm_test) {
mu_assert(
subghz_encoder_test(EXT_PATH("unit_tests/subghz/hollarm.sub")),
"Test encoder " SUBGHZ_PROTOCOL_HOLLARM_NAME " error\r\n");
}
MU_TEST(subghz_encoder_reversrb2_test) {
mu_assert(
subghz_encoder_test(EXT_PATH("unit_tests/subghz/revers_rb2.sub")),
"Test encoder " SUBGHZ_PROTOCOL_REVERSRB2_NAME " error\r\n");
}
MU_TEST(subghz_encoder_roger_test) {
mu_assert(
subghz_encoder_test(EXT_PATH("unit_tests/subghz/roger.sub")),
"Test encoder " SUBGHZ_PROTOCOL_ROGER_NAME " error\r\n");
}
MU_TEST(subghz_encoder_marantec24_test) {
mu_assert(
subghz_encoder_test(EXT_PATH("unit_tests/subghz/marantec24.sub")),
"Test encoder " SUBGHZ_PROTOCOL_MARANTEC24_NAME " error\r\n");
}
MU_TEST(subghz_random_test) {
mu_assert(subghz_decode_random_test(TEST_RANDOM_DIR_NAME), "Random test error\r\n");
}
@@ -887,6 +985,14 @@ MU_TEST_SUITE(subghz) {
MU_RUN_TEST(subghz_decoder_kinggates_stylo4k_test);
MU_RUN_TEST(subghz_decoder_mastercode_test);
MU_RUN_TEST(subghz_decoder_dickert_test);
MU_RUN_TEST(subghz_decoder_roger_test);
MU_RUN_TEST(subghz_decoder_hollarm_test);
MU_RUN_TEST(subghz_decoder_reversrb2_test);
MU_RUN_TEST(subghz_decoder_gangqi_test);
MU_RUN_TEST(subghz_decoder_hay21_test);
MU_RUN_TEST(subghz_decoder_feron_test);
MU_RUN_TEST(subghz_decoder_legrand_test);
MU_RUN_TEST(subghz_decoder_marantec24_test);
MU_RUN_TEST(subghz_encoder_princeton_test);
MU_RUN_TEST(subghz_encoder_came_test);
@@ -915,6 +1021,13 @@ MU_TEST_SUITE(subghz) {
MU_RUN_TEST(subghz_encoder_dooya_test);
MU_RUN_TEST(subghz_encoder_mastercode_test);
MU_RUN_TEST(subghz_encoder_dickert_test);
MU_RUN_TEST(subghz_encoder_feron_test);
MU_RUN_TEST(subghz_encoder_roger_test);
MU_RUN_TEST(subghz_encoder_gangqi_test);
MU_RUN_TEST(subghz_encoder_marantec24_test);
MU_RUN_TEST(subghz_encoder_hollarm_test);
MU_RUN_TEST(subghz_encoder_reversrb2_test);
MU_RUN_TEST(subghz_encoder_legrand_test);
MU_RUN_TEST(subghz_random_test);
subghz_test_deinit();