FM: add JNI Support for SoftMute Command
Change-Id: I786ae5966864035da0e7682e58f6cb05663bc368
diff --git a/fmapp2/src/com/caf/fmradio/FMRadioService.java b/fmapp2/src/com/caf/fmradio/FMRadioService.java
index dd25b1d..b9dc5a8 100644
--- a/fmapp2/src/com/caf/fmradio/FMRadioService.java
+++ b/fmapp2/src/com/caf/fmradio/FMRadioService.java
@@ -236,6 +236,8 @@
private static final int FW_TIMEOUT = 200;
private static final int DISABLE_SLIMBUS_DATA_PORT = 0;
private static final int ENABLE_SLIMBUS_DATA_PORT = 1;
+ private static final int DISABLE_SOFT_MUTE = 0;
+ private static final int ENABLE_SOFT_MUTE = 1;
private static Object mNotchFilterLock = new Object();
@@ -3850,6 +3852,16 @@
}
}
}
+ public void FmRxEvEnableSoftMute(int status)
+ {
+ Log.e(LOGTAG, "FmRxEvEnableSoftMute status = " + status);
+ if (mReceiver != null && mReceiver.isCherokeeChip()) {
+ synchronized(mEventWaitLock) {
+ mEventReceived = true;
+ mEventWaitLock.notify();
+ }
+ }
+ }
};
diff --git a/fmapp2/src/com/caf/fmradio/FMTransmitterService.java b/fmapp2/src/com/caf/fmradio/FMTransmitterService.java
index 1d964c4..5e11943 100644
--- a/fmapp2/src/com/caf/fmradio/FMTransmitterService.java
+++ b/fmapp2/src/com/caf/fmradio/FMTransmitterService.java
@@ -1023,6 +1023,10 @@
{
Log.d(LOGTAG, "FmRxEvEnableReceiver status = " + status);
}
+ public void FmRxEvEnableSoftMute(int status)
+ {
+ Log.d(LOGTAG, "FmRxEvEnableReceiver status = " + status);
+ }
};
diff --git a/helium/radio-helium.h b/helium/radio-helium.h
index 067a40b..7c7221b 100644
--- a/helium/radio-helium.h
+++ b/helium/radio-helium.h
@@ -178,6 +178,7 @@
typedef void (*fm_get_stn_prm_cb) (int val, int status);
typedef void (*fm_get_stn_dbg_prm_cb) (int val, int status);
typedef void (*fm_enable_slimbus_cb) (int status);
+typedef void (*fm_enable_softmute_cb) (int status);
typedef struct {
size_t size;
@@ -214,6 +215,7 @@
fm_get_stn_prm_cb fm_get_station_param_cb;
fm_get_stn_dbg_prm_cb fm_get_station_debug_param_cb;
fm_enable_slimbus_cb enable_slimbus_cb;
+ fm_enable_softmute_cb enable_softmute_cb;
} fm_hal_callbacks_t;
/* Opcode OCF */
@@ -1244,6 +1246,7 @@
int hci_fm_get_station_dbg_param_req();
int hci_fm_get_station_cmd_param_req();
int hci_fm_enable_slimbus(uint8_t enable);
+int hci_fm_enable_softmute(uint8_t enable);
struct fm_hal_t {
struct radio_helium_device *radio;
diff --git a/helium/radio_helium_hal.c b/helium/radio_helium_hal.c
index 48ba0cb..b7951f3 100644
--- a/helium/radio_helium_hal.c
+++ b/helium/radio_helium_hal.c
@@ -448,6 +448,12 @@
hal->jni_cb->enable_slimbus_cb(ev_buff[0]);
}
+static void hci_cc_enable_softmute_rsp(char *ev_buff)
+{
+ ALOGD("%s status %d", __func__, ev_buff[0]);
+ hal->jni_cb->enable_softmute_cb(ev_buff[0]);
+}
+
static inline void hci_cmd_complete_event(char *buff)
{
uint16_t opcode;
@@ -476,6 +482,8 @@
case hci_recv_ctrl_cmd_op_pack(HCI_OCF_FM_SET_RECV_CONF_REQ):
case hci_recv_ctrl_cmd_op_pack(HCI_OCF_FM_SET_MUTE_MODE_REQ):
+ hci_cc_enable_softmute_rsp(pbuf);
+ break;
case hci_recv_ctrl_cmd_op_pack(HCI_OCF_FM_SET_STEREO_MODE_REQ):
case hci_recv_ctrl_cmd_op_pack(HCI_OCF_FM_SET_ANTENNA):
case hci_recv_ctrl_cmd_op_pack(HCI_OCF_FM_SET_SIGNAL_THRESHOLD):
diff --git a/jni/android_hardware_fm.cpp b/jni/android_hardware_fm.cpp
index e71e535..e60fe3d 100644
--- a/jni/android_hardware_fm.cpp
+++ b/jni/android_hardware_fm.cpp
@@ -122,6 +122,7 @@
typedef void (*fm_get_stn_prm_cb) (int val, int status);
typedef void (*fm_get_stn_dbg_prm_cb) (int val, int status);
typedef void (*fm_enable_sb_cb) (int status);
+typedef void (*fm_enable_sm_cb) (int status);
static JNIEnv *mCallbackEnv = NULL;
static jobject mCallbacksObj = NULL;
@@ -154,6 +155,7 @@
jmethodID method_getStnParamCallback;
jmethodID method_getStnDbgParamCallback;
jmethodID method_enableSlimbusCallback;
+jmethodID method_enableSoftMuteCallback;
static bool checkCallbackThread() {
JNIEnv* env = AndroidRuntime::getJNIEnv();
@@ -554,6 +556,18 @@
ALOGD("--fm_enable_slimbus_cb");
}
+static void fm_enable_softmute_cb(int status)
+{
+ ALOGD("++fm_enable_softmute_cb");
+
+ if (!checkCallbackThread())
+ return;
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_enableSoftMuteCallback, status);
+ ALOGD("--fm_enable_softmute_cb");
+}
+
+
typedef struct {
size_t size;
@@ -589,6 +603,7 @@
fm_get_stn_prm_cb fm_get_station_param_cb;
fm_get_stn_dbg_prm_cb fm_get_station_debug_param_cb;
fm_enable_sb_cb fm_enable_slimbus_cb;
+ fm_enable_sm_cb fm_enable_softmute_cb;
} fm_vendor_callbacks_t;
typedef struct {
@@ -631,7 +646,8 @@
fm_set_blend_cb,
fm_get_station_param_cb,
fm_get_station_debug_param_cb,
- fm_enable_slimbus_cb
+ fm_enable_slimbus_cb,
+ fm_enable_softmute_cb
};
#endif
/* native interface */
@@ -1583,6 +1599,17 @@
return err;
}
+static jint android_hardware_fmradio_FmReceiverJNI_enableSoftMuteNative
+ (JNIEnv * env, jobject thiz, jint fd, jint val)
+{
+ ALOGD("%s: val = %d\n", __func__, val);
+ int err = JNI_ERR;
+#ifdef FM_SOC_TYPE_CHEROKEE
+ err = vendor_interface->set_fm_ctrl(V4L2_CID_PRV_SOFT_MUTE, val);
+#endif
+ return err;
+}
+
static void classInitNative(JNIEnv* env, jclass clazz) {
ALOGI("ClassInit native called \n");
@@ -1627,6 +1654,7 @@
method_getStnParamCallback = env->GetMethodID(javaClassRef, "getStnParamCallback", "(II)V");
method_getStnDbgParamCallback = env->GetMethodID(javaClassRef, "getStnDbgParamCallback", "(II)V");
method_enableSlimbusCallback = env->GetMethodID(javaClassRef, "enableSlimbusCallback", "(I)V");
+ method_enableSoftMuteCallback = env->GetMethodID(javaClassRef, "enableSoftMuteCallback", "(I)V");
return;
error:
@@ -1733,6 +1761,8 @@
(void*)android_hardware_fmradio_FmReceiverJNI_configurePerformanceParams},
{ "enableSlimbus", "(II)I",
(void*)android_hardware_fmradio_FmReceiverJNI_enableSlimbusNative},
+ { "enableSoftMute", "(II)I",
+ (void*)android_hardware_fmradio_FmReceiverJNI_enableSoftMuteNative},
};
int register_android_hardware_fm_fmradio(JNIEnv* env)
diff --git a/qcom/fmradio/FmReceiver.java b/qcom/fmradio/FmReceiver.java
index b15d512..4957fef 100644
--- a/qcom/fmradio/FmReceiver.java
+++ b/qcom/fmradio/FmReceiver.java
@@ -3083,4 +3083,8 @@
Log.d(TAG, "EnableSlimbus :enable =" + enable);
mControl.enableSlimbus(sFd, enable);
}
+ public void EnableSoftMute(int enable) {
+ Log.d(TAG, "enableSoftMute :enable =" + enable);
+ mControl.enableSoftMute(sFd, enable);
+ }
}
diff --git a/qcom/fmradio/FmReceiverJNI.java b/qcom/fmradio/FmReceiverJNI.java
index 1487b7c..3e39e9a 100644
--- a/qcom/fmradio/FmReceiverJNI.java
+++ b/qcom/fmradio/FmReceiverJNI.java
@@ -134,6 +134,13 @@
Log.d(TAG, "--enableSlimbusCallback" );
}
+ public void enableSoftMuteCallback(int status)
+ {
+ Log.d(TAG, "++enableSoftMuteCallback" );
+ FmReceiver.mCallback.FmRxEvEnableSoftMute(status);
+ Log.d(TAG, "--enableSoftMuteCallback" );
+ }
+
public void RtPlusCallback(byte[] rtplus) {
Log.d(TAG, "RtPlusCallback enter " );
if (rtplus == null) {
@@ -555,4 +562,5 @@
static native int setSpurDataNative(int fd, short buff[], int len);
static native void configurePerformanceParams(int fd);
static native int enableSlimbus(int fd, int val);
+ static native int enableSoftMute(int fd, int val);
}
diff --git a/qcom/fmradio/FmRxControls.java b/qcom/fmradio/FmRxControls.java
index a3eba2a..47c384c 100644
--- a/qcom/fmradio/FmRxControls.java
+++ b/qcom/fmradio/FmRxControls.java
@@ -795,4 +795,13 @@
else
return false;
}
+ public boolean enableSoftMute(int fd, int enable) {
+ int ret;
+ Log.d(TAG, "enableSoftMute : enable = " + enable);
+ ret = FmReceiverJNI.enableSoftMute(fd, enable);
+ if (ret == 0)
+ return true;
+ else
+ return false;
+ }
}
diff --git a/qcom/fmradio/FmRxEvCallbacks.java b/qcom/fmradio/FmRxEvCallbacks.java
index 31a8312..668ad25 100644
--- a/qcom/fmradio/FmRxEvCallbacks.java
+++ b/qcom/fmradio/FmRxEvCallbacks.java
@@ -48,4 +48,5 @@
public void FmRxEvERTInfo();
public void FmRxEvECCInfo();
public void FmRxEvEnableSlimbus(int status);
+ public void FmRxEvEnableSoftMute(int status);
}
diff --git a/qcom/fmradio/FmRxEvCallbacksAdaptor.java b/qcom/fmradio/FmRxEvCallbacksAdaptor.java
index 213cf43..94e4c34 100644
--- a/qcom/fmradio/FmRxEvCallbacksAdaptor.java
+++ b/qcom/fmradio/FmRxEvCallbacksAdaptor.java
@@ -62,4 +62,5 @@
public void FmRxGetStationParam(int val, int status) {};
public void FmRxGetStationDbgParam(int val, int status) {};
public void FmRxEvEnableSlimbus(int status) {};
+ public void FmRxEvEnableSoftMute(int status) {};
}