@@ -394,22 +394,35 @@ extern "C" void vApplicationIdleHook(void)
394394#endif // SL_CATALOG_SIMPLE_BUTTON_PRESENT
395395 SiWxPlatformInterface::sl_si91x_uart_power_requirement_handler ();
396396#endif
397+ }
398+
397399#if CHIP_CONFIG_ENABLE_ICD_SERVER
398400#if defined(SL_EM4_SLEEP) && (SL_EM4_SLEEP == 1)
401+ extern " C" void sl_matter_em4_check (uint32_t expected_idle_time_ms)
402+ {
399403 if (chip::ICDConfigurationData::GetInstance ().GetICDMode () == chip::ICDConfigurationData::ICDMode::LIT)
400404 {
401- uint32_t sleepTimeRemaining = 0 ;
402- sl_sleeptimer_get_remaining_time_of_first_timer ( SL_SLEEPTIMER_ANY_FLAG ,&sleepTimeRemaining);
403- uint32_t sleepTimeMs = sl_sleeptimer_tick_to_ms (sleepTimeRemaining);
404405 uint32_t idleDuration_seconds = chip::ICDConfigurationData::GetInstance ().GetIdleModeDuration ().count ();
405-
406+ uint32_t threshold_ms = idleDuration_seconds * SL_EM4_THRESHOLD_PERCENTAGE * 10 ;
407+
408+ ChipLogDetail (DeviceLayer, " Expected Idle time (ms): %lu" , expected_idle_time_ms);
409+
410+ ChipLogDetail (DeviceLayer, " EM4 Threshold (hh::mm::ss): %ld:%ld:%ld" , (threshold_ms / 3600000 ),
411+ (threshold_ms % 3600000 ) / 60000 ,
412+ ((threshold_ms % 3600000 ) % 60000 ) / 1000 );
413+
406414 // Since the sleep timer will never match the actual idle time (hardware latency, etc), we set a threshold
407415 // Multiply by 10 to converts seconds into milliseconds (e.g. 90% of 1000sec in ms is 1000*90*10 = 900000ms)
408- if (sleepTimeMs >= (idleDuration_seconds * SL_EM4_THRESHOLD_PERCENTAGE * 10 ))
416+ if (expected_idle_time_ms >= (idleDuration_seconds * SL_EM4_THRESHOLD_PERCENTAGE * 10 ))
409417 {
410- OnEM4Trigger (sleepTimeMs);
418+
419+ ChipLogDetail (DeviceLayer, " Going into EM4 for : %ld:%ld:%ld" , (expected_idle_time_ms / 3600000 ),
420+ (expected_idle_time_ms % 3600000 ) / 60000 ,
421+ ((expected_idle_time_ms % 3600000 ) % 60000 ) / 1000 );
422+
423+ OnEM4Trigger (expected_idle_time_ms);
411424 }
412425 }
413- #endif
414- #endif
415426}
427+ #endif // defined(SL_EM4_SLEEP) && (SL_EM4_SLEEP == 1)
428+ #endif // CHIP_CONFIG_ENABLE_ICD_SERVER
0 commit comments