From d780c55ec1ad00c2b9d56ce9dcf87001a475e190 Mon Sep 17 00:00:00 2001 From: Vencislav Atanasov Date: Mon, 13 May 2024 05:11:40 +0300 Subject: [PATCH] Improve Hormann BiSecur readability in SubGHz history --- lib/subghz/protocols/hormann_bisecur.c | 21 ++++++++++++++++++++- lib/subghz/protocols/hormann_bisecur.h | 7 +++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/subghz/protocols/hormann_bisecur.c b/lib/subghz/protocols/hormann_bisecur.c index 54099e133..88f1b17f7 100644 --- a/lib/subghz/protocols/hormann_bisecur.c +++ b/lib/subghz/protocols/hormann_bisecur.c @@ -63,7 +63,7 @@ const SubGhzProtocolDecoder subghz_protocol_hormann_bisecur_decoder = { .serialize = subghz_protocol_decoder_hormann_bisecur_serialize, .deserialize = subghz_protocol_decoder_hormann_bisecur_deserialize, .get_string = subghz_protocol_decoder_hormann_bisecur_get_string, - .get_string_brief = NULL, + .get_string_brief = subghz_protocol_decoder_hormann_bisecur_get_string_brief, }; const SubGhzProtocolEncoder subghz_protocol_hormann_bisecur_encoder = { @@ -573,6 +573,25 @@ void subghz_protocol_decoder_hormann_bisecur_get_string(void* context, FuriStrin instance->generic.data_2); } +void subghz_protocol_decoder_hormann_bisecur_get_string_brief(void* context, FuriString* output) { + furi_assert(context); + SubGhzProtocolDecoderHormannBiSecur* instance = context; + subghz_protocol_hormann_bisecur_parse_data(instance); + bool valid_crc = subghz_protocol_decoder_hormann_bisecur_check_crc(instance); + + if(!valid_crc) { + furi_string_cat_printf(output, "HBS Bad checksum"); + return; + } + + uint8_t data_hash = subghz_protocol_blocks_xor_bytes( + (const uint8_t*)&instance->generic.data, sizeof(uint64_t)); + data_hash ^= subghz_protocol_blocks_xor_bytes( + (const uint8_t*)&instance->generic.data_2, sizeof(uint64_t)); + + furi_string_cat_printf(output, "HBS %08lX:%02X", instance->generic.serial, data_hash); +} + static LevelDuration subghz_protocol_encoder_hormann_bisecur_add_duration_to_upload( ManchesterEncoderResult result) { LevelDuration data = {.duration = 0, .level = 0}; diff --git a/lib/subghz/protocols/hormann_bisecur.h b/lib/subghz/protocols/hormann_bisecur.h index 3520a232a..bc4a5b5c8 100644 --- a/lib/subghz/protocols/hormann_bisecur.h +++ b/lib/subghz/protocols/hormann_bisecur.h @@ -109,3 +109,10 @@ SubGhzProtocolStatus subghz_protocol_decoder_hormann_bisecur_deserialize( * @param output Resulting text */ void subghz_protocol_decoder_hormann_bisecur_get_string(void* context, FuriString* output); + +/** + * Getting a one-line textual representation of the received data. + * @param context Pointer to a SubGhzProtocolDecoderHormannBiSecur instance + * @param output Resulting text + */ +void subghz_protocol_decoder_hormann_bisecur_get_string_brief(void* context, FuriString* output);