Skip to content
Snippets Groups Projects
Commit 43a4f712 authored by Smriti Gupta's avatar Smriti Gupta
Browse files

FM: Wait to be completely closed before processing next start

Wait for FM to be completely closed before processing next
start. Earlier, FM application was not getting
started sometimes on plug out and plug in.

Change-Id: I4e29095b1bb4652fadc34a760eea37fdf15ec155
CRs-Fixed: 1026888
parent d3d00ef1
No related branches found
No related tags found
No related merge requests found
......@@ -41,6 +41,7 @@ import android.content.Intent;
import android.net.wifi.WifiManager;
import android.content.IntentFilter;
import android.bluetooth.BluetoothAdapter;
import java.lang.Object;
/**
* This class contains all interfaces and types needed to
......@@ -439,6 +440,8 @@ public class FmReceiver extends FmTransceiver
}
}
};
private volatile int mState;
public static Object mLockObject = new Object();
/**
* Constructor for the receiver Object
......@@ -446,7 +449,7 @@ public class FmReceiver extends FmTransceiver
public FmReceiver(){
mControl = new FmRxControls();
mRdsData = new FmRxRdsData (sFd);
mRxEvents = new FmRxEventListner();
mRxEvents = new FmRxEventListner(this);
}
/**
......@@ -461,7 +464,7 @@ public class FmReceiver extends FmTransceiver
public FmReceiver(String devicePath,
FmRxEvCallbacksAdaptor callback) throws InstantiationException {
mControl = new FmRxControls();
mRxEvents = new FmRxEventListner();
mRxEvents = new FmRxEventListner(this);
Log.e(TAG, "FmReceiver constructor");
//registerClient(callback);
......@@ -576,22 +579,32 @@ public class FmReceiver extends FmTransceiver
* Check for FM State.
* If FMRx already on, then return.
*/
int state = getFMState();
int mState = getFMState();
mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
mBtIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
if (state == FMState_Rx_Turned_On || state == FMState_Srch_InProg) {
if (mState == FMState_Rx_Turned_On || mState == FMState_Srch_InProg) {
Log.d(TAG, "enable: FM already turned On and running");
return status;
}else if (state == subPwrLevel_FMTurning_Off) {
}else if (mState == subPwrLevel_FMTurning_Off) {
Log.v(TAG, "FM is in the process of turning off.Pls wait for sometime.");
return status;
}else if (state == subPwrLevel_FMRx_Starting) {
synchronized(mLockObject){
try {
if (getFMState() != FMState_Turned_Off) {
mLockObject.wait();
}
} catch (InterruptedException e) {
Log.e(TAG, "Error in waiting on mLockObject" + e);
}
}
}else if (mState == subPwrLevel_FMRx_Starting) {
Log.v(TAG, "FM is in the process of turning On.Pls wait for sometime.");
return status;
}else if ((state == FMState_Tx_Turned_On)
|| (state == subPwrLevel_FMTx_Starting)) {
}else if ((mState == FMState_Tx_Turned_On)
|| (mState == subPwrLevel_FMTx_Starting)) {
Log.v(TAG, "FM Tx is turned on or in the process of turning on.");
return status;
}
......
......@@ -59,8 +59,13 @@ class FmRxEventListner {
}
private Thread mThread;
private FmReceiver mReceiver;
private static final String TAG = "FMRadio";
public FmRxEventListner(FmReceiver receiver) {
mReceiver = receiver;
}
public void startListner (final int fd, final FmRxEvCallbacks cb) {
/* start a thread and listen for messages */
mThread = new Thread(){
......@@ -213,11 +218,14 @@ class FmRxEventListner {
case 18:
Log.d(TAG, "Got RADIO_DISABLED");
if (FmTransceiver.getFMPowerState() == FmTransceiver.subPwrLevel_FMTurning_Off) {
FmTransceiver.release("/dev/radio0");
cb.FmRxEvDisableReceiver();
/*Set the state as FMOff */
FmTransceiver.setFMPowerState(FmTransceiver.FMState_Turned_Off);
Log.v(TAG, "RxEvtList: CURRENT-STATE : FMTurningOff ---> NEW-STATE : FMOff");
synchronized(FmReceiver.mLockObject) {
FmTransceiver.release("/dev/radio0");
cb.FmRxEvDisableReceiver();
/*Set the state as FMOff */
FmTransceiver.setFMPowerState(FmTransceiver.FMState_Turned_Off);
Log.v(TAG, "RxEvtList: CURRENT-STATE : FMTurningOff ---> NEW-STATE : FMOff");
FmReceiver.mLockObject.notify();
}
Thread.currentThread().interrupt();
} else {
Log.d(TAG, "Unexpected RADIO_DISABLED recvd");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment