updates time scale handling

This commit is contained in:
2023-03-04 12:33:22 +01:00
parent bf38ccd6db
commit b391d19303
6 changed files with 53 additions and 24 deletions

View File

@ -25,6 +25,7 @@ import com.minres.scviewer.database.DoubleVal;
import com.minres.scviewer.database.EventList;
import com.minres.scviewer.database.IEventList;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.IWaveformDb;
import com.minres.scviewer.database.IWaveformDbLoader;
import com.minres.scviewer.database.InputFormatException;
import com.minres.scviewer.database.RelationType;
@ -45,17 +46,17 @@ public class FstDbLoader implements IWaveformDbLoader, IFstDatabaseBuilder {
/** The max time. */
private long maxTime;
private int timeScale;
private long timeScaleFactor;
/** The pcs. */
protected PropertyChangeSupport pcs = new PropertyChangeSupport(this);
static int calculateTimescaleMultipierPower(int power){
int answer = 1;
if(power<=0){
static long calculateTimescaleMultipierPower(long time_scale){
long answer = 1;
if(time_scale<=0){
return answer;
} else{
for(int i = 1; i<= power; i++)
for(int i = 1; i<= time_scale; i++)
answer *= 10;
return answer;
}
@ -94,7 +95,7 @@ public class FstDbLoader implements IWaveformDbLoader, IFstDatabaseBuilder {
*/
@Override
public long getMaxTime() {
return maxTime*calculateTimescaleMultipierPower(15+timeScale); // timescape is 1e(timeScale), we calculate in fs
return maxTime;
}
/* (non-Javadoc)
@ -149,8 +150,9 @@ public class FstDbLoader implements IWaveformDbLoader, IFstDatabaseBuilder {
}
public void setMaxTime(long maxTime, int timeScale) {
this.maxTime = maxTime;
this.timeScale=timeScale;
long eff_time_scale=timeScale-IWaveformDb.databaseTimeScale;
this.timeScaleFactor = calculateTimescaleMultipierPower(eff_time_scale);
this.maxTime = maxTime*timeScaleFactor;
}
/* (non-Javadoc)
* @see com.minres.scviewer.database.IWaveformDbLoader#getAllRelationTypes()
@ -182,6 +184,6 @@ public class FstDbLoader implements IWaveformDbLoader, IFstDatabaseBuilder {
public void getEvents(int id, int width, IEventList values) {
if(values instanceof EventList)
parser.getValueChanges(id, width, calculateTimescaleMultipierPower(15+timeScale), (EventList) values);
parser.getValueChanges(id, width, timeScaleFactor, (EventList) values);
}
}

View File

@ -37,7 +37,7 @@ class FstFileParser {
System.out.println(version);
long endTime = FstLibrary.fstReaderGetEndTime(fst);
byte timeScale = FstLibrary.fstReaderGetTimescale(fst);
builder.setMaxTime(endTime, timeScale);
builder.setMaxTime(endTime, -timeScale);
FstLibrary.fstReaderIterateHierRewind(fst);
Pointer p = FstLibrary.fstReaderIterateHier(fst);
while(p!=null && !p.equals(Pointer.NULL)) {
@ -77,7 +77,7 @@ class FstFileParser {
return false;
}
public void getValueChanges(final int id, final int width, int timeScale, final EventList values) {
public void getValueChanges(final int id, final int width, long timeScale, final EventList values) {
FstLibrary.fstReaderClrFacProcessMaskAll(fst);
FstLibrary.fstReaderSetFacProcessMask(fst, id);
FstLibrary.iterateValueChanges(fst, new ValueChangeCallback() {