//-------------------------------------------------------------------------------------------------- static void StopCellularNetwork ( void ) { le_onoff_t radioState; le_result_t result; result=le_mrc_GetRadioPower(&radioState); if ((result == LE_OK) && (radioState == LE_OFF)) { return; } else { // Try to shutdown the radio anyway le_mrc_SetRadioPower(LE_OFF); // Set a timer that gets the current position. le_timer_Ref_t stopCellNetTimer = le_timer_Create("StopCellNetTimer"); le_clk_Time_t interval = {5, 0}; // 5 seconds if ( (le_timer_SetHandler(stopCellNetTimer, StopCellNetTimerHandler) != LE_OK) || (le_timer_SetRepeat(stopCellNetTimer, 0) != LE_OK) || (le_timer_SetInterval(stopCellNetTimer, interval) != LE_OK) || (le_timer_Start(stopCellNetTimer) != LE_OK) ) { LE_ERROR("Could not start the StopCellNet timer!"); } } }
//-------------------------------------------------------------------------------------------------- static void StopCellNetTimerHandler ( le_timer_Ref_t timerRef ) { le_onoff_t radioState; le_result_t result; if(RequestCount != 0) { // Request has been requested in the meantime, I must cancel the Release command process le_timer_Delete(timerRef); } else { result=le_mrc_GetRadioPower(&radioState); if ((result == LE_OK) && (radioState == LE_OFF)) { // The radio is OFF, stop and delete the Timer. le_timer_Delete(timerRef); } else { le_mrc_SetRadioPower(LE_OFF); // TODO: find a solution to get off of this infinite loop } } }
//------------------------------------------------------------------------------------------------- int cm_mrc_SetRadioPower ( le_onoff_t power ///< [IN] Radio power switch ) { le_result_t res; le_onoff_t currPower; res = le_mrc_GetRadioPower(&currPower); if (res != LE_OK) { return EXIT_FAILURE; } // Don't set if the radio power if it's the same if (currPower == power) { switch (currPower) { case 0: printf("Radio power is already set to OFF.\n"); break; case 1: printf("Radio power is already set to ON.\n"); break; default: break; } } else { res = le_mrc_SetRadioPower(power); if (res != LE_OK) { return EXIT_FAILURE; } } return EXIT_SUCCESS; }
//-------------------------------------------------------------------------------------------------- static void StartCellularNetwork ( void ) { le_onoff_t radioState; le_result_t result; result=le_mrc_GetRadioPower(&radioState); if ((result == LE_OK) && (radioState == LE_ON)) { // Load SIM configuration from secure storage le_sim_Id_t simSelected = le_sim_GetSelectedCard(); if (le_sim_IsPresent(simSelected)) { LoadSimFromSecStore(simSelected); } // Notify the applications even if the SIM is absent GetAndSendCellNetStateEvent(); } else { // Try to power ON the radio anyway le_mrc_SetRadioPower(LE_ON); // Set a timer that gets the current position. le_timer_Ref_t startCellNetTimer = le_timer_Create("StartCellNetTimer"); le_clk_Time_t interval = {15, 0}; // 15 seconds if ( (le_timer_SetHandler(startCellNetTimer, StartCellNetTimerHandler) != LE_OK) || (le_timer_SetRepeat(startCellNetTimer, 0) != LE_OK) || (le_timer_SetInterval(startCellNetTimer, interval) != LE_OK) || (le_timer_Start(startCellNetTimer) != LE_OK) ) { LE_ERROR("Could not start the StartCellNet timer!"); } } }
//-------------------------------------------------------------------------------------------------- static void StartCellNetTimerHandler ( le_timer_Ref_t timerRef ) { le_onoff_t radioState; le_result_t result; if(RequestCount == 0) { // Release has been requested in the meantime, I must cancel the Request command process le_timer_Delete(timerRef); } else { result=le_mrc_GetRadioPower(&radioState); if ((result == LE_OK) && (radioState == LE_ON)) { // The radio is ON, stop and delete the Timer. le_timer_Delete(timerRef); // Load SIM configuration from secure storage le_sim_Id_t simSelected = le_sim_GetSelectedCard(); if (le_sim_IsPresent(simSelected)) { LoadSimFromSecStore(simSelected); } // Notify the applications even if the SIM is absent GetAndSendCellNetStateEvent(); } else { le_mrc_SetRadioPower(LE_ON); // TODO: find a solution to get off of this infinite loop } } }