FM: Add support to configure signal blending parameters
Configure the signal blending parameters BlendSinrHi & BlendRmssiHi.
CRs-Fixed: 753525
Change-Id: Id5eac082124c7e78a0140ff3375772e2852dc03f
diff --git a/fmapp2/res/values/arrays.xml b/fmapp2/res/values/arrays.xml
index c505ec0..442ffc3 100644
--- a/fmapp2/res/values/arrays.xml
+++ b/fmapp2/res/values/arrays.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- * Copyright (c) 2009, 2011-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2009, 2011-2014 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:
@@ -361,8 +361,12 @@
<item> Get AfJmpRmssi Threshold</item>
<item> Get GoodChRmssi Threshold</item>
<item> Get AfJmpRmssi Samples count</item>
- <item> RF Statistics</item>
<item> Set RXREPEAT Count</item>
+ <item> Set Sig Blend SinrHi</item>
+ <item> Get Sig Blend SinrHi</item>
+ <item> Set Sig Blend RmssiHi</item>
+ <item> Get Sig Blend RmssiHi</item>
+ <item> RF Statistics</item>
</string-array>
diff --git a/fmapp2/res/values/strings.xml b/fmapp2/res/values/strings.xml
index bff5bb8..55b2932 100644
--- a/fmapp2/res/values/strings.xml
+++ b/fmapp2/res/values/strings.xml
@@ -248,6 +248,10 @@
<string name="rt_plus_tags">Tags</string>
<string name="enter_RxRePeatCount">Enter RxRePeat count</string>
<string name="set_RxRePeatCount">Config RxRePeat count</string>
+ <string name="enter_BlendSinrHi">Enter Sig Blend SinrHi value</string>
+ <string name="set_BlendSinrHi">Configure Sig Blend SinrHi value</string>
+ <string name="enter_BlendRmssiHi">Enter Sig Blend RmssiHi value</string>
+ <string name="set_BlendRmssiHi">Configure Sig Blend RmssiHi value</string>
<string name="enter_RssiTh">Enter RSSI Threshold</string>
<string name="set_RssiTh">Config RSSI Threshold</string>
<string name="enter_AfJumpRssiTh">Enter AF jump RSSI Threshold</string>
diff --git a/fmapp2/src/com/caf/fmradio/FMStats.java b/fmapp2/src/com/caf/fmradio/FMStats.java
index 1c20c7a..a380781 100644
--- a/fmapp2/src/com/caf/fmradio/FMStats.java
+++ b/fmapp2/src/com/caf/fmradio/FMStats.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014, 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:
@@ -235,6 +235,10 @@
private static final int MAX_RSSI_TH_SILABS = 127;
private static final int MIN_RDS_FIFO_CNT_SILABS = 0;
private static final int MAX_RDS_FIFO_CNT_SILABS = 25;
+ private static final int MIN_BLEND_SINRHI = -128;
+ private static final int MAX_BLEND_SINRHI = 127;
+ private static final int MIN_BLEND_RMSSIHI = -128;
+ private static final int MAX_BLEND_RMSSIHI = 127;
private static final int DIALOG_BAND_SWEEP_SETTING = 1;
@@ -578,6 +582,46 @@
}
};
+ private View.OnClickListener mOnSetBlendSinrHiListener = new View.OnClickListener() {
+ public void onClick(View v) {
+ String a;
+ a = txtbox1.getText().toString();
+ try {
+ byte count = (byte) Integer.parseInt(a);
+ Log.d(LOGTAG, "Value entered for mOnSetBlendSinrHiListener: " + count);
+ if((count < MIN_BLEND_SINRHI ) ||
+ (count > MAX_BLEND_SINRHI))
+ return;
+ if(mReceiver != null) {
+ mReceiver.setBlendSinr(count);
+ }
+ } catch (NumberFormatException e) {
+ Log.e(LOGTAG, "Value entered is not in correct format : " + a);
+ txtbox1.setText("");
+ }
+ }
+ };
+
+ private View.OnClickListener mOnSetBlendRmssiHiListener = new View.OnClickListener() {
+ public void onClick(View v) {
+ String a;
+ a = txtbox1.getText().toString();
+ try {
+ byte count = (byte)Integer.parseInt(a);
+ Log.d(LOGTAG, "Value entered for mOnSetBlendRmssiHiListener: " + count);
+ if((count < MIN_BLEND_RMSSIHI) ||
+ (count > MAX_BLEND_RMSSIHI))
+ return;
+ if(mReceiver != null) {
+ mReceiver.setBlendRmssi(count);
+ }
+ } catch (NumberFormatException e) {
+ Log.e(LOGTAG, "Value entered is not in correct format : " + a);
+ txtbox1.setText("");
+ }
+ }
+ };
+
private View.OnClickListener mOnSetSigThListener =
new View.OnClickListener() {
public void onClick(View v) {
@@ -1025,6 +1069,7 @@
View view, int pos, long id) {
Log.d("Table","onItemSelected is hit with " + pos);
int ret = Integer.MAX_VALUE;
+ byte retval = Byte.MAX_VALUE;
txtbox1 = (EditText) findViewById(R.id.txtbox1);
tv1 = (TextView) findViewById(R.id.label);
button1 = (Button)findViewById(R.id.SearchMpxDcc);
@@ -1524,6 +1569,119 @@
}
break;
case 20:
+ if (txtbox1 != null) {
+ txtbox1.setText(R.string.type_rd);
+ txtbox1.setVisibility(View.VISIBLE);
+ }
+ if (tv1 != null) {
+ tv1.setText(R.string.enter_RxRePeatCount);
+ tv1.setVisibility(View.VISIBLE);
+ }
+ if (SetButton != null) {
+ SetButton.setText(R.string.set_RxRePeatCount);
+ SetButton.setVisibility(View.VISIBLE);
+ SetButton.setOnClickListener(mOnSetRxRePeatCount);
+ }
+ if(button1 != null) {
+ button1.setVisibility(View.INVISIBLE);
+ }
+ if(button2 != null) {
+ button2.setVisibility(View.INVISIBLE);
+ }
+ break;
+ case 21:
+ if (txtbox1 != null) {
+ txtbox1.setText(R.string.type_rd);
+ txtbox1.setVisibility(View.VISIBLE);
+ }
+ if (tv1 != null) {
+ tv1.setText(R.string.enter_BlendSinrHi);
+ tv1.setVisibility(View.VISIBLE);
+ }
+ if(button1 != null) {
+ button1.setVisibility(View.INVISIBLE);
+ }
+ if(button2 != null) {
+ button2.setVisibility(View.INVISIBLE);
+ }
+ if (SetButton != null) {
+ SetButton.setText(R.string.set_BlendSinrHi);
+ SetButton.setVisibility(View.VISIBLE);
+ SetButton.setOnClickListener(mOnSetBlendSinrHiListener);
+ }
+ break;
+ case 22:
+ if (txtbox1 != null) {
+ txtbox1.setVisibility(View.INVISIBLE);
+ }
+ if (tv1 != null) {
+ tv1.setText("");
+ tv1.setVisibility(View.VISIBLE);
+ }
+ if(button1 != null) {
+ button1.setVisibility(View.INVISIBLE);
+ }
+ if(button2 != null) {
+ button2.setVisibility(View.INVISIBLE);
+ }
+ if (SetButton != null) {
+ SetButton.setVisibility(View.INVISIBLE);
+ }
+ if (mReceiver != null) {
+ retval = mReceiver.getBlendSinr();
+ Log.d(LOGTAG, "Get BlendSinrHi: " + retval);
+ if((retval >= MIN_BLEND_RMSSIHI) &&
+ (retval <= MAX_BLEND_RMSSIHI))
+ tv1.setText(" " + String.valueOf(retval));
+ }
+ break;
+ case 23:
+ if (txtbox1 != null) {
+ txtbox1.setText(R.string.type_rd);
+ txtbox1.setVisibility(View.VISIBLE);
+ }
+ if (tv1 != null) {
+ tv1.setText(R.string.enter_BlendRmssiHi);
+ tv1.setVisibility(View.VISIBLE);
+ }
+ if(button1 != null) {
+ button1.setVisibility(View.INVISIBLE);
+ }
+ if(button2 != null) {
+ button2.setVisibility(View.INVISIBLE);
+ }
+ if (SetButton != null) {
+ SetButton.setText(R.string.set_BlendRmssiHi);
+ SetButton.setVisibility(View.VISIBLE);
+ SetButton.setOnClickListener(mOnSetBlendRmssiHiListener);
+ }
+ break;
+ case 24:
+ if (txtbox1 != null) {
+ txtbox1.setVisibility(View.INVISIBLE);
+ }
+ if (tv1 != null) {
+ tv1.setText("");
+ tv1.setVisibility(View.VISIBLE);
+ }
+ if(button1 != null) {
+ button1.setVisibility(View.INVISIBLE);
+ }
+ if(button2 != null) {
+ button2.setVisibility(View.INVISIBLE);
+ }
+ if (SetButton != null) {
+ SetButton.setVisibility(View.INVISIBLE);
+ }
+ if (mReceiver != null) {
+ retval = mReceiver.getBlendRmssi();
+ Log.d(LOGTAG, "Get BlendRmssiHi: " + retval);
+ if((retval >= MIN_BLEND_RMSSIHI) &&
+ (retval <= MAX_BLEND_RMSSIHI))
+ tv1.setText(" " + String.valueOf(retval));
+ }
+ break;
+ case 25:
tLayout.removeAllViewsInLayout();
mNewRowIds = NEW_ROW_ID;
tLayout.setVisibility(View.VISIBLE);
@@ -1547,27 +1705,6 @@
spinOptionFmRf.setAdapter(adaptRfCfg);
spinOptionFmRf.setOnItemSelectedListener(mSpinRfCfgListener);
break;
- case 21:
- if (txtbox1 != null) {
- txtbox1.setText(R.string.type_rd);
- txtbox1.setVisibility(View.VISIBLE);
- }
- if (tv1 != null) {
- tv1.setText(R.string.enter_RxRePeatCount);
- tv1.setVisibility(View.VISIBLE);
- }
- if (SetButton != null) {
- SetButton.setText(R.string.set_RxRePeatCount);
- SetButton.setVisibility(View.VISIBLE);
- SetButton.setOnClickListener(mOnSetRxRePeatCount);
- }
- if(button1 != null) {
- button1.setVisibility(View.INVISIBLE);
- }
- if(button2 != null) {
- button2.setVisibility(View.INVISIBLE);
- }
- break;
}
}
public void onNothingSelected(AdapterView<?> parent) {
diff --git a/qcom/fmradio/FmReceiver.java b/qcom/fmradio/FmReceiver.java
index 486dc33..732c0b2 100644
--- a/qcom/fmradio/FmReceiver.java
+++ b/qcom/fmradio/FmReceiver.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009,2012-2013, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2009,2012-2014, 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:
@@ -1951,6 +1951,42 @@
return mControl.setPSRxRepeatCount(sFd, count);
}
+ public byte getBlendSinr() {
+ int state = getFMState();
+ if ((state == FMState_Turned_Off) || (state == FMState_Srch_InProg)) {
+ Log.d(TAG, "getBlendSinr: Device currently busy in executing another command.");
+ return Byte.MAX_VALUE;
+ }
+ return mControl.getBlendSinr(sFd);
+ }
+
+ public boolean setBlendSinr(byte sinrHi) {
+ int state = getFMState();
+ if ((state == FMState_Turned_Off) || (state == FMState_Srch_InProg)) {
+ Log.d(TAG, "setBlendSinr: Device currently busy in executing another command.");
+ return false;
+ }
+ return mControl.setBlendSinr(sFd, sinrHi);
+ }
+
+ public byte getBlendRmssi() {
+ int state = getFMState();
+ if ((state == FMState_Turned_Off) || (state == FMState_Srch_InProg)) {
+ Log.d(TAG, "getBlendRmssi: Device currently busy in executing another command.");
+ return Byte.MAX_VALUE;
+ }
+ return mControl.getBlendRmssi(sFd);
+ }
+
+ public boolean setBlendRmssi(byte rmssiHi) {
+ int state = getFMState();
+ if ((state == FMState_Turned_Off) || (state == FMState_Srch_InProg)) {
+ Log.d(TAG, "setBlendRmssi: Device currently busy in executing another command.");
+ return false;
+ }
+ return mControl.setBlendRmssi(sFd, rmssiHi);
+ }
+
/*==============================================================
FUNCTION: setRdsGroupOptions
==============================================================*/
diff --git a/qcom/fmradio/FmRxControls.java b/qcom/fmradio/FmRxControls.java
index b959b70..864e289 100644
--- a/qcom/fmradio/FmRxControls.java
+++ b/qcom/fmradio/FmRxControls.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2009-2014, 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:
@@ -98,6 +98,8 @@
private static final int V4L2_CID_PRIVATE_RXREPEATCOUNT = V4L2_CID_PRIVATE_BASE + 0x3D;
private static final int V4L2_CID_PRIVATE_RSSI_TH = V4L2_CID_PRIVATE_BASE + 0x3E;
private static final int V4L2_CID_PRIVATE_AF_JUMP_RSSI_TH = V4L2_CID_PRIVATE_BASE + 0x3F;
+ private static final int V4L2_CID_PRIVATE_BLEND_SINRHI = V4L2_CID_PRIVATE_BASE + 0x40;
+ private static final int V4L2_CID_PRIVATE_BLEND_RMSSIHI = V4L2_CID_PRIVATE_BASE + 0x41;
private static final int V4L2_CTRL_CLASS_USER = 0x980000;
private static final int V4L2_CID_BASE = V4L2_CTRL_CLASS_USER | 0x900;
@@ -731,4 +733,33 @@
}
}
+ public byte getBlendSinr(int fd) {
+ return (byte)FmReceiverJNI.getControlNative(fd, V4L2_CID_PRIVATE_BLEND_SINRHI);
+ }
+
+ public boolean setBlendSinr(int fd, byte sinrHi) {
+ int ret;
+ ret = FmReceiverJNI.setControlNative(fd, V4L2_CID_PRIVATE_BLEND_SINRHI, sinrHi);
+ if(ret < 0) {
+ Log.e(TAG, "Error in setting sinrHi ");
+ return false;
+ }else {
+ return true;
+ }
+ }
+
+ public byte getBlendRmssi(int fd) {
+ return (byte)FmReceiverJNI.getControlNative(fd, V4L2_CID_PRIVATE_BLEND_RMSSIHI);
+ }
+
+ public boolean setBlendRmssi(int fd, byte rmssiHi) {
+ int ret;
+ ret = FmReceiverJNI.setControlNative(fd, V4L2_CID_PRIVATE_BLEND_RMSSIHI, rmssiHi);
+ if(ret < 0) {
+ Log.e(TAG, "Error in setting RmssiHi ");
+ return false;
+ }else {
+ return true;
+ }
+ }
}