blob: d9f494e1f1fc69796fcd0465557ad4e57f5f3b73 [file] [log] [blame]
/*
* 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;
}
}