I had created an app to test ULPM with wake up on timer. I am using WP8548. Its working fine for 4 cycles of Shutdown and reboot. afterwards on 5th cycle boot up my app automatically got removed.The figure show my app running as ULP_testing_1. Also when I try to remove other 3 user apps,Its automatically getting reinstalled on the 5th cycle of ULPM boot up
Here is my Code…
#include “legato.h”
#include “interfaces.h”
//--------------------------------------------------------------------------
/**
- Function Prototype
*/
//--------------------------------------------------------------------------
void SwitchToLowPowerMode(void);
//--------------------------------------------------------------------------
/**
- Variables Declarations
*/
//--------------------------------------------------------------------------
le_timer_Ref_t ULPStartTimerRef = NULL;
//--------------------------------------------------------------------------
/**
- ULP mode entering- system live delay timer Handler
*/
//--------------------------------------------------------------------------
static void ULPSwitchingTimerHandler(le_timer_Ref_t timerRef){
LE_INFO("------------> Activating Ultra Low Power Mode<--------------");
SwitchToLowPowerMode();
//le_ulpm_BootOnTimer(60);
//le_ulpm_ShutDown();
}
//--------------------------------------------------------------------------
/**
- ULP mode Function
*/
//--------------------------------------------------------------------------
void SwitchToLowPowerMode(void)
{
char version[LE_ULPM_MAX_VERS_LEN+1];
// Get ultra low power manager firmware version
LE_FATAL_IF(le_ulpm_GetFirmwareVersion(version, sizeof(version)) != LE_OK,"Failed to get ultra low power firmware version");
LE_INFO("Ultra Low Power Manager Firmware version: %s", version);
// Boot after 1000 second of shutdown.
LE_ERROR_IF(le_ulpm_BootOnTimer(60) != LE_OK, "Can't set timer as boot source");
// Initiate shutdown.
LE_ERROR_IF(le_ulpm_ShutDown() != LE_OK, "Can't initiate shutdown");
}
//--------------------------------------------------------------------------
/**
- ULP mode entering- system live timer
*/
//--------------------------------------------------------------------------
static void SetupModbusPollingTimer()
{
ULPStartTimerRef = le_timer_Create(“ULPStartTimer”); //create timer
le_clk_Time_t interval = { 60, 0 }; //update every 60 seconds
le_timer_SetInterval(ULPStartTimerRef, interval); //Set delay
le_timer_SetRepeat(ULPStartTimerRef, 0); //set repeat to always
le_timer_SetHandler(ULPStartTimerRef, ULPSwitchingTimerHandler); //set callback function to handle timer expiration event
le_timer_Start(ULPStartTimerRef); //start timer
}
// Start App from here.
COMPONENT_INIT
{
LE_INFO("Ultra Low Power Testing.");
// Now check whether boot was due to timer expiry.
if (le_bootReason_WasTimer())
{
LE_INFO("ULPM: Booted from timer.");
}
else{
LE_INFO("ULPM: Booted from other reason.");
}
SetupModbusPollingTimer();
}