mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Fix missing pressure plot at start of the dive in some situations
In some situations we could end up with no sample pressure and no interpolated pressure at time = 0. This is now fixed. Fix notes in test dive the exposed the issue. Also change the code in create_plot_info to keep the number of samples and the number of corresponding pi entries in separate variables. This avoids future changes from breaking if they assume they can access dive->sample[nr_samples - 1] (which is a reasonable assumption to make). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									93d07f631a
								
							
						
					
					
						commit
						4b735521e2
					
				
					 2 changed files with 14 additions and 10 deletions
				
			
		|  | @ -5,7 +5,7 @@ | |||
|   <temperature air='27.0 C' water='26.0 C' /> | ||||
|   <location>8th test dive, with samples</location> | ||||
|   <notes>SAC should be 0.93 cuft/min or 26.2 l/min | ||||
| Tank pressure plotted incorrectly (issues with first sample of first tank). | ||||
| Tank pressure plotted correctly (linear approximation) | ||||
| Descent light green | ||||
| First Ascent red, second orange, third yellow, last green | ||||
| </notes> | ||||
|  |  | |||
							
								
								
									
										22
									
								
								profile.c
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								profile.c
									
										
									
									
									
								
							|  | @ -660,8 +660,10 @@ static void plot_cylinder_pressure_text(struct graphics_context *gc, struct plot | |||
| 	if (!get_cylinder_pressure_range(gc, pi)) | ||||
| 		return; | ||||
| 
 | ||||
| 	/* only loop over the actual events from the dive computer */ | ||||
| 	for (i = 2; i < pi->nr; i++) { | ||||
| 	/* only loop over the actual events from the dive computer
 | ||||
| 	 * plus the second synthetic event at the start (to make sure | ||||
| 	 * we get "time=0" right) */ | ||||
| 	for (i = 1; i < pi->nr; i++) { | ||||
| 		entry = pi->entry + i; | ||||
| 
 | ||||
| 		if (!entry->same_cylinder) { | ||||
|  | @ -889,8 +891,9 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, | |||
| 		cur_pr[cyl] = track_pr[cyl]->start; | ||||
| 	} | ||||
| 
 | ||||
| 	/* The first two are "fillers" */ | ||||
| 	for (i = 2; i < pi->nr; i++) { | ||||
| 	/* The first two are "fillers", but in case we don't have a sample
 | ||||
| 	 * at time 0 we need to process the second of them here */ | ||||
| 	for (i = 1; i < pi->nr; i++) { | ||||
| 		entry = pi->entry + i; | ||||
| 		if (SENSOR_PRESSURE(entry)) { | ||||
| 			cur_pr[entry->cylinderindex] = SENSOR_PRESSURE(entry); | ||||
|  | @ -929,7 +932,8 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi, | |||
| 				INTERPOLATED_PRESSURE(entry) = | ||||
| 					cur_pr[entry->cylinderindex] + cur_pt * magic; | ||||
| 				cur_pr[entry->cylinderindex] = INTERPOLATED_PRESSURE(entry); | ||||
| 			} | ||||
| 			} else | ||||
| 				INTERPOLATED_PRESSURE(entry) = cur_pr[entry->cylinderindex]; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -1109,14 +1113,14 @@ static struct plot_info *create_plot_info(struct dive *dive, int nr_samples, str | |||
| 		entry = pi->entry + i + pi_idx; | ||||
| 		ev = get_next_gaschange(ev->next); | ||||
| 	} | ||||
| 	nr_samples += pi_idx - 2; | ||||
| 	nr = nr_samples + pi_idx - 2; | ||||
| 	check_gas_change_events(dive, pi); | ||||
| 
 | ||||
| 	for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) /* initialize the start pressures */ | ||||
| 		track_pr[cyl] = pr_track_alloc(dive->cylinder[cyl].start.mbar, -1); | ||||
| 	current = track_pr[pi->entry[2].cylinderindex]; | ||||
| 	for (i = 0; i < nr_samples; i++) { | ||||
| 		entry = pi->entry + i + 2; | ||||
| 	for (i = 0; i < nr + 1; i++) { | ||||
| 		entry = pi->entry + i + 1; | ||||
| 
 | ||||
| 		entry->same_cylinder = entry->cylinderindex == cylinderindex; | ||||
| 		cylinderindex = entry->cylinderindex; | ||||
|  | @ -1155,7 +1159,7 @@ static struct plot_info *create_plot_info(struct dive *dive, int nr_samples, str | |||
| 		} | ||||
| 	} | ||||
| 	/* Fill in the last two entries with empty values but valid times */ | ||||
| 	i = nr_samples + 2; | ||||
| 	i = nr + 2; | ||||
| 	pi->entry[i].sec = sec + 20; | ||||
| 	pi->entry[i+1].sec = sec + 40; | ||||
| 	/* the number of actual entries - we may have allocated more if there
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue