@@ -140,9 +140,40 @@ static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* inst
140140 data_prg [0 ] = 0x00 ;
141141
142142 if (allow_zero_seed || (instance -> generic .seed != 0x0 )) {
143- instance -> generic .cnt += furi_hal_subghz_get_rolling_counter_mult ();
143+ if (!(furi_hal_subghz_get_rolling_counter_mult () >= 0xFFFF )) {
144+ if (instance -> generic .cnt < 0xFFFFF ) {
145+ if ((instance -> generic .cnt + furi_hal_subghz_get_rolling_counter_mult ()) >
146+ 0xFFFFF ) {
147+ instance -> generic .cnt = 0 ;
148+ } else {
149+ instance -> generic .cnt += furi_hal_subghz_get_rolling_counter_mult ();
150+ }
151+ } else if (
152+ (instance -> generic .cnt >= 0xFFFFF ) &&
153+ (furi_hal_subghz_get_rolling_counter_mult () != 0 )) {
154+ instance -> generic .cnt = 0 ;
155+ }
156+ } else {
157+ instance -> generic .cnt += 1 ;
158+ }
159+
144160 if (temp_counter_backup != 0x0 ) {
145- temp_counter_backup += furi_hal_subghz_get_rolling_counter_mult ();
161+ if (!(furi_hal_subghz_get_rolling_counter_mult () >= 0xFFFF )) {
162+ if (temp_counter_backup < 0xFFFFF ) {
163+ if ((temp_counter_backup + furi_hal_subghz_get_rolling_counter_mult ()) >
164+ 0xFFFFF ) {
165+ temp_counter_backup = 0 ;
166+ } else {
167+ temp_counter_backup += furi_hal_subghz_get_rolling_counter_mult ();
168+ }
169+ } else if (
170+ (temp_counter_backup >= 0xFFFFF ) &&
171+ (furi_hal_subghz_get_rolling_counter_mult () != 0 )) {
172+ temp_counter_backup = 0 ;
173+ }
174+ } else {
175+ temp_counter_backup += 1 ;
176+ }
146177 }
147178 }
148179
@@ -193,7 +224,9 @@ static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* inst
193224 (temp_fix_backup != 0x0 ) && !faac_prog_mode ) {
194225 instance -> generic .serial = temp_fix_backup >> 4 ;
195226 instance -> generic .btn = temp_fix_backup & 0xF ;
196- instance -> generic .cnt = temp_counter_backup ;
227+ if (temp_counter_backup != 0x0 ) {
228+ instance -> generic .cnt = temp_counter_backup ;
229+ }
197230 }
198231 uint32_t fix = instance -> generic .serial << 4 | instance -> generic .btn ;
199232 uint32_t hop = 0 ;
@@ -207,7 +240,32 @@ static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* inst
207240 }
208241
209242 if (allow_zero_seed || (instance -> generic .seed != 0x0 )) {
210- instance -> generic .cnt += furi_hal_subghz_get_rolling_counter_mult ();
243+ if (!(furi_hal_subghz_get_rolling_counter_mult () >= 0xFFFF )) {
244+ if (instance -> generic .cnt < 0xFFFFF ) {
245+ if ((instance -> generic .cnt + furi_hal_subghz_get_rolling_counter_mult ()) >
246+ 0xFFFFF ) {
247+ instance -> generic .cnt = 0 ;
248+ } else {
249+ instance -> generic .cnt += furi_hal_subghz_get_rolling_counter_mult ();
250+ }
251+ } else if (
252+ (instance -> generic .cnt >= 0xFFFFF ) &&
253+ (furi_hal_subghz_get_rolling_counter_mult () != 0 )) {
254+ instance -> generic .cnt = 0 ;
255+ }
256+ } else {
257+ if (instance -> generic .cnt < 0xFFFFF ) {
258+ if ((instance -> generic .cnt + 0xFFFFF ) > 0xFFFFF ) {
259+ instance -> generic .cnt = 0 ;
260+ } else {
261+ instance -> generic .cnt += 0xFFFFF ;
262+ }
263+ } else if (
264+ (instance -> generic .cnt >= 0xFFFFF ) &&
265+ (furi_hal_subghz_get_rolling_counter_mult () != 0 )) {
266+ instance -> generic .cnt = 0 ;
267+ }
268+ }
211269 }
212270
213271 if ((instance -> generic .cnt % 2 ) == 0 ) {
@@ -248,7 +306,7 @@ bool subghz_protocol_faac_slh_create_data(
248306 const char * manufacture_name ,
249307 SubGhzRadioPreset * preset ) {
250308 furi_assert (context );
251- // roguemaster don't steal!!!
309+ // OwO
252310 SubGhzProtocolEncoderFaacSLH * instance = context ;
253311 instance -> generic .serial = serial ;
254312 instance -> generic .btn = btn ;
0 commit comments