From ec4015960c02eb026c71ec2a5b96a19965022529 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Mon, 24 Jun 2024 20:34:01 +0200 Subject: [PATCH] Sub-GHz: Refactor Weather protocols --- ChangeLog.md | 4 +- lib/subghz/protocols/acurite_592txr.c | 19 +--------- lib/subghz/protocols/acurite_606tx.c | 19 +--------- lib/subghz/protocols/acurite_609txc.c | 19 +--------- lib/subghz/protocols/acurite_986.c | 19 +--------- lib/subghz/protocols/ambient_weather.c | 19 +--------- lib/subghz/protocols/auriol_ahfl.c | 19 +--------- lib/subghz/protocols/auriol_hg0601a.c | 19 +--------- lib/subghz/protocols/gt_wt_02.c | 19 +--------- lib/subghz/protocols/gt_wt_03.c | 19 +--------- lib/subghz/protocols/infactory.c | 19 +--------- lib/subghz/protocols/kedsum_th.c | 19 +--------- lib/subghz/protocols/lacrosse_tx.c | 19 +--------- lib/subghz/protocols/lacrosse_tx141thbv2.c | 19 +--------- lib/subghz/protocols/nexus_th.c | 19 +--------- lib/subghz/protocols/oregon_v1.c | 19 +--------- lib/subghz/protocols/thermopro_tx4.c | 19 +--------- lib/subghz/protocols/tx_8300.c | 19 +--------- lib/subghz/protocols/wendox_w6726.c | 19 +--------- lib/subghz/protocols/ws_generic.c | 43 +++++++++++++++++++++- lib/subghz/protocols/ws_generic.h | 7 ++++ 21 files changed, 70 insertions(+), 326 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index a168e7405..af0005ae5 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -38,7 +38,9 @@ - UL: Barcode: Fix backlight settings (by @xMasterX) - Many apps updated for new refactors (by @Willy-JL & @xMasterX) - UL: NFC: Better plugin loading, faster launch from favourites, no lag in Saved menu (by @xMasterX) -- Sub-GHz: Streamline generic serialize +1.5k free flash (by @Willy-JL) +- Sub-GHz: + - Streamline generic serialize +1.5k free flash (by @Willy-JL) + - Refactor Weather protocols in Sub-GHz app, shows only correct data (by @Willy-JL) - CLI: Simpler plugin wrapper +0.5k free flash (by @Willy-JL) - OFW: Furi: Use static synchronisation primitives, prepare for event loop (by @gsurkov & @skotopes) - OFW: Code Cleanup: Unused includes, useless checks, unused variables, etc... (by @skotopes) diff --git a/lib/subghz/protocols/acurite_592txr.c b/lib/subghz/protocols/acurite_592txr.c index 2d0f8828b..ffde29323 100644 --- a/lib/subghz/protocols/acurite_592txr.c +++ b/lib/subghz/protocols/acurite_592txr.c @@ -287,24 +287,7 @@ SubGhzProtocolStatus void ws_protocol_decoder_acurite_592txr_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderAcurite_592TXR* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } void* ws_protocol_encoder_acurite_592txr_alloc(SubGhzEnvironment* environment) { diff --git a/lib/subghz/protocols/acurite_606tx.c b/lib/subghz/protocols/acurite_606tx.c index 95680495b..0353ce16a 100644 --- a/lib/subghz/protocols/acurite_606tx.c +++ b/lib/subghz/protocols/acurite_606tx.c @@ -226,22 +226,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_acurite_606tx_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderAcurite_606TX* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/acurite_609txc.c b/lib/subghz/protocols/acurite_609txc.c index 569c01dc3..13d528372 100644 --- a/lib/subghz/protocols/acurite_609txc.c +++ b/lib/subghz/protocols/acurite_609txc.c @@ -226,22 +226,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_acurite_609txc_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderAcurite_609TXC* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 40), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/acurite_986.c b/lib/subghz/protocols/acurite_986.c index ea58bc5e1..45d94d3b9 100644 --- a/lib/subghz/protocols/acurite_986.c +++ b/lib/subghz/protocols/acurite_986.c @@ -258,22 +258,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_acurite_986_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderAcurite_986* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? locale_fahrenheit_to_celsius(instance->generic.temp) : - instance->generic.temp), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/ambient_weather.c b/lib/subghz/protocols/ambient_weather.c index ecf07030c..c010a38fc 100644 --- a/lib/subghz/protocols/ambient_weather.c +++ b/lib/subghz/protocols/ambient_weather.c @@ -255,22 +255,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_ambient_weather_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderAmbient_Weather* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/auriol_ahfl.c b/lib/subghz/protocols/auriol_ahfl.c index bc5e29269..20b5b09b1 100644 --- a/lib/subghz/protocols/auriol_ahfl.c +++ b/lib/subghz/protocols/auriol_ahfl.c @@ -241,22 +241,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_auriol_ahfl_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderAuriol_AHFL* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/auriol_hg0601a.c b/lib/subghz/protocols/auriol_hg0601a.c index c690f5b7e..4b1bbf57e 100644 --- a/lib/subghz/protocols/auriol_hg0601a.c +++ b/lib/subghz/protocols/auriol_hg0601a.c @@ -235,22 +235,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_auriol_th_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderAuriol_TH* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/gt_wt_02.c b/lib/subghz/protocols/gt_wt_02.c index ef30d3ef8..05ce95963 100644 --- a/lib/subghz/protocols/gt_wt_02.c +++ b/lib/subghz/protocols/gt_wt_02.c @@ -242,22 +242,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_gt_wt_02_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderGT_WT02* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/gt_wt_03.c b/lib/subghz/protocols/gt_wt_03.c index 7e5160ad5..cbcf10761 100644 --- a/lib/subghz/protocols/gt_wt_03.c +++ b/lib/subghz/protocols/gt_wt_03.c @@ -317,22 +317,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_gt_wt_03_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderGT_WT03* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/infactory.c b/lib/subghz/protocols/infactory.c index 603c229b1..6757393bb 100644 --- a/lib/subghz/protocols/infactory.c +++ b/lib/subghz/protocols/infactory.c @@ -273,22 +273,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_infactory_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderInfactory* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/kedsum_th.c b/lib/subghz/protocols/kedsum_th.c index 45ebf5629..9c44fe93e 100644 --- a/lib/subghz/protocols/kedsum_th.c +++ b/lib/subghz/protocols/kedsum_th.c @@ -281,22 +281,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_kedsum_th_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderKedsumTH* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/lacrosse_tx.c b/lib/subghz/protocols/lacrosse_tx.c index 5027fef40..07f75f818 100644 --- a/lib/subghz/protocols/lacrosse_tx.c +++ b/lib/subghz/protocols/lacrosse_tx.c @@ -306,22 +306,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_lacrosse_tx_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderLaCrosse_TX* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/lacrosse_tx141thbv2.c b/lib/subghz/protocols/lacrosse_tx141thbv2.c index 8887bef10..9c3f1847c 100644 --- a/lib/subghz/protocols/lacrosse_tx141thbv2.c +++ b/lib/subghz/protocols/lacrosse_tx141thbv2.c @@ -292,22 +292,5 @@ SubGhzProtocolStatus ws_protocol_decoder_lacrosse_tx141thbv2_deserialize( void ws_protocol_decoder_lacrosse_tx141thbv2_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderLaCrosse_TX141THBv2* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/nexus_th.c b/lib/subghz/protocols/nexus_th.c index 4eb0c1b1a..0ed331967 100644 --- a/lib/subghz/protocols/nexus_th.c +++ b/lib/subghz/protocols/nexus_th.c @@ -313,24 +313,7 @@ SubGhzProtocolStatus void ws_protocol_decoder_nexus_th_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderNexus_TH* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } const SubGhzProtocolDecoder ws_protocol_nexus_th_decoder = { diff --git a/lib/subghz/protocols/oregon_v1.c b/lib/subghz/protocols/oregon_v1.c index 87a3f0216..2d97f4b70 100644 --- a/lib/subghz/protocols/oregon_v1.c +++ b/lib/subghz/protocols/oregon_v1.c @@ -308,22 +308,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_oregon_v1_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderOregon_V1* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/thermopro_tx4.c b/lib/subghz/protocols/thermopro_tx4.c index 9ca5c33ee..f1eeaa264 100644 --- a/lib/subghz/protocols/thermopro_tx4.c +++ b/lib/subghz/protocols/thermopro_tx4.c @@ -238,22 +238,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_thermopro_tx4_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderThermoPRO_TX4* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/tx_8300.c b/lib/subghz/protocols/tx_8300.c index 811c1243c..8db0299af 100644 --- a/lib/subghz/protocols/tx_8300.c +++ b/lib/subghz/protocols/tx_8300.c @@ -271,22 +271,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_tx_8300_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderTX_8300* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/wendox_w6726.c b/lib/subghz/protocols/wendox_w6726.c index 13fe8138e..5ffc19eda 100644 --- a/lib/subghz/protocols/wendox_w6726.c +++ b/lib/subghz/protocols/wendox_w6726.c @@ -286,22 +286,5 @@ SubGhzProtocolStatus void ws_protocol_decoder_wendox_w6726_get_string(void* context, FuriString* output) { furi_assert(context); WSProtocolDecoderWendoxW6726* instance = context; - bool locale_is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; - furi_string_cat_printf( - output, - "%s\r\n%dbit\r\n" - "Key:0x%lX%08lX\r\n" - "Sn:0x%lX Ch:%d Bat:%d\r\n" - "Temp:%3.1f %c Hum:%d%%", - instance->generic.protocol_name, - instance->generic.data_count_bit, - (uint32_t)(instance->generic.data >> 32), - (uint32_t)(instance->generic.data), - instance->generic.id, - instance->generic.channel, - instance->generic.battery_low, - (double)(locale_is_metric ? instance->generic.temp : - locale_celsius_to_fahrenheit(instance->generic.temp)), - locale_is_metric ? 'C' : 'F', - instance->generic.humidity); + ws_block_generic_get_string(&instance->generic, output); } diff --git a/lib/subghz/protocols/ws_generic.c b/lib/subghz/protocols/ws_generic.c index b4374bca2..dd9f98bfa 100644 --- a/lib/subghz/protocols/ws_generic.c +++ b/lib/subghz/protocols/ws_generic.c @@ -1,7 +1,7 @@ #include "ws_generic.h" #include #include -//#include "../helpers/weather_station_types.h" +#include #define TAG "WSBlockGeneric" @@ -194,4 +194,45 @@ SubGhzProtocolStatus ws_block_generic_deserialize_check_count_bit( } } while(false); return ret; +} + +void ws_block_generic_get_string(WSBlockGeneric* instance, FuriString* output) { + furi_string_cat_printf( + output, "%s\r\n%dbit ", instance->protocol_name, instance->data_count_bit); + if(instance->channel != WS_NO_CHANNEL) { + furi_string_cat_printf(output, "Ch:%01d\r\n", instance->channel); + } else { + furi_string_cat(output, "\r\n"); + } + + if(instance->id != WS_NO_ID) { + furi_string_cat_printf(output, "Sn:0x%02lX ", instance->id); + } + if(instance->channel != WS_NO_BTN) { + furi_string_cat_printf(output, "Btn:%01d ", instance->btn); + } + if(instance->battery_low != WS_NO_BATT) { + furi_string_cat_printf( + output, "Batt:%s\r\n", (!instance->battery_low ? "ok" : "low")); + } else { + furi_string_cat(output, "\r\n"); + } + + furi_string_cat_printf( + output, + "Data:0x%lX%08lX\r\n", + (uint32_t)(instance->data >> 32), + (uint32_t)(instance->data)); + + if(!float_is_equal(instance->temp, WS_NO_TEMPERATURE)) { + bool is_metric = furi_hal_rtc_get_locale_units() == FuriHalRtcLocaleUnitsMetric; + furi_string_cat_printf( + output, + "Temp:%3.1f %c ", + (double)(is_metric ? instance->temp : locale_celsius_to_fahrenheit(instance->temp)), + is_metric ? 'C' : 'F'); + } + if(instance->humidity != WS_NO_HUMIDITY) { + furi_string_cat_printf(output, "Hum:%d%%", instance->humidity); + } } \ No newline at end of file diff --git a/lib/subghz/protocols/ws_generic.h b/lib/subghz/protocols/ws_generic.h index 377971b7a..39407e052 100644 --- a/lib/subghz/protocols/ws_generic.h +++ b/lib/subghz/protocols/ws_generic.h @@ -63,6 +63,13 @@ SubGhzProtocolStatus ws_block_generic_deserialize_check_count_bit( FlipperFormat* flipper_format, uint16_t count_bit); +/** + * Get string WSBlockGeneric. + * @param instance Pointer to a WSBlockGeneric instance + * @param output Pointer to a FuriString instance + */ +void ws_block_generic_get_string(WSBlockGeneric* instance, FuriString* output); + #ifdef __cplusplus } #endif \ No newline at end of file