Prechádzať zdrojové kódy

WS: fix Acurite-606TX protocol (#1938)

* WS: fix acurite_606tx protocol
* WS: update version
* WeatherStation: remove break from invalid place

Co-authored-by: あく <alleteam@gmail.com>
Skorpionm 3 rokov pred
rodič
commit
26f852839a

+ 1 - 1
applications/plugins/weather_station/helpers/weather_station_types.h

@@ -3,7 +3,7 @@
 #include <furi.h>
 #include <furi_hal.h>
 
-#define WS_VERSION_APP "0.3"
+#define WS_VERSION_APP "0.3.1"
 #define WS_DEVELOPED "SkorP"
 #define WS_GITHUB "https://github.com/flipperdevices/flipperzero-firmware"
 

+ 30 - 34
applications/plugins/weather_station/protocols/acurite_606tx.c

@@ -151,41 +151,37 @@ void ws_protocol_decoder_acurite_606tx_feed(void* context, bool level, uint32_t
 
     case Acurite_606TXDecoderStepCheckDuration:
         if(!level) {
-            if((DURATION_DIFF(instance->decoder.te_last, ws_protocol_acurite_606tx_const.te_short) <
-                ws_protocol_acurite_606tx_const.te_delta) &&
-               (DURATION_DIFF(duration, ws_protocol_acurite_606tx_const.te_short) <
-                ws_protocol_acurite_606tx_const.te_delta)) {
-                //Found syncPostfix
-                instance->decoder.parser_step = Acurite_606TXDecoderStepReset;
-                if((instance->decoder.decode_count_bit ==
-                    ws_protocol_acurite_606tx_const.min_count_bit_for_found) &&
-                   ws_protocol_acurite_606tx_check(instance)) {
-                    instance->generic.data = instance->decoder.decode_data;
-                    instance->generic.data_count_bit = instance->decoder.decode_count_bit;
-                    ws_protocol_acurite_606tx_remote_controller(&instance->generic);
-                    if(instance->base.callback)
-                        instance->base.callback(&instance->base, instance->base.context);
+            if(DURATION_DIFF(instance->decoder.te_last, ws_protocol_acurite_606tx_const.te_short) <
+               ws_protocol_acurite_606tx_const.te_delta) {
+                if((DURATION_DIFF(duration, ws_protocol_acurite_606tx_const.te_short) <
+                    ws_protocol_acurite_606tx_const.te_delta) ||
+                   (duration > ws_protocol_acurite_606tx_const.te_long * 3)) {
+                    //Found syncPostfix
+                    instance->decoder.parser_step = Acurite_606TXDecoderStepReset;
+                    if((instance->decoder.decode_count_bit ==
+                        ws_protocol_acurite_606tx_const.min_count_bit_for_found) &&
+                       ws_protocol_acurite_606tx_check(instance)) {
+                        instance->generic.data = instance->decoder.decode_data;
+                        instance->generic.data_count_bit = instance->decoder.decode_count_bit;
+                        ws_protocol_acurite_606tx_remote_controller(&instance->generic);
+                        if(instance->base.callback)
+                            instance->base.callback(&instance->base, instance->base.context);
+                    }
+                    instance->decoder.decode_data = 0;
+                    instance->decoder.decode_count_bit = 0;
+                } else if(
+                    DURATION_DIFF(duration, ws_protocol_acurite_606tx_const.te_long) <
+                    ws_protocol_acurite_606tx_const.te_delta * 2) {
+                    subghz_protocol_blocks_add_bit(&instance->decoder, 0);
+                    instance->decoder.parser_step = Acurite_606TXDecoderStepSaveDuration;
+                } else if(
+                    DURATION_DIFF(duration, ws_protocol_acurite_606tx_const.te_long * 2) <
+                    ws_protocol_acurite_606tx_const.te_delta * 4) {
+                    subghz_protocol_blocks_add_bit(&instance->decoder, 1);
+                    instance->decoder.parser_step = Acurite_606TXDecoderStepSaveDuration;
+                } else {
+                    instance->decoder.parser_step = Acurite_606TXDecoderStepReset;
                 }
-                instance->decoder.decode_data = 0;
-                instance->decoder.decode_count_bit = 0;
-
-                break;
-            } else if(
-                (DURATION_DIFF(
-                     instance->decoder.te_last, ws_protocol_acurite_606tx_const.te_short) <
-                 ws_protocol_acurite_606tx_const.te_delta) &&
-                (DURATION_DIFF(duration, ws_protocol_acurite_606tx_const.te_long) <
-                 ws_protocol_acurite_606tx_const.te_delta * 2)) {
-                subghz_protocol_blocks_add_bit(&instance->decoder, 0);
-                instance->decoder.parser_step = Acurite_606TXDecoderStepSaveDuration;
-            } else if(
-                (DURATION_DIFF(
-                     instance->decoder.te_last, ws_protocol_acurite_606tx_const.te_short) <
-                 ws_protocol_acurite_606tx_const.te_delta) &&
-                (DURATION_DIFF(duration, ws_protocol_acurite_606tx_const.te_long * 2) <
-                 ws_protocol_acurite_606tx_const.te_delta * 4)) {
-                subghz_protocol_blocks_add_bit(&instance->decoder, 1);
-                instance->decoder.parser_step = Acurite_606TXDecoderStepSaveDuration;
             } else {
                 instance->decoder.parser_step = Acurite_606TXDecoderStepReset;
             }