Skip to content
Snippets Groups Projects
Commit c748b4b9 authored by Venkateshwarlu Domakonda's avatar Venkateshwarlu Domakonda
Browse files

FM: Add support to configure the spur Rotation table

- Add support to configure the FM SOC spur table.

Change-Id: I817268be67f29dfb6862314dc90a915c01f40342
CRs-Fixed: 664779
parent 5e329242
No related branches found
No related tags found
No related merge requests found
......@@ -53,6 +53,7 @@
#define V4L2_CID_PRIVATE_IRIS_SET_CALIBRATION (V4L2_CTRL_CLASS_USER + 0x92A)
#define V4L2_CID_PRIVATE_TAVARUA_ON_CHANNEL_THRESHOLD (V4L2_CTRL_CLASS_USER + 0x92B)
#define V4L2_CID_PRIVATE_TAVARUA_OFF_CHANNEL_THRESHOLD (V4L2_CTRL_CLASS_USER + 0x92C)
#define V4L2_CID_PRIVATE_IRIS_SET_SPURTABLE (V4L2_CTRL_CLASS_USER + 0x92D)
#define TX_RT_LENGTH 63
#define WAIT_TIMEOUT 200000 /* 200*1000us */
#define TX_RT_DELIMITER 0x0d
......@@ -736,6 +737,45 @@ static jint android_hardware_fmradio_FmReceiverJNI_setTxPowerLevelNative
return FM_JNI_SUCCESS;
}
/* native interface */
static jint android_hardware_fmradio_FmReceiverJNI_setSpurDataNative
(JNIEnv * env, jobject thiz, jint fd, jshortArray buff, jint count)
{
ALOGE("entered JNI's setSpurDataNative\n");
int err, i = 0;
struct v4l2_ext_control ext_ctl;
struct v4l2_ext_controls v4l2_ctls;
uint8_t *data;
short *spur_data = env->GetShortArrayElements(buff, NULL);
if (spur_data == NULL) {
ALOGE("Spur data is NULL\n");
return FM_JNI_FAILURE;
}
data = (uint8_t *) malloc(count);
if (data == NULL) {
ALOGE("Allocation failed for data\n");
return FM_JNI_FAILURE;
}
for(i = 0; i < count; i++)
data[i] = (uint8_t) spur_data[i];
ext_ctl.id = V4L2_CID_PRIVATE_IRIS_SET_SPURTABLE;
ext_ctl.string = (char*)data;
ext_ctl.size = count;
v4l2_ctls.ctrl_class = V4L2_CTRL_CLASS_USER;
v4l2_ctls.count = 1;
v4l2_ctls.controls = &ext_ctl;
err = ioctl(fd, VIDIOC_S_EXT_CTRLS, &v4l2_ctls );
if (err < 0){
ALOGE("Set ioctl failed\n");
free(data);
return FM_JNI_FAILURE;
}
free(data);
return FM_JNI_SUCCESS;
}
/*
* JNI registration.
*/
......@@ -795,7 +835,8 @@ static JNINativeMethod gMethods[] = {
(void*)android_hardware_fmradio_FmReceiverJNI_SetCalibrationNative},
{ "configureSpurTable", "(I)I",
(void*)android_hardware_fmradio_FmReceiverJNI_configureSpurTable},
{ "setSpurDataNative", "(I[SI)I",
(void*)android_hardware_fmradio_FmReceiverJNI_setSpurDataNative},
};
int register_android_hardware_fm_fmradio(JNIEnv* env)
......
......@@ -30,7 +30,7 @@ package qcom.fmradio;
import android.util.Log;
import android.os.SystemProperties;
import java.util.List;
/**
*
......@@ -47,6 +47,9 @@ public class FmConfig {
private static final int V4L2_CID_PRIVATE_TAVARUA_SPACING = V4L2_CID_PRIVATE_BASE + 14;
private static final int V4L2_CID_PRIVATE_TAVARUA_SRCH_ALGORITHM = V4L2_CID_PRIVATE_BASE + 0x2B;
private static final int each_Spur_entry_size = 16;
public static final int no_Of_Spurs_For_Entry = 3;
private static final String TAG = "FmConfig";
......@@ -91,6 +94,54 @@ public class FmConfig {
*/
private int mBandUpperLimit;
public static boolean fmSpurConfig(int fd) {
SpurFileParser parser = new SpurFileParser();
SpurTable t;
int freq = 0, i = 0, j = 0;
byte no_of_spur_freq = 0;
int rotation_value = 0;
int re;
t = parser.GetSpurTable("/etc/fm/SpurTableFile.txt");
List <Spur> list = t.GetSpurList();
no_of_spur_freq = t.GetspurNoOfFreq();
short [] buff = new short[2 + (no_of_spur_freq * each_Spur_entry_size)];
buff[0] = t.GetMode();
buff[1] = no_of_spur_freq;
for(i = 0; i < no_of_spur_freq; i++) {
List <Spur> spur = t.GetSpurList();
freq = spur.get(i).getSpurFreq();
buff[(i * each_Spur_entry_size) + 2] = (short)(freq & 0xff);
buff[(i * each_Spur_entry_size) + 3] = (short)((freq >> 8) & 0xff);
buff[(i * each_Spur_entry_size) + 4] = (short)((freq >> 16) & 0xff);
buff[(i * each_Spur_entry_size) + 5] = spur.get(i).getNoOfSpursToTrack();
List <SpurDetails> spurDetails =
spur.get(i).getSpurDetailsList();
for(j = 0; j < no_Of_Spurs_For_Entry; j++) {
rotation_value = spurDetails.get(j).getRotationValue();
buff[(j * 4) + 6 + (i * each_Spur_entry_size)] =
(short)(rotation_value & 0xff);
buff[(j * 4) + 7 + (i * each_Spur_entry_size)] =
(short)((rotation_value >> 8) & 0xff);
buff[(j * 4) + 8 + (i * each_Spur_entry_size)] =
(short)((rotation_value >> 12) & 0xff);
buff[(j * 4) + 8 + (i * each_Spur_entry_size)] |=
(short)(spurDetails.get(j).getLsbOfIntegrationLength() << 4);
buff[(j * 4) + 8 + (i * each_Spur_entry_size)] |=
(short)(spurDetails.get(j).getFilterCoefficeint() << 5);
buff[(j * 4) + 8 + (i * each_Spur_entry_size)] |=
(short)(spurDetails.get(j).getIsEnableSpur() << 7);
buff[(j * 4) + 9 + (i * each_Spur_entry_size)] =
(short)spurDetails.get(j).getSpurLevel();
}
}
re = FmReceiverJNI.setSpurDataNative(fd, buff,
(2 + (no_of_spur_freq * each_Spur_entry_size)));
if (re < 0)
return false;
return true;
}
public int getRadioBand(){
return mRadioBand;
}
......
......@@ -259,6 +259,8 @@ public class FmReceiver extends FmTransceiver
private static final int V4L2_CID_PRIVATE_BASE = 0x8000000;
private static final int V4L2_CID_PRIVATE_TAVARUA_SIGNAL_TH = V4L2_CID_PRIVATE_BASE + 8;
private static final int V4L2_CTRL_CLASS_USER = 0x00980000;
private static final int V4L2_CID_PRIVATE_IRIS_GET_SPUR_TBL = (V4L2_CTRL_CLASS_USER + 0x92E);
private static final int TAVARUA_BUF_SRCH_LIST=0;
......@@ -2535,4 +2537,48 @@ public class FmReceiver extends FmTransceiver
{
return mControl.configureSpurTable(sFd);
}
public static int getSpurConfiguration(int freq)
{
int retval;
retval = FmReceiverJNI.setControlNative(sFd, V4L2_CID_PRIVATE_IRIS_GET_SPUR_TBL, freq);
if (retval !=0)
Log.d(TAG, "Failed/No Spurs for " +freq);
return retval;
}
public static void getSpurTableData()
{
int freq;
byte no_of_spurs;
int rotation_value;
byte lsbOfLen;
byte filterCoe;
byte isEnbale;
byte [] buff = new byte[STD_BUF_SIZE];
int i = 0;
FmReceiverJNI.getBufferNative(sFd, buff, 13);
freq = buff[0] & 0xFF;
freq |= ((buff[1] & 0xFF) << 8);
freq |= ((buff[2] & 0xFF) << 16);
Log.d (TAG, "freq = " +freq);
no_of_spurs = buff[3];
Log.d (TAG, "no_of_spurs = " + no_of_spurs);
for(i = 0; i < FmConfig.no_Of_Spurs_For_Entry; i++) {
rotation_value = buff[(i * 4) + 4] & 0xFF;
rotation_value |= ((buff[(i * 4) + 5] & 0xFF) << 8);
rotation_value |= ((buff[(i * 4) + 6] & 0x0F) << 12);
Log.d (TAG, "rotation_value = " +rotation_value);
lsbOfLen = (byte) (((buff[(i * 4) + 6] & 0xF0) >> 4) & 0x01);
Log.d (TAG, "lsbOfLen = "+lsbOfLen);
filterCoe = (byte) (((buff[(i * 4) + 6] & 0xF0) >> 5) & 0x03);
Log.d (TAG, "filterCoe = " +filterCoe);
isEnbale = (byte) (((buff[(i * 4) + 6] & 0xF0) >> 7) & 0x01);
Log.d (TAG, "spur level: " +buff[(i * 4) + 7]);
}
return;
}
}
......@@ -282,4 +282,12 @@ class FmReceiverJNI {
* {@link #FM_JNI_FAILURE}
*/
static native int configureSpurTable(int fd);
/**
* native method: Configures the new spur table
* @param fd file descriptor of device
* @return {@link #FM_JNI_SUCCESS}
* {@link #FM_JNI_FAILURE}
*/
static native int setSpurDataNative(int fd, short buff[], int len);
}
......@@ -230,6 +230,10 @@ class FmRxEventListner {
Log.d(TAG, "got eRT event");
cb.FmRxEvERTInfo();
break;
case 22:
Log.d(TAG, "got IRIS_EVT_SPUR_TBL event");
FmReceiver.getSpurTableData();
break;
default:
Log.d(TAG, "Unknown event");
break;
......
......@@ -29,6 +29,7 @@
package qcom.fmradio;
import android.util.Log;
import java.io.File;
/** <code>FmTransceiver</code> is the superclass of classes
* <code>FmReceiver</code> and <code>FmTransmitter</code>
......@@ -406,6 +407,12 @@ public class FmTransceiver
if( !acquire("/dev/radio0")){
return false;
}
if (new File("/etc/fm/SpurTableFile.txt").isFile()) {
Log.d(TAG, "Send Spur roation table");
FmConfig.fmSpurConfig(sFd);
} else {
Log.d(TAG, "No existing file to do spur configuration");
}
Log.d(TAG, "turning on " + device);
mControl.fmOn(sFd, device);
......
/*
* Copyright (c) 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:
* * 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 qcom.fmradio;
import java.util.ArrayList;
import java.util.List;
public class Spur {
private int SpurFreq;
private byte NoOfSpursToTrack;
private List <SpurDetails> spurDetailsList;
Spur() {
}
Spur(int SpurFreq, byte NoOfSpursToTrack,
List <SpurDetails> spurDetailsList) {
this.SpurFreq = SpurFreq;
this.NoOfSpursToTrack = NoOfSpursToTrack;
this.spurDetailsList = spurDetailsList;
}
public int getSpurFreq() {
return SpurFreq;
}
public void setSpurFreq(int spurFreq) {
SpurFreq = spurFreq;
}
public byte getNoOfSpursToTrack() {
return NoOfSpursToTrack;
}
public void setNoOfSpursToTrack(byte noOfSpursToTrack) {
NoOfSpursToTrack = noOfSpursToTrack;
}
public List<SpurDetails> getSpurDetailsList() {
return spurDetailsList;
}
public void setSpurDetailsList(List<SpurDetails> spurDetailsList) {
this.spurDetailsList = spurDetailsList;
}
public void addSpurDetails(SpurDetails spurDetails) {
if (spurDetailsList == null) {
spurDetailsList = new ArrayList<SpurDetails>();
}
spurDetailsList.add(spurDetails);
}
}
/*
* Copyright (c) 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:
* * 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 qcom.fmradio;
import java.util.List;
public class SpurDetails {
private int RotationValue;
private byte LsbOfIntegrationLength;
private byte FilterCoefficeint;
private byte IsEnableSpur;
private byte SpurLevel;
public int getRotationValue() {
return RotationValue;
}
public void setRotationValue(int rotationValue) {
RotationValue = rotationValue;
}
public byte getLsbOfIntegrationLength() {
return LsbOfIntegrationLength;
}
public void setLsbOfIntegrationLength(byte lsbOfIntegrationLength) {
LsbOfIntegrationLength = lsbOfIntegrationLength;
}
public byte getFilterCoefficeint() {
return FilterCoefficeint;
}
public void setFilterCoefficeint(byte filterCoefficeint) {
FilterCoefficeint = filterCoefficeint;
}
public byte getIsEnableSpur() {
return IsEnableSpur;
}
public void setIsEnableSpur(byte isEnableSpur) {
IsEnableSpur = isEnableSpur;
}
public byte getSpurLevel() {
return SpurLevel;
}
public void setSpurLevel(byte spurLevel) {
SpurLevel = spurLevel;
}
SpurDetails(int RotationValue, byte LsbOfIntegrationLength,
byte FilterCoefficeint, byte IsEnableSpur, byte SpurLevel) {
this.RotationValue = RotationValue;
this.LsbOfIntegrationLength = LsbOfIntegrationLength;
this.IsEnableSpur = IsEnableSpur;
this.SpurLevel = SpurLevel;
}
public SpurDetails() {
}
public SpurDetails(SpurDetails spurDetails) {
if (spurDetails != null) {
this.RotationValue = spurDetails.RotationValue;
this.LsbOfIntegrationLength =
spurDetails.LsbOfIntegrationLength;
this.IsEnableSpur = spurDetails.IsEnableSpur;
this.SpurLevel = spurDetails.SpurLevel;
}
}
}
/*
* Copyright (c) 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:
* * 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 qcom.fmradio;
import java.util.regex.Pattern;
public final class SpurFileFormatConst {
public static final String SPUR_MODE = "Mode";
public static final String SPUR_NUM_ENTRY = "SpurNumEntry";
public static final String SPUR_FREQ = "SpurFreq";
public static final String SPUR_NO_OF = "NoOfSpursToTrack";
public static final String SPUR_ROTATION_VALUE = "RotationValue";
public static final String SPUR_LSB_LENGTH = "LsbOfIntegrationLength";
public static final String SPUR_FILTER_COEFF = "FilterCoefficeint";
public static final String SPUR_IS_ENABLE = "IsEnableSpur";
public static final String SPUR_LEVEL = "SpurLevel";
public static final char COMMENT = '#';
public static final char DELIMETER = '=';
public static final Pattern SPACE_PATTERN = Pattern.compile("\\s");
public static int SPUR_DETAILS_FOR_EACH_FREQ_CNT = 5;
public enum LineType {
EMPTY_LINE,
SPUR_MODE_LINE,
SPUR_N_ENTRY_LINE,
SPUR_FR_LINE,
SPUR_NO_OF_LINE,
SPUR_ROT0_LINE,
SPUR_LSB0_LINE,
SPUR_FILTER0_LINE,
SPUR_ENABLE0_LINE,
SPUR_LEVEL0_LINE,
}
}
/*
* Copyright (c) 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:
* * 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 qcom.fmradio;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.regex.Matcher;
import android.util.Log;
import qcom.fmradio.SpurFileFormatConst.LineType;
public class SpurFileParser implements SpurFileParserInterface {
private static final String TAG = "SPUR";
private boolean parse(BufferedReader reader, SpurTable t) {
int entryFound = 0;
if (t == null ) {
return false;
}
if ((reader != null)) {
String line;
LineType lastLine = LineType.EMPTY_LINE;
int indexEqual;
int SpurFreq = 0;
byte NoOfSpursToTrack = 0;
int RotationValue = 0;
byte LsbOfIntegrationLength = 0;
byte FilterCoefficeint = 0;
byte IsEnableSpur = 0;
byte spurLevel = 0;
byte noOfSpursFreq = 0;
byte mode;
byte freqCnt = 0;
try {
while(reader.ready() && (line = reader.readLine()) != null) {
line = removeSpaces(line);
System.out.println("line : " + line);
if (lineIsComment(line)) {
continue;
}
if ((entryFound == 2) && (freqCnt <= noOfSpursFreq)) {
if ((lastLine == LineType.EMPTY_LINE) &&
lineIsOfType(line, SpurFileFormatConst.SPUR_FREQ)) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
SpurFreq = Integer.parseInt(line.substring(indexEqual + 1));
lastLine = LineType.SPUR_FR_LINE;
freqCnt++;
} else if((lastLine == LineType.SPUR_FR_LINE) &&
lineIsOfType(line, SpurFileFormatConst.SPUR_NO_OF)) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
NoOfSpursToTrack = Byte.parseByte(line.substring(indexEqual + 1));
Spur spur = new Spur();
spur.setSpurFreq(SpurFreq);
spur.setNoOfSpursToTrack(NoOfSpursToTrack);
for(int i = 0; i < 3; i++) {
SpurDetails spurDetails = new SpurDetails();
for(int j = 0; (reader.ready()) &&
(j < SpurFileFormatConst.SPUR_DETAILS_FOR_EACH_FREQ_CNT); j++) {
line = reader.readLine();
line = removeSpaces(line);
System.out.println("inside line: " + line);
if (lineIsOfType(line,
(SpurFileFormatConst.SPUR_ROTATION_VALUE + i))) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
RotationValue = Integer.parseInt(
line.substring(indexEqual + 1));
spurDetails.setRotationValue(RotationValue);
} else if(lineIsOfType(line,
SpurFileFormatConst.SPUR_LSB_LENGTH + i)) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
LsbOfIntegrationLength = Byte.parseByte(
line.substring(indexEqual + 1));
spurDetails.setLsbOfIntegrationLength(
LsbOfIntegrationLength);
} else if(lineIsOfType(line,
SpurFileFormatConst.SPUR_FILTER_COEFF + i)) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
FilterCoefficeint = Byte.parseByte(
line.substring(indexEqual + 1));
spurDetails.setFilterCoefficeint(FilterCoefficeint);
} else if(lineIsOfType(line,
SpurFileFormatConst.SPUR_IS_ENABLE + i)) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
IsEnableSpur = Byte.parseByte(
line.substring(indexEqual + 1));
spurDetails.setIsEnableSpur(IsEnableSpur);
} else if(lineIsOfType(line,
SpurFileFormatConst.SPUR_LEVEL + i)) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
spurLevel = Byte.parseByte(line.substring(indexEqual + 1));
spurDetails.setSpurLevel(spurLevel);
}
}
spur.addSpurDetails(spurDetails);
}
t.InsertSpur(spur);
lastLine = LineType.EMPTY_LINE;
} else {
return false;
}
} else if(entryFound == 1) {
if (lineIsOfType(line, SpurFileFormatConst.SPUR_NUM_ENTRY)) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
noOfSpursFreq = Byte.parseByte(line.substring(indexEqual + 1));
t.SetspurNoOfFreq(noOfSpursFreq);
entryFound++;
} else {
return false;
}
} else {
if (lineIsOfType(line, SpurFileFormatConst.SPUR_MODE)) {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
mode = Byte.parseByte(line.substring(indexEqual + 1));
t.SetMode(mode);
entryFound++;
} else {
return false;
}
}
} // END of while
} catch (NumberFormatException e) {
Log.d(TAG, "NumberFormatException");
e.printStackTrace();
return false;
} catch (IOException e) {
Log.d(TAG, "IOException");
e.printStackTrace();
return false;
}
} else {
return false;
}
return true;
}
private String removeSpaces(String s) {
Matcher matcher = SpurFileFormatConst.SPACE_PATTERN.matcher(s);
String newLine = matcher.replaceAll("");
return newLine;
}
private boolean lineIsOfType(String line, String lineType) {
int indexEqual;
try {
indexEqual = line.indexOf(SpurFileFormatConst.DELIMETER);
if ((indexEqual >= 0) && indexEqual < line.length()) {
if (line.startsWith(lineType)) {
int num = Integer.parseInt(line.substring(indexEqual + 1));
} else {
return false;
}
} else {
return false;
}
} catch (NumberFormatException e) {
return false;
}
return true;
}
private boolean lineIsComment(String s) {
if ((s == null) || (s == "") || (s == " ") || s.length() == 0) {
return true;
} else if(s.charAt(0) == SpurFileFormatConst.COMMENT) {
return true;
} else {
return false;
}
}
@Override
public SpurTable GetSpurTable(String fileName) {
BufferedReader reader = null;
SpurTable t = new SpurTable();
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
parse(reader, t);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return t;
}
}
/*
* Copyright (c) 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:
* * 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 qcom.fmradio;
public interface SpurFileParserInterface {
SpurTable GetSpurTable(String fileName);
}
/*
* Copyright (c) 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:
* * 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 qcom.fmradio;
import java.util.ArrayList;
import java.util.List;
public class SpurTable {
private byte mode;
private byte spurNoOfFreq;
private List <Spur> spurs;
SpurTable() {
this.mode = -1;
this.spurNoOfFreq = 0;
this.spurs = null;
}
public List <Spur> GetSpurList() {
return spurs;
}
public void SetspurNoOfFreq(byte spurNoOfFreq) {
this.spurNoOfFreq = spurNoOfFreq;
}
public void SetMode(byte mode) {
this.mode = mode;
}
public void InsertSpur(Spur s) {
if (spurs == null) {
spurs = new ArrayList<Spur>();
}
spurs.add(s);
}
public byte GetMode() {
return mode;
}
public byte GetspurNoOfFreq() {
return spurNoOfFreq;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment