diff options
author | Venkateshwarlu Domakonda <vdomak@codeaurora.org> | 2014-05-19 10:41:10 +0530 |
---|---|---|
committer | Venkateshwarlu Domakonda <vdomak@codeaurora.org> | 2014-05-23 21:22:54 +0530 |
commit | c748b4b9ab0ad836cafa4c15cd73b2b0f5e37d63 (patch) | |
tree | d8d95642805ea090de34f940dc8d802683f34117 /qcom | |
parent | 5e32924236b3f6e7849edc430cc0c35bf9e95f78 (diff) | |
download | android_hardware_qcom_fm-c748b4b9ab0ad836cafa4c15cd73b2b0f5e37d63.tar.gz android_hardware_qcom_fm-c748b4b9ab0ad836cafa4c15cd73b2b0f5e37d63.tar.bz2 android_hardware_qcom_fm-c748b4b9ab0ad836cafa4c15cd73b2b0f5e37d63.zip |
FM: Add support to configure the spur Rotation table
- Add support to configure the FM SOC spur table.
Change-Id: I817268be67f29dfb6862314dc90a915c01f40342
CRs-Fixed: 664779
Diffstat (limited to 'qcom')
-rw-r--r-- | qcom/fmradio/FmConfig.java | 53 | ||||
-rw-r--r-- | qcom/fmradio/FmReceiver.java | 46 | ||||
-rw-r--r-- | qcom/fmradio/FmReceiverJNI.java | 8 | ||||
-rw-r--r-- | qcom/fmradio/FmRxEventListner.java | 4 | ||||
-rw-r--r-- | qcom/fmradio/FmTransceiver.java | 7 | ||||
-rw-r--r-- | qcom/fmradio/Spur.java | 83 | ||||
-rw-r--r-- | qcom/fmradio/SpurDetails.java | 105 | ||||
-rw-r--r-- | qcom/fmradio/SpurFileFormatConst.java | 60 | ||||
-rw-r--r-- | qcom/fmradio/SpurFileParser.java | 227 | ||||
-rw-r--r-- | qcom/fmradio/SpurFileParserInterface.java | 34 | ||||
-rw-r--r-- | qcom/fmradio/SpurTable.java | 72 |
11 files changed, 698 insertions, 1 deletions
diff --git a/qcom/fmradio/FmConfig.java b/qcom/fmradio/FmConfig.java index 3044cc2..728d1d3 100644 --- a/qcom/fmradio/FmConfig.java +++ b/qcom/fmradio/FmConfig.java @@ -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; } diff --git a/qcom/fmradio/FmReceiver.java b/qcom/fmradio/FmReceiver.java index b1bdb31..832cb29 100644 --- a/qcom/fmradio/FmReceiver.java +++ b/qcom/fmradio/FmReceiver.java @@ -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; + } } diff --git a/qcom/fmradio/FmReceiverJNI.java b/qcom/fmradio/FmReceiverJNI.java index 3c779c2..db75ccb 100644 --- a/qcom/fmradio/FmReceiverJNI.java +++ b/qcom/fmradio/FmReceiverJNI.java @@ -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); } diff --git a/qcom/fmradio/FmRxEventListner.java b/qcom/fmradio/FmRxEventListner.java index 865aac7..de39d91 100644 --- a/qcom/fmradio/FmRxEventListner.java +++ b/qcom/fmradio/FmRxEventListner.java @@ -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; diff --git a/qcom/fmradio/FmTransceiver.java b/qcom/fmradio/FmTransceiver.java index 20f0544..fa2378e 100644 --- a/qcom/fmradio/FmTransceiver.java +++ b/qcom/fmradio/FmTransceiver.java @@ -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); diff --git a/qcom/fmradio/Spur.java b/qcom/fmradio/Spur.java new file mode 100644 index 0000000..d60d4e9 --- /dev/null +++ b/qcom/fmradio/Spur.java @@ -0,0 +1,83 @@ +/* + * 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); + } + +} + diff --git a/qcom/fmradio/SpurDetails.java b/qcom/fmradio/SpurDetails.java new file mode 100644 index 0000000..2683b1c --- /dev/null +++ b/qcom/fmradio/SpurDetails.java @@ -0,0 +1,105 @@ +/* + * 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; + } + } + +} diff --git a/qcom/fmradio/SpurFileFormatConst.java b/qcom/fmradio/SpurFileFormatConst.java new file mode 100644 index 0000000..e9c03aa --- /dev/null +++ b/qcom/fmradio/SpurFileFormatConst.java @@ -0,0 +1,60 @@ +/* + * 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, + } +} diff --git a/qcom/fmradio/SpurFileParser.java b/qcom/fmradio/SpurFileParser.java new file mode 100644 index 0000000..d9f494e --- /dev/null +++ b/qcom/fmradio/SpurFileParser.java @@ -0,0 +1,227 @@ +/* + * 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; + } + +} diff --git a/qcom/fmradio/SpurFileParserInterface.java b/qcom/fmradio/SpurFileParserInterface.java new file mode 100644 index 0000000..e151769 --- /dev/null +++ b/qcom/fmradio/SpurFileParserInterface.java @@ -0,0 +1,34 @@ +/* + * 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); +} diff --git a/qcom/fmradio/SpurTable.java b/qcom/fmradio/SpurTable.java new file mode 100644 index 0000000..fd65c58 --- /dev/null +++ b/qcom/fmradio/SpurTable.java @@ -0,0 +1,72 @@ +/* + * 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; + } +} |