private void WriteFrameToOutputPorts(Frame aFrame) { // Write frame with valid data WriteIntegerToFilterOutputPort(TIMESTAMP_ID, FilterFramework.outPipe1); WriteLongToFilterOutputPort(aFrame.getTimeStamp(), FilterFramework.outPipe1); WriteIntegerToFilterOutputPort(VELOCITY_ID, FilterFramework.outPipe1); WriteLongToFilterOutputPort(aFrame.getVelocity(), FilterFramework.outPipe1); WriteIntegerToFilterOutputPort(ALTITUDE_MEASURE_ID, FilterFramework.outPipe1); WriteLongToFilterOutputPort(aFrame.getAltitudeMeasure(), FilterFramework.outPipe1); if (aFrame.getHasInvalidPressureMeasure() == true) { WriteIntegerToFilterOutputPort(PRESSURE_EXTRAPOLATED_MEASURE_ID, FilterFramework.outPipe1); WriteLongToFilterOutputPort( aFrame.getExtrapolatedPressureMeasure(), FilterFramework.outPipe1); } else { WriteIntegerToFilterOutputPort(PRESSURE_MEASURE_ID, FilterFramework.outPipe1); WriteLongToFilterOutputPort(aFrame.getPressureMeasure(), FilterFramework.outPipe1); } WriteIntegerToFilterOutputPort(TEMPERATURE_MEASURE_ID, FilterFramework.outPipe1); WriteLongToFilterOutputPort(aFrame.getTemperatureMeasure(), FilterFramework.outPipe1); WriteIntegerToFilterOutputPort(ATTITUDE_MEASURE_ID, FilterFramework.outPipe1); WriteLongToFilterOutputPort(aFrame.getAttitudeMeasure(), FilterFramework.outPipe1); // Write wildpoints if (aFrame.getHasInvalidPressureMeasure() == true) { WriteIntegerToFilterOutputPort(TIMESTAMP_ID, FilterFramework.outPipe2); WriteLongToFilterOutputPort(aFrame.getTimeStamp(), FilterFramework.outPipe2); WriteIntegerToFilterOutputPort(PRESSURE_MEASURE_ID, FilterFramework.outPipe2); WriteLongToFilterOutputPort(aFrame.getPressureMeasure(), FilterFramework.outPipe2); } }
Frame(Frame aFrame) { this( aFrame.getTimeStamp(), aFrame.getVelocity(), aFrame.getAltitudeMeasure(), aFrame.getPressureMeasure(), aFrame.getTemperatureMeasure(), aFrame.getAttitudeMeasure(), aFrame.getExtrapolatedPressureMeasure()); }
// Tries to extrapolate and fill extrapolated pressure measures to // frames with invalid pressure private void ExtrapolateFramesInList(List<Frame> aFrameQueue, boolean aIsOnFlush) { if (aFrameQueue.isEmpty()) { return; } Frame firstFrame = aFrameQueue.get(0); if (firstFrame.getHasInvalidPressureMeasure() == true && firstFrame.getExtrapolatedPressureMeasure() == 0) { // the stream has started with invalid pressure measure. // Find last valid and use it to fill invalid measurements long validMeasure = 0; Frame fr = null; for (int i = 0; i < aFrameQueue.size(); i++) { fr = aFrameQueue.get(i); if ((fr.getHasInvalidPressureMeasure() == false) || (fr.getHasInvalidPressureMeasure() == true && fr.getExtrapolatedPressureMeasure() > 0)) { validMeasure = fr.getPressureMeasure(); break; } } for (int i = 0; i < aFrameQueue.size(); i++) { fr = aFrameQueue.get(i); fr.setExtrapolatedPressureMeasure(validMeasure); aFrameQueue.set(i, fr); if (fr.getHasInvalidPressureMeasure() == false) { break; } } } else { if (aFrameQueue.size() < 3) { if (aIsOnFlush && aFrameQueue.size() > 1) { // in that case there are 2 elements. // First inserted is valid // Second is invalid // In that no third element is expeced. Use first one to fill the pressure of second one Frame fr = aFrameQueue.get(0); long validPressure = fr.getHasInvalidPressureMeasure() ? fr.getExtrapolatedPressureMeasure() : fr.getPressureMeasure(); fr = aFrameQueue.get(1); fr.setExtrapolatedPressureMeasure(validPressure); aFrameQueue.set(1, fr); } else { // in that case there are 2 elements. // First inserted is valid // Second is invalid // In that case do nothing. Thirt element required for decition how to fix invalid // pressure return; } } else { // Got 3 ot more elements // and the first one is valid Frame fr = aFrameQueue.get(1); boolean isValidSecond = (fr.getHasInvalidPressureMeasure() == false || (fr.getHasInvalidPressureMeasure() == true && fr.getExtrapolatedPressureMeasure() > 0)); fr = aFrameQueue.get(2); boolean isValidThird = (fr.getHasInvalidPressureMeasure() == false || (fr.getHasInvalidPressureMeasure() == true && fr.getExtrapolatedPressureMeasure() > 0)); if (!isValidSecond && !isValidThird) { // Extrapolate the second with the first value fr = aFrameQueue.get(0); long validPressure = fr.getHasInvalidPressureMeasure() ? fr.getExtrapolatedPressureMeasure() : fr.getPressureMeasure(); // fix second with right pressure fr = aFrameQueue.get(1); fr.setExtrapolatedPressureMeasure(validPressure); aFrameQueue.set(1, fr); } if (!isValidSecond && isValidThird) { // Interpolate second value fr = aFrameQueue.get(0); long firstValidPressure = fr.getHasInvalidPressureMeasure() ? fr.getExtrapolatedPressureMeasure() : fr.getPressureMeasure(); fr = aFrameQueue.get(2); long secondValidPressure = fr.getHasInvalidPressureMeasure() ? fr.getExtrapolatedPressureMeasure() : fr.getPressureMeasure(); double interpolVal = (firstValidPressure + secondValidPressure) / 2.0; fr = aFrameQueue.get(1); fr.setExtrapolatedPressureMeasure(Double.doubleToLongBits(interpolVal)); } } } }