From 146ae8c3bf58fa8f85a1fc39be2bf4e68c4cd576 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 15 Aug 2023 21:09:25 +0300 Subject: [PATCH] Do not crash with fatal error on wrong ir frequency TODO: actually use infrared_signal_is_valid check! --- applications/main/infrared/infrared_signal.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/applications/main/infrared/infrared_signal.c b/applications/main/infrared/infrared_signal.c index 9154dfbf6..3f9a51908 100644 --- a/applications/main/infrared/infrared_signal.c +++ b/applications/main/infrared/infrared_signal.c @@ -208,6 +208,21 @@ void infrared_signal_set_raw_signal( float duty_cycle) { infrared_signal_clear_timings(signal); + // If the frequency is out of bounds, set it to the closest bound same for duty cycle + // TODO: Should we return error instead? Also infrared_signal_is_valid is used only in CLI for some reason?! + if(frequency > INFRARED_MAX_FREQUENCY) { + frequency = INFRARED_MAX_FREQUENCY; + } else if(frequency < INFRARED_MIN_FREQUENCY) { + frequency = INFRARED_MIN_FREQUENCY; + } + if((duty_cycle <= (float)0) || (duty_cycle > (float)1)) { + duty_cycle = (float)0.33; + } + // In case of timings out of bounds we just call return + if((timings_size <= 0) || (timings_size > MAX_TIMINGS_AMOUNT)) { + return; + } + signal->is_raw = true; signal->payload.raw.timings_size = timings_size;