Revert "FM: Remove Ioctl base code"
This reverts commit 5156eb1ae2b6a385ccfee8a1ddadf5811dce8f82.
Change-Id: I68fb8a81cadde7a49d83f9189d592e88d1b35ba8
diff --git a/fmapp2/Android.bp b/fmapp2/Android.bp
index a2ef6ab..eeeab5f 100755
--- a/fmapp2/Android.bp
+++ b/fmapp2/Android.bp
@@ -3,7 +3,7 @@
android_app {
name: "FM2",
- srcs: ["src/com/caf/fmradio/CommaSeparatedFreqFileReader.java"] + ["src/com/caf/fmradio/FMAdapterApp.java"] + ["src/com/caf/fmradio/FMMediaButtonIntentReceiver.java"] + ["src/com/caf/fmradio/FMRadio.java"] + ["src/com/caf/fmradio/FMRadioService.java"] + ["src/com/caf/fmradio/FmSharedPreferences.java"] + ["src/com/caf/fmradio/FMStats.java"] + ["src/com/caf/fmradio/FmTags.java"] + ["src/com/caf/fmradio/GetNextFreqInterface.java"] + ["src/com/caf/fmradio/HorizontalNumberPicker.java"] + ["src/com/caf/fmradio/PresetList.java"] + ["src/com/caf/fmradio/PresetStation.java"] + ["src/com/caf/fmradio/Settings.java"] + ["src/com/caf/fmradio/StationListActivity.java"] + ["src/com/caf/fmradio/IFMRadioService.aidl"] + ["src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl"] + ["src/com/caf/fmradio/IFMTransmitterServiceCallbacks.aidl"] + ["src/com/caf/hc_utils/**/*.java"],
+ srcs: ["src/com/caf/fmradio/CommaSeparatedFreqFileReader.java"] + ["src/com/caf/fmradio/FMAdapterApp.java"] + ["src/com/caf/fmradio/FMMediaButtonIntentReceiver.java"] + ["src/com/caf/fmradio/FMRadio.java"] + ["src/com/caf/fmradio/FMRadioService.java"] + ["src/com/caf/fmradio/FmSharedPreferences.java"] + ["src/com/caf/fmradio/FMStats.java"] + ["src/com/caf/fmradio/FmTags.java"] + ["src/com/caf/fmradio/GetNextFreqInterface.java"] + ["src/com/caf/fmradio/HorizontalNumberPicker.java"] + ["src/com/caf/fmradio/PresetList.java"] + ["src/com/caf/fmradio/PresetStation.java"] + ["src/com/caf/fmradio/Settings.java"] + ["src/com/caf/fmradio/StationListActivity.java"] + ["src/com/caf/fmradio/IFMRadioService.aidl"] + ["src/com/caf/fmradio/IFMRadioServiceCallbacks.aidl"] + ["src/com/caf/hc_utils/**/*.java"],
certificate: "platform",
jni_libs: ["libqcomfm_jni"],
libs: ["qcom.fmradio"],
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index 861e4aa..9930514 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -834,7 +834,9 @@
setLowPowerMode(false);
if(false == mPlaybackInProgress) {
startFM();
- enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+ if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+ enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+ }
}
}
}
@@ -1593,9 +1595,10 @@
//intentional fall through.
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
-
- enableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
-
+ if (mReceiver != null && mReceiver.isCherokeeChip() &&
+ (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+ enableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
+ }
if (true == mPlaybackInProgress) {
stopFM();
}
@@ -1617,8 +1620,10 @@
if(false == mPlaybackInProgress) {
startFM();
- enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
-
+ if (mReceiver != null && mReceiver.isCherokeeChip() &&
+ (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+ enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+ }
} else {
/* This case usually happens, when FM volume is lowered down and Playback
* In Progress on AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK recived. Need
@@ -1924,6 +1929,11 @@
{
return(mService.get().getProgramID());
}
+ public int[] getSearchList()
+ {
+ return(mService.get().getSearchList());
+ }
+
public boolean setLowPowerMode(boolean enable)
{
return(mService.get().setLowPowerMode(enable));
@@ -2168,6 +2178,86 @@
return status;
}
+ private boolean fmTurnOnSequence () {
+ boolean bStatus = false;
+ // This sets up the FM radio device
+ FmConfig config = FmSharedPreferences.getFMConfiguration();
+
+ Log.d(LOGTAG, "fmOn: RadioBand :"+ config.getRadioBand());
+ Log.d(LOGTAG, "fmOn: Emphasis :"+ config.getEmphasis());
+ Log.d(LOGTAG, "fmOn: ChSpacing :"+ config.getChSpacing());
+ Log.d(LOGTAG, "fmOn: RdsStd :"+ config.getRdsStd());
+ Log.d(LOGTAG, "fmOn: LowerLimit :"+ config.getLowerLimit());
+ Log.d(LOGTAG, "fmOn: UpperLimit :"+ config.getUpperLimit());
+
+ mEventReceived = false;
+ bStatus = mReceiver.enable(FmSharedPreferences.getFMConfiguration(), this);
+
+ if (mReceiver.isCherokeeChip()) {
+ bStatus = waitForEvent();
+ }
+
+ Log.d(LOGTAG, "mReceiver.enable done, Status :" + bStatus);
+
+ if (bStatus == true)
+ {
+ /* Put the hardware into normal mode */
+ bStatus = setLowPowerMode(false);
+ Log.d(LOGTAG, "setLowPowerMode done, Status :" + bStatus);
+
+
+ AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+ if( (audioManager != null) &&(false == mPlaybackInProgress) )
+ {
+ Log.d(LOGTAG, "mAudioManager.setFmRadioOn = true \n" );
+ //audioManager.setParameters("FMRadioOn="+mAudioDevice);
+ int state = getCallState();
+ if ( TelephonyManager.CALL_STATE_IDLE != getCallState() )
+ {
+ fmActionOnCallState(state);
+ } else {
+ startFM(); // enable FM Audio only when Call is IDLE
+ }
+ Log.d(LOGTAG, "mAudioManager.setFmRadioOn done \n" );
+ }
+ if (mReceiver != null) {
+ bStatus = mReceiver.registerRdsGroupProcessing(FmReceiver.FM_RX_RDS_GRP_RT_EBL|
+ FmReceiver.FM_RX_RDS_GRP_PS_EBL|
+ FmReceiver.FM_RX_RDS_GRP_AF_EBL|
+ FmReceiver.FM_RX_RDS_GRP_PS_SIMPLE_EBL|
+ FmReceiver.FM_RX_RDS_GRP_ECC_EBL|
+ FmReceiver.FM_RX_RDS_GRP_PTYN_EBL|
+ FmReceiver.FM_RX_RDS_GRP_RT_PLUS_EBL);
+ Log.d(LOGTAG, "registerRdsGroupProcessing done, Status :" + bStatus);
+ }
+ bStatus = enableAutoAF(FmSharedPreferences.getAutoAFSwitch());
+ Log.d(LOGTAG, "enableAutoAF done, Status :" + bStatus);
+
+ /* There is no internal Antenna*/
+ bStatus = mReceiver.setInternalAntenna(false);
+ Log.d(LOGTAG, "setInternalAntenna done, Status :" + bStatus);
+
+ /* Read back to verify the internal Antenna mode*/
+ readInternalAntennaAvailable();
+
+ startNotification();
+ bStatus = true;
+ }
+ else
+ {
+ if ((mReceiver.getFMState() != mReceiver.subPwrLevel_FMRx_Starting) &&
+ (mReceiver.getFMState() != mReceiver.FMState_Rx_Turned_On)) {
+ mReceiver = null; // as enable failed no need to disable
+ // failure of enable can be because handle
+ // already open which gets effected if
+ // we disable
+ stop();
+ }
+ }
+
+ return bStatus;
+ }
+
private boolean enableSlimbus(int flag) {
Log.d(LOGTAG, "enableSlimbus");
boolean bStatus = false;
@@ -2186,7 +2276,7 @@
* .
* @return true if fm Enable api was invoked successfully, false if the api failed.
*/
- private boolean fmTurnOnSequence() {
+ private boolean fmTurnOnSequenceCherokee () {
boolean bStatus = false;
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if ((audioManager != null) & (false == mPlaybackInProgress)) {
@@ -2292,9 +2382,15 @@
}
else
{
- enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
- bStatus = fmTurnOnSequence();
- /* reset SSR flag */
+ if (mReceiver.isCherokeeChip()) {
+ if (mPref.getBoolean("SLIMBUS_SEQ", true)) {
+ enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+ }
+ bStatus = fmTurnOnSequenceCherokee();
+ } else {
+ bStatus = fmTurnOnSequence();
+ }
+ /* reset SSR flag */
mIsSSRInProgressFromActivity = false;
}
}
@@ -2367,6 +2463,23 @@
private boolean fmOffImpl() {
boolean bStatus=false;
+ // This will disable the FM radio device
+ synchronized(mReceiverLock) {
+ if (mReceiver != null)
+ {
+ bStatus = mReceiver.disable(this);
+ mReceiver = null;
+ }
+ }
+ fmOperationsOff();
+ stop();
+
+ return(bStatus);
+ }
+
+ private boolean fmOffImplCherokee() {
+ boolean bStatus=false;
+
fmOperationsOff();
stop();
try {
@@ -2402,7 +2515,11 @@
private boolean fmOff() {
boolean ret = false;
if (mReceiver != null) {
- ret = fmOffImpl();
+ if (mReceiver.isCherokeeChip()) {
+ ret = fmOffImplCherokee();
+ } else {
+ ret = fmOffImpl();
+ }
}
mWakeLock.release();
return ret;
@@ -2486,7 +2603,9 @@
return;
mSpeakerPhoneOn = speakerOn;
- enableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
+ if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+ enableSlimbus(DISABLE_SLIMBUS_DATA_PORT);
+ }
if (speakerOn == false) {
mAudioDevice = AudioDeviceInfo.TYPE_WIRED_HEADPHONES;
@@ -2500,7 +2619,9 @@
String keyValPairs = new String("fm_routing="+mAudioDeviceType);
Log.d(LOGTAG, "keyValPairs = "+keyValPairs);
audioManager.setParameters(keyValPairs);
- enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+ if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+ enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+ }
}
/*
* ReConfigure the FM Setup parameters
@@ -2896,6 +3017,24 @@
return pi;
}
+
+ /* Retrieves the station list from the SearchStationlist.
+ *
+ * @return Array of integers that represents the station frequencies.
+ * Note: 1. This is a synchronous call that should typically called when
+ * Callback onSearchListComplete.
+ */
+ public int[] getSearchList()
+ {
+ int[] frequencyList = null;
+ if (mReceiver != null)
+ {
+ Log.d(LOGTAG, "getSearchList: ");
+ frequencyList = mReceiver.getStationList();
+ }
+ return frequencyList;
+ }
+
/* Set the FM Power Mode on the FM hardware SoC.
* Typically used when UI/Activity is in the background, so the Host is interrupted less often.
*
@@ -3089,9 +3228,11 @@
{
Log.d(LOGTAG, "FmRxEvEnableReceiver");
if (mReceiver != null) {
- synchronized(mEventWaitLock) {
- mEventReceived = true;
- mEventWaitLock.notify();
+ if (mReceiver.isCherokeeChip()) {
+ synchronized(mEventWaitLock) {
+ mEventReceived = true;
+ mEventWaitLock.notify();
+ }
}
}
}
@@ -3100,9 +3241,11 @@
Log.d(LOGTAG, "FmRxEvDisableReceiver");
mFMOn = false;
FmSharedPreferences.clearTags();
- synchronized (mEventWaitLock) {
- mEventReceived = true;
- mEventWaitLock.notify();
+ if (mReceiver != null && mReceiver.isCherokeeChip()) {
+ synchronized (mEventWaitLock) {
+ mEventReceived = true;
+ mEventWaitLock.notify();
+ }
}
}
public void FmRxEvRadioReset()
@@ -3338,9 +3481,11 @@
if (mCallbacks != null) {
try {
mCallbacks.getStationParamCb(val, status);
- synchronized(mEventWaitLock) {
- mEventReceived = true;
- mEventWaitLock.notify();
+ if (mReceiver != null && mReceiver.isCherokeeChip()) {
+ synchronized(mEventWaitLock) {
+ mEventReceived = true;
+ mEventWaitLock.notify();
+ }
}
} catch (RemoteException e) {
e.printStackTrace();
@@ -3549,18 +3694,21 @@
public void FmRxEvEnableSlimbus(int status)
{
Log.e(LOGTAG, "FmRxEvEnableSlimbus status = " + status);
- synchronized(mEventWaitLock) {
- mEventReceived = true;
- mEventWaitLock.notify();
+ if (mReceiver != null && mReceiver.isCherokeeChip()) {
+ synchronized(mEventWaitLock) {
+ mEventReceived = true;
+ mEventWaitLock.notify();
+ }
}
-
}
public void FmRxEvEnableSoftMute(int status)
{
Log.e(LOGTAG, "FmRxEvEnableSoftMute status = " + status);
- synchronized(mEventWaitLock) {
- mEventReceived = true;
- mEventWaitLock.notify();
+ if (mReceiver != null && mReceiver.isCherokeeChip()) {
+ synchronized(mEventWaitLock) {
+ mEventReceived = true;
+ mEventWaitLock.notify();
+ }
}
}
};
@@ -3846,7 +3994,18 @@
}
private void requestFocusImpl() {
- Log.d(LOGTAG, "++requestFocusImpl mPlaybackInProgress: " +
+ if( (false == mPlaybackInProgress) &&
+ (true == mStoppedOnFocusLoss) && isFmOn()) {
+ // adding code for audio focus gain.
+ AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
+ audioManager.requestAudioFocus(mGainFocusReq);
+ startFM();
+ mStoppedOnFocusLoss = false;
+ }
+ }
+
+ private void requestFocusImplCherokee() {
+ Log.d(LOGTAG, "++requestFocusImplCherokee mPlaybackInProgress: " +
mPlaybackInProgress + " mStoppedOnFocusLoss: " +
mStoppedOnFocusLoss + " isFmOn: " + isFmOn());
if( (false == mPlaybackInProgress) &&
@@ -3856,7 +4015,9 @@
audioManager.requestAudioFocus(mGainFocusReq);
if(false == mPlaybackInProgress) {
startFM();
- enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+ if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+ enableSlimbus(ENABLE_SLIMBUS_DATA_PORT);
+ }
}
mStoppedOnFocusLoss = false;
}
@@ -3864,10 +4025,15 @@
private void requestFocus() {
Log.d(LOGTAG, "++requestFocus");
- requestFocusImpl();
+ if (mReceiver.isCherokeeChip() && (mPref.getBoolean("SLIMBUS_SEQ", true))) {
+ requestFocusImplCherokee();
+ } else {
+ requestFocusImpl();
+ }
Log.d(LOGTAG, "--requestFocus");
}
+
public void onAudioFocusChange(int focusChange) {
mDelayedStopHandler.obtainMessage(FOCUSCHANGE, focusChange, 0).sendToTarget();
}
diff --git a/fmapp2/src/com/caf/fmradio/FMStats.java b/fmapp2/src/com/caf/fmradio/FMStats.java
index 4d3b9d0..2042052 100644
--- a/fmapp2/src/com/caf/fmradio/FMStats.java
+++ b/fmapp2/src/com/caf/fmradio/FMStats.java
@@ -3018,11 +3018,15 @@
case SEARCH_TEST:
try {
Log.e(LOGTAG, "start scanning\n");
- Log.d(LOGTAG,"Scanning with 0 scan time");
- if (mReceiver != null)
- mIsSearching = mReceiver.searchStations(FmReceiver.FM_RX_SRCH_MODE_SCAN,
- SCAN_DWELL_PERIOD, FmReceiver.FM_RX_SEARCHDIR_UP);
- } catch (Exception e) {
+ if(isTransportLayerSMD() || isCherokeeChip()) {
+ Log.d(LOGTAG,"Scanning with 0 scan time");
+ if (mReceiver != null)
+ mIsSearching = mReceiver.searchStations(FmReceiver.FM_RX_SRCH_MODE_SCAN,
+ SCAN_DWELL_PERIOD, FmReceiver.FM_RX_SEARCHDIR_UP);
+ } else {
+ mIsSearching = mService.scan(0);
+ }
+ }catch (RemoteException e) {
e.printStackTrace();
}
@@ -3219,12 +3223,16 @@
boolean isCherokeeChip = isCherokeeChip();
if((null != mService)) {
try {
- lastCmdSent = CMD_STNPARAM_RSSI;
- ret = mService.getRssi();
- if (ret != 0) {
- Log.e(LOGTAG, "getrssi cmd failed: ret = " + ret);
- lastCmdSent = 0;
- return null;
+ if (isCherokeeChip) {
+ lastCmdSent = CMD_STNPARAM_RSSI;
+ ret = mService.getRssi();
+ if (ret != 0) {
+ Log.e(LOGTAG, "getrssi cmd failed: ret = " + ret);
+ lastCmdSent = 0;
+ return null;
+ }
+ } else {
+ nRssi = mService.getRssi();
}
Log.e(LOGTAG, "Got response of mService.getRssi");
if (nRssi != Integer.MAX_VALUE) {
diff --git a/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl b/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
index 70d906e..9766093 100644
--- a/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
+++ b/fmapp2/src/com/caf/fmradio/IFMRadioService.aidl
@@ -25,6 +25,7 @@
boolean scan(int pty);
boolean seekPI(int piCode);
boolean searchStrongStationList(int numStations);
+ int[] getSearchList();
boolean cancelSearch();
String getProgramService();
String getRadioText();
diff --git a/fmapp2/src/com/caf/fmradio/IFMTransmitterServiceCallbacks.aidl b/fmapp2/src/com/caf/fmradio/IFMTransmitterServiceCallbacks.aidl
deleted file mode 100644
index 641785d..0000000
--- a/fmapp2/src/com/caf/fmradio/IFMTransmitterServiceCallbacks.aidl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2009,2012-2013 The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of The Linux Foundation nor
- * the names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package com.caf.fmradio;
-
-interface IFMTransmitterServiceCallbacks
-{
- void onEnabled(boolean bStatus);
- void onDisabled();
- void onRadioReset();
- void onTuneStatusChanged(int frequency);
- void onRadioTextChanged();
- void onSearchListComplete(boolean bStatus);
- void onReconfigured();
- void onMetaDataChanged(String str);
- void onPSInfoSent(String str);
-}