fm: add support for FMStats for cherokee
Add support for FMStats app for cherokee platform.
Change-Id: Ia63a69697554ebc28a22e86d450fade6b4427a67
diff --git a/jni/FmConst.h b/jni/FmConst.h
index 8c8d6f4..26eb616 100644
--- a/jni/FmConst.h
+++ b/jni/FmConst.h
@@ -152,6 +152,7 @@
V4L2_CID_PRV_IRIS_UPPER_BAND,
V4L2_CID_PRV_IRIS_LOWER_BAND,
V4L2_CID_PRV_IRIS_AUDIO_MODE,
+ V4L2_CID_PRV_IRIS_RMSSI,
};
#endif
diff --git a/jni/android_hardware_fm.cpp b/jni/android_hardware_fm.cpp
index 21528bb..d1857e4 100644
--- a/jni/android_hardware_fm.cpp
+++ b/jni/android_hardware_fm.cpp
@@ -108,6 +108,15 @@
typedef void (*fm_ssbi_peek_cb)(char *ssbi_peek_rsp);
typedef void (*fm_ch_det_th_cb)(char *ch_det_rsp);
typedef void (*fm_ecc_evt_cb)(char *ecc);
+typedef void (*fm_sig_thr_cb)(int val, int status);
+typedef void (*fm_get_ch_det_thrs_cb) (int val, int status);
+typedef void (*fm_def_data_rd_cb) (int val, int status);
+typedef void (*fm_get_blnd_cb) (int val, int status);
+typedef void (*fm_set_ch_det_thrs_cb) (int status);
+typedef void (*fm_def_data_wrt_cb) (int status);
+typedef void (*fm_set_blnd_cb) (int status);
+typedef void (*fm_get_stn_prm_cb) (int val, int status);
+typedef void (*fm_get_stn_dbg_prm_cb) (int val, int status);
static JNIEnv *mCallbackEnv = NULL;
static jobject mCallbacksObj = NULL;
@@ -129,6 +138,15 @@
jmethodID method_stereostsCallback;
jmethodID method_rdsAvlStsCallback;
jmethodID method_disableCallback;
+jmethodID method_getSigThCallback;
+jmethodID method_getChDetThrCallback;
+jmethodID method_defDataRdCallback;
+jmethodID method_getBlendCallback;
+jmethodID method_setChDetThrCallback;
+jmethodID method_defDataWrtCallback;
+jmethodID method_setBlendCallback;
+jmethodID method_getStnParamCallback;
+jmethodID method_getStnDbgParamCallback;
static bool checkCallbackThread() {
JNIEnv* env = AndroidRuntime::getJNIEnv();
@@ -142,55 +160,55 @@
}
void fm_enabled_cb() {
- ALOGE("Entered %s", __func__);
+ ALOGD("Entered %s", __func__);
if (mCallbackEnv != NULL) {
ALOGE("javaObjectRef creating");
jobject javaObjectRef = mCallbackEnv->NewObject(javaClassRef, method_enableCallback);
mCallbacksObj = javaObjectRef;
ALOGE("javaObjectRef = %p mCallbackobject =%p \n",javaObjectRef,mCallbacksObj);
}
- ALOGE("exit %s", __func__);
+ ALOGD("exit %s", __func__);
}
void fm_tune_cb(int Freq)
{
- ALOGE("TUNE:Freq:%d", Freq);
+ ALOGD("TUNE:Freq:%d", Freq);
mCallbackEnv->CallVoidMethod(mCallbacksObj, method_tuneCallback, (jint) Freq);
}
void fm_seek_cmpl_cb(int Freq)
{
- ALOGE("SEEK_CMPL: Freq: %d", Freq);
+ ALOGI("SEEK_CMPL: Freq: %d", Freq);
mCallbackEnv->CallVoidMethod(mCallbacksObj, method_seekCmplCallback, (jint) Freq);
}
void fm_scan_next_cb()
{
- ALOGE("SCAN_NEXT");
+ ALOGI("SCAN_NEXT");
mCallbackEnv->CallVoidMethod(mCallbacksObj, method_scanNxtCallback);
}
void fm_srch_list_cb(uint16_t *scan_tbl)
{
- ALOGE("SRCH_LIST");
+ ALOGI("SRCH_LIST");
//mCallbackEnv->CallVoidMethod(javaObjectRef, method_srchListCallback);
}
void fm_stereo_status_cb(bool stereo)
{
- ALOGE("STEREO: %d", stereo);
+ ALOGI("STEREO: %d", stereo);
mCallbackEnv->CallVoidMethod(mCallbacksObj, method_stereostsCallback, (jboolean) stereo);
}
void fm_rds_avail_status_cb(bool rds_avl)
{
- ALOGE("fm_rds_avail_status_cb: %d", rds_avl);
+ ALOGD("fm_rds_avail_status_cb: %d", rds_avl);
mCallbackEnv->CallVoidMethod(mCallbacksObj, method_rdsAvlStsCallback, (jboolean) rds_avl);
}
void fm_af_list_update_cb(uint16_t *af_list)
{
- ALOGE("AF_LIST");
+ ALOGD("AF_LIST");
jbyteArray af_buffer = NULL;
if (!checkCallbackThread()) {
@@ -211,7 +229,7 @@
void fm_rt_update_cb(char *rt)
{
- ALOGE("RT_EVT: " );
+ ALOGD("RT_EVT: " );
jbyteArray rt_buff = NULL;
int i,len;
@@ -221,10 +239,10 @@
}
len = (int)(rt[0] & 0xFF);
- ALOGV(" rt data len=%d :",len);
+ ALOGD(" rt data len=%d :",len);
len = len+5;
- ALOGE(" rt data len=%d :",len);
+ ALOGD(" rt data len=%d :",len);
rt_buff = mCallbackEnv->NewByteArray(len);
if (rt_buff == NULL) {
ALOGE(" ps data allocate failed :");
@@ -251,7 +269,7 @@
numPs = (int)(ps[0] & 0xFF);
len = (numPs *8)+5;
- ALOGE(" ps data len=%d :",len);
+ ALOGD(" ps data len=%d :",len);
ps_data = mCallbackEnv->NewByteArray(len);
if(ps_data == NULL) {
ALOGE(" ps data allocate failed :");
@@ -266,17 +284,17 @@
void fm_oda_update_cb()
{
- ALOGE("ODA_EVT");
+ ALOGD("ODA_EVT");
}
void fm_rt_plus_update_cb(char *rt_plus)
{
jbyteArray RtPlus = NULL;
- ALOGE("RT_PLUS");
+ ALOGD("RT_PLUS");
int len;
len = (int)(rt_plus[0] & 0xFF);
- ALOGE(" rt plus len=%d :",len);
+ ALOGD(" rt plus len=%d :",len);
RtPlus = mCallbackEnv->NewByteArray(len);
if (RtPlus == NULL) {
ALOGE(" rt plus data allocate failed :");
@@ -289,7 +307,7 @@
void fm_ert_update_cb(char *ert)
{
- ALOGI("ERT_EVT");
+ ALOGD("ERT_EVT");
jbyteArray ert_buff = NULL;
int i,len;
@@ -341,7 +359,7 @@
void rds_grp_cntrs_rsp_cb(char * evt_buffer)
{
- ALOGE("rds_grp_cntrs_rsp_cb");
+ ALOGD("rds_grp_cntrs_rsp_cb");
}
void fm_disabled_cb()
@@ -351,15 +369,15 @@
}
void fm_peek_rsp_cb(char *peek_rsp) {
- ALOGE("fm_peek_rsp_cb");
+ ALOGD("fm_peek_rsp_cb");
}
void fm_ssbi_peek_rsp_cb(char *ssbi_peek_rsp){
- ALOGE("fm_ssbi_peek_rsp_cb");
+ ALOGD("fm_ssbi_peek_rsp_cb");
}
void fm_ch_det_th_rsp_cb(char *ch_det_rsp){
- ALOGE("fm_ch_det_th_rsp_cb");
+ ALOGD("fm_ch_det_th_rsp_cb");
}
static void fm_thread_evt_cb(unsigned int event) {
@@ -371,7 +389,7 @@
args.name = name;
args.group = NULL;
vm->AttachCurrentThread(&mCallbackEnv, &args);
- ALOGE("satish: Callback thread attached: %p", mCallbackEnv);
+ ALOGD("Callback thread attached: %p", mCallbackEnv);
} else if (event == 1) {
if (!checkCallbackThread()) {
ALOGE("Callback: '%s' is not called on the correct thread", __FUNCTION__);
@@ -380,6 +398,70 @@
vm->DetachCurrentThread();
}
}
+
+static void fm_get_sig_thres_cb(int val, int status)
+{
+ ALOGD("Get signal Thres callback");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_getSigThCallback, val, status);
+}
+
+static void fm_get_ch_det_thr_cb(int val, int status)
+{
+ ALOGD("fm_get_ch_det_thr_cb");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_getChDetThrCallback, val, status);
+}
+
+static void fm_set_ch_det_thr_cb(int status)
+{
+ ALOGD("fm_set_ch_det_thr_cb");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_setChDetThrCallback, status);
+}
+
+static void fm_def_data_read_cb(int val, int status)
+{
+ ALOGD("fm_def_data_read_cb");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_defDataRdCallback, val, status);
+}
+
+static void fm_def_data_write_cb(int status)
+{
+ ALOGD("fm_def_data_write_cb");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_defDataWrtCallback, status);
+}
+
+static void fm_get_blend_cb(int val, int status)
+{
+ ALOGD("fm_get_blend_cb");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_getBlendCallback, val, status);
+}
+
+static void fm_set_blend_cb(int status)
+{
+ ALOGD("fm_set_blend_cb");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_setBlendCallback, status);
+}
+
+static void fm_get_station_param_cb(int val, int status)
+{
+ ALOGD("fm_get_station_param_cb");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_getStnParamCallback, val, status);
+}
+
+static void fm_get_station_debug_param_cb(int val, int status)
+{
+ ALOGD("fm_get_station_debug_param_cb");
+
+ mCallbackEnv->CallVoidMethod(mCallbacksObj, method_getStnDbgParamCallback, val, status);
+}
+
typedef struct {
size_t size;
@@ -403,6 +485,15 @@
fm_ch_det_th_cb fm_ch_det_th_rsp_cb;
fm_ecc_evt_cb ext_country_code_cb;
callback_thread_event thread_evt_cb;
+ fm_sig_thr_cb fm_get_sig_thres_cb;
+ fm_get_ch_det_thrs_cb fm_get_ch_det_thr_cb;
+ fm_def_data_rd_cb fm_def_data_read_cb;
+ fm_get_blnd_cb fm_get_blend_cb;
+ fm_set_ch_det_thrs_cb fm_set_ch_det_thr_cb;
+ fm_def_data_wrt_cb fm_def_data_write_cb;
+ fm_set_blnd_cb fm_set_blend_cb;
+ fm_get_stn_prm_cb fm_get_station_param_cb;
+ fm_get_stn_dbg_prm_cb fm_get_station_debug_param_cb;
} fm_vendor_callbacks_t;
typedef struct {
@@ -434,7 +525,16 @@
fm_ssbi_peek_rsp_cb,
fm_ch_det_th_rsp_cb,
fm_ext_country_code_cb,
- fm_thread_evt_cb
+ fm_thread_evt_cb,
+ fm_get_sig_thres_cb,
+ fm_get_ch_det_thr_cb,
+ fm_def_data_read_cb,
+ fm_get_blend_cb,
+ fm_set_ch_det_thr_cb,
+ fm_def_data_write_cb,
+ fm_set_blend_cb,
+ fm_get_station_param_cb,
+ fm_get_station_debug_param_cb
};
#endif
/* native interface */
@@ -734,6 +834,15 @@
int err;
long rmssi;
+#ifdef FM_SOC_TYPE_CHEROKEE
+ err = vendor_interface->get_fm_ctrl(V4L2_CID_PRV_IRIS_RMSSI, rmssi);
+ if (err < 0) {
+ ALOGE("%s: Get Rssi failed", LOG_TAG);
+ err = FM_JNI_FAILURE;
+ } else {
+ err = FM_JNI_SUCCESS;
+ }
+#else
if (fd >= 0) {
err = FmIoctlsInterface :: get_rmssi(fd, rmssi);
if (err < 0) {
@@ -747,7 +856,7 @@
LOG_TAG, fd);
err = FM_JNI_FAILURE;
}
-
+#endif
return err;
}
@@ -1393,6 +1502,15 @@
method_stereostsCallback = env->GetMethodID(javaClassRef, "stereostsCallback", "(Z)V");
method_rdsAvlStsCallback = env->GetMethodID(javaClassRef, "rdsAvlStsCallback", "(Z)V");
method_disableCallback = env->GetMethodID(javaClassRef, "disableCallback", "()V");
+ method_getSigThCallback = env->GetMethodID(javaClassRef, "getSigThCallback", "(II)V");
+ method_getChDetThrCallback = env->GetMethodID(javaClassRef, "getChDetThCallback", "(II)V");
+ method_defDataRdCallback = env->GetMethodID(javaClassRef, "DefDataRdCallback", "(II)V");
+ method_getBlendCallback = env->GetMethodID(javaClassRef, "getBlendCallback", "(II)V");
+ method_setChDetThrCallback = env->GetMethodID(javaClassRef, "setChDetThCallback","(I)V");
+ method_defDataWrtCallback = env->GetMethodID(javaClassRef, "DefDataWrtCallback", "(I)V");
+ method_setBlendCallback = env->GetMethodID(javaClassRef, "setBlendCallback", "(I)V");
+ method_getStnParamCallback = env->GetMethodID(javaClassRef, "getStnParamCallback", "(II)V");
+ method_getStnDbgParamCallback = env->GetMethodID(javaClassRef, "getStnDbgParamCallback", "(II)V");
return;
error: