PATCH: Remove code that zeroes oxygen-related data and temperatures

Dirk Hohndel dirk at hohndel.org
Fri Oct 31 15:02:51 PDT 2014


Git complains about a corrupt patch...

/D

On Fri, Oct 31, 2014 at 09:27:59PM +0200, Willem Ferguson wrote:
> 
> Remove code that zeroes out duplicate oxygen sensor and temperature values
> 
> Remove the code that changes all duplicate oxygen sensor, setpoint and
> temperature
> values from a dive log to zero. One of the motivations is that a zero
> setpoint
> value indicates an Open Circuit dive segment, not Closed Circuit Rebreather.
> The
> code in dive.c is removed and the comments for the corresponding restoration
> code that restores
> the last known values into sensor or temperature with zero values is
> [fill_o2_values()
> in profile.c] is changed to apply to the present situation.
> 
> Signed-off-by: willem ferguson <willemferguson at zoology.up.ac.za>
> 
> I did some experimenting with the code that restores zeroed oxygen values to
> last-known values.
> If I remove the restoration code, then the o2 profile for the Poseidon data
> goes wonky: o2 values are
> not reported with every sample, so the restoration code is still required.
> Same applies to
> temperature data.
> Kind regards,
> willem
> 

> From 4801a22ec7493e41560300543d4bb20c9678847f Mon Sep 17 00:00:00 2001
> From: willem ferguson <willemferguson at zoology.up.ac.za>
> Date: Fri, 31 Oct 2014 21:00:17 +0200
> Subject: [PATCH 2/2] Remove code that zeroes out duplicate oxygen sensor and
>  temperature values
> 
> Remove the code that changes all duplicate oxygen sensor, setpoint and temperature
> values from a dive log to zero. One of the motivations is that a zero setpoint
> value indicates an Open Circuit dive segment, not Closed Circuit Rebreather. The
> code in dive.c is removed and the comments for the corresponding code that reinserts
> the last known values into sensor or temperature with zero values is [fill_o2_values()
> in profile.c] is changed to apply to the present situation.
> 
> Signed-off-by: willem ferguson <willemferguson at zoology.up.ac.za>
> ---
>  dive.c    | 51 ++++++++++++++++++++++++++-------------------------
>  profile.c | 27 +++++++++++----------------
>  2 files changed, 37 insertions(+), 41 deletions(-)
> 
> diff --git a/dive.c b/dive.c
> index 9f4df56..118ee2b 100644
> --- a/dive.c
> +++ b/dive.c
> @@ -1098,15 +1098,16 @@ static void fixup_dc_events(struct divecomputer *dc)
>  
>  static void fixup_dive_dc(struct dive *dive, struct divecomputer *dc)
>  {
> -	int i, j, o2val;
> +	int i, j;
>  	double depthtime = 0;
>  	int lasttime = 0;
>  	int lastindex = -1;
>  	int maxdepth = dc->maxdepth.mm;
>  	int mintemp = 0;
>  	int lastdepth = 0;
> -	int lasttemp = 0, lastpressure = 0, lastdiluentpressure = 0;
> -	int lasto2val[3] = { 0, 0, 0 };
> +	int lastpressure = 0, lastdiluentpressure = 0;
>  	int pressure_delta[MAX_CYLINDERS] = { INT_MAX, };
>  	int first_cylinder;
>  
> @@ -1164,31 +1165,31 @@ static void fixup_dive_dc(struct dive *dive, struct divecomputer *dc)
>  		fixup_pressure(dive, sample);
>  
>  		if (temp) {
> -			/*
> -			 * If we have consecutive identical
> -			 * temperature readings, throw away
> -			 * the redundant ones.
> -			 */
> -			if (lasttemp == temp)
> -				sample->temperature.mkelvin = 0;
> -			else
> -				lasttemp = temp;
> -
>  			if (!mintemp || temp < mintemp)
>  				mintemp = temp;
>  		}
> -
> -		// If there are consecutive identical O2 sensor readings, throw away the redundant ones.
> -		for (j = 0; j < dc->no_o2sensors; j++) { // for CCR oxygen sensor data:
> -			o2val = sample->o2sensor[j].mbar;
> -			if (o2val) {
> -				if (lasto2val[j] == o2val)
> -					sample->o2sensor[j].mbar = 0;
> -				else
> -					lasto2val[j] = o2val;
> -			}
> -		}
> -
>  		update_min_max_temperatures(dive, sample->temperature);
>  
>  		depthtime += (time - lasttime) * (lastdepth + depth) / 2;
> diff --git a/profile.c b/profile.c
> index 4bc9422..bc59c48 100644
> --- a/profile.c
> +++ b/profile.c
> @@ -929,30 +929,26 @@ static void calculate_gas_information_new(struct dive *dive, struct plot_info *p
>  
>  void fill_o2_values(struct divecomputer *dc, struct plot_info *pi, struct dive *dive)
>  /* For CCR:
> - * In the samples from each dive computer, any duplicate values for the
> - * oxygen sensors were removed (i.e. set to 0) in order to conserve
> - * storage space (see function fixup_dive_dc). But for drawing the profile
> - * a complete series of valid o2 pressure values is required. This function
> - * takes the oxygen sensor data and setpoint values from the structures
> - * of plotinfo and re-inserts the duplicate values set to 0 so
> - * that the oxygen sensor data are complete and ready for plotting.
> - * The original sequence of oxygen values are recreated without attempting
> - * any interpolations for values set to zero, recreating the raw data from
> - * the CCR dive log. This function called by: create_plot_info_new() */
> + * In the samples from each dive computer, there may be uninitialised oxygen
> + * sensor or setpoint values, e.g. when events were inserted into the dive log
> + * or if the dive computer does not report o2 values with every sample. But
> + * for drawing the profile a complete series of valid o2 pressure values is
> + * required. This function takes the oxygen sensor data and setpoint values
> + * from the structures of plotinfo and replaces the zero values with their
> + * last known values so that the oxygen sensor data are complete and ready
> + * for plotting. This function called by: create_plot_info_new() */
>  {
>  	int i, j;
>  	double last_setpoint, last_sensor[3], o2pressure, amb_pressure;
>  
>  	for (i = 0; i < pi->nr; i++) {
>  		struct plot_data *entry = pi->entry + i;
> -		// For 1st iteration, initialise the last_ values
>  		if (dc->dctype == CCR) {
> -			if (i == 0) {
> +			if (i == 0) {	// For 1st iteration, initialise the last_ values:
>  				last_setpoint = pi->entry->o2setpoint;
>  				for (j = 0; j < dc->no_o2sensors; j++)
>  					last_sensor[j] = pi->entry->o2sensor[j];
> -			} else {
> -				// Now re-insert the missing oxygen pressure values
> +			} else {	// Now set the missing oxygen pressure values:
>  				if (entry->o2setpoint)
>  					last_setpoint = entry->o2setpoint;
>  				else
> @@ -962,7 +958,7 @@ void fill_o2_values(struct divecomputer *dc, struct plot_info *pi, struct dive *
>  						last_sensor[j] = entry->o2sensor[j];
>  					else
>  						entry->o2sensor[j] = last_sensor[j];
> -			}			// having initialised the empty o2 sensor values for this point on the profile,
> +			}		// Having initialised the empty o2 sensor values for this point on the profile,
>  			amb_pressure = depth_to_mbar(entry->depth, dive) / 1000.0;
>  			o2pressure = calculate_ccr_po2(entry,dc);	// ...calculate the po2 based on the sensor data
>  			entry->pressures.o2 = MIN(o2pressure, amb_pressure);
> @@ -1026,7 +1022,6 @@ void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plo
>  	populate_pressure_information(dive, dc, pi, NONDILUENT); /* .. calculate missing pressure entries for all gasses except diluent */
>  	if (dc->dctype == CCR)					 /* For CCR dives.. */
>  		populate_pressure_information(dive, dc, pi, DILUENT); /* .. calculate missing diluent gas pressure entries */
> -
>  	fill_o2_values(dc, pi, dive);				      /* .. and insert the O2 sensor data having 0 values. */
>  	calculate_sac(dive, pi); /* Calculate sac */
>  	calculate_deco_information(dive, dc, pi, false); /* and ceiling information, using gradient factor values in Preferences) */
> -- 
> 1.9.1
> 

> _______________________________________________
> subsurface mailing list
> subsurface at subsurface-divelog.org
> http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface



More information about the subsurface mailing list