[PATCH 3/3] Reinstating SURFACE_THRESHOLD test in pressure_time function

Dirk Hohndel dirk at hohndel.org
Wed Jan 8 05:07:08 UTC 2014


Rodrigo,

sorry it took me so long to review and apply your patches.

My dives very obviously triggered a bug in your code and I wanted to
make sure I understood the cause and had a correct fix before applying
this.

This has now been pushed - please check that the latest master works as
intended for you.

/D

On Wed, 2014-01-01 at 10:35 -0200, Rodrigo Severo wrote:
> The small straight parts at the end of tank pressure lines are more of a aesthetic issue, not causing real harm so it is no reason to remove the SURFACE_THRESHOLD test from pressure_time function only because of this.
> 
> Also improved interpolate data debuging, rearranged get_pr_interpolate_data and removed an unused variable from get_pr_interpolate_data. No real change here, just trying to make the code clearer.
> 
> Signed-off-by: Rodrigo Severo <rodrigo at fabricadeideias.com>
> ---
>  profile.c | 32 +++++++++++++++++++-------------
>  1 file changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git a/profile.c b/profile.c
> index 6178a31..fdaac56 100644
> --- a/profile.c
> +++ b/profile.c
> @@ -426,9 +426,9 @@ struct pr_interpolate_struct {
>  };
>  
>  #ifdef DEBUG_PR_INTERPOLATE
> -static void dump_pr_interpolate(pr_interpolate_t interpolate_pr)
> +static void dump_pr_interpolate(int i, pr_interpolate_t interpolate_pr)
>  {
> -    printf("INTERPOLATE: start %d - end %d - pt %d - acc_pt %d\n",
> +    printf("Interpolate for entry %d: start %d - end %d - pt %d - acc_pt %d\n", i,
>              interpolate_pr.start, interpolate_pr.end, interpolate_pr.pressure_time, interpolate_pr.acc_pressure_time);
>  }
>  #endif
> @@ -516,6 +516,9 @@ static inline int pressure_time(struct dive *dive, struct divecomputer *dc, stru
>  	int time = b->sec - a->sec;
>  	int depth = (a->depth + b->depth)/2;
>  
> +	if (depth <= SURFACE_THRESHOLD)
> +		return 0;
> +
>  	return depth_to_mbar(depth, dive) * time;
>  }
>  
> @@ -523,13 +526,12 @@ static struct pr_interpolate_struct get_pr_interpolate_data(pr_track_t *segment,
>  {
>  	struct pr_interpolate_struct interpolate;
>  	int i;
> -	struct plot_data *entry, *cur_entry;
> +	struct plot_data *entry;
>  
>  	interpolate.start = segment->start;
>  	interpolate.end = segment->end;
>  	interpolate.acc_pressure_time = 0;
>  	interpolate.pressure_time = 0;
> -	cur_entry = pi->entry + cur;
>  	
>  	for (i = 0; i < pi->nr; i++) {
>  		entry = pi->entry + i;
> @@ -544,7 +546,9 @@ static struct pr_interpolate_struct get_pr_interpolate_data(pr_track_t *segment,
>  			interpolate.pressure_time = 0;
>  			if (SENSOR_PRESSURE(entry)) 
>  				interpolate.start = SENSOR_PRESSURE(entry);
> -		} else if (i < cur) {
> +			continue;
> +		}
> +		if (i < cur) {
>  			if (SENSOR_PRESSURE(entry)) {
>  				interpolate.start = SENSOR_PRESSURE(entry);
>  				interpolate.acc_pressure_time = 0;
> @@ -553,15 +557,17 @@ static struct pr_interpolate_struct get_pr_interpolate_data(pr_track_t *segment,
>  				interpolate.acc_pressure_time += entry->pressure_time;
>  				interpolate.pressure_time += entry->pressure_time;
>  			}
> -		} else if (i == cur) {
> +			continue;
> +		}
> +		if (i == cur) {
>  			interpolate.acc_pressure_time += entry->pressure_time;
>  			interpolate.pressure_time += entry->pressure_time;
> -		} else {
> -			interpolate.pressure_time += entry->pressure_time;
> -			if (SENSOR_PRESSURE(entry)) {
> -				interpolate.end = SENSOR_PRESSURE(entry);
> -				break;
> -			}
> +			continue;
> +		}
> +		interpolate.pressure_time += entry->pressure_time;
> +		if (SENSOR_PRESSURE(entry)) {
> +			interpolate.end = SENSOR_PRESSURE(entry);
> +			break;
>  		}
>  	}
>  	return interpolate;
> @@ -612,7 +618,7 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi,
>                  
>                  interpolate = get_pr_interpolate_data(segment, pi, i);
>  #ifdef DEBUG_PR_INTERPOLATE
> -                dump_pr_interpolate(interpolate);
> +                dump_pr_interpolate(i, interpolate);
>  #endif
>  		/* Overall pressure change over total pressure-time for this segment*/
>  		magic = (interpolate.end - interpolate.start) / (double) interpolate.pressure_time;




More information about the subsurface mailing list