summaryrefslogtreecommitdiffstats
path: root/profile.c
AgeCommit message (Collapse)Author
2015-10-30Move all core-functionality to subsurface-coreGravatar Tomaz Canabrava
And adapt a new CMakeLists.txt file for it. On the way I've also found out that we where double-compilling a few files. I've also set the subsurface-core as a include_path but that was just to reduce the noise on this commit, since I plan to remove it from the include path to make it obligatory to specify something like include "subsurface-core/dive.h" for the header files. Since the app is growing quite a bit we ended up having a few different files with almost same name that did similar things, I want to kill that (for instance Dive.h, dive.h, PrintDive.h and such). Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-10-23Fix the momentary SAC calculation for the profile coloringGravatar Linus Torvalds
There was tons wrong with the code. You can't just average the SAC rate over different plot entries, since they may not be the same duration. And it got the beginning and end conditions wrong etc etc. This should at least get much closer. And it's structured to be a lot more understandable, I hope, even if the math is a bit more involved (ie doing the proper time-pressure integration etc). It may still have bugs, but at least it now gets the right coloration at the beginning of a dive, and just eye-balling the slope vs color it seems to do the right thing. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Robert C. Helling <helling@atdotde.de>
2015-10-22Fixing build warning about freedivingGravatar Guido Lerch
This just fixes an annoying warning that freediving wasn't covered in the switch statement. Signed-off-by: Guido Lerch <guido.lerch@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-10-18Change plot scaling to handle FREEDIVE mode Add FREEDIVING value to ↵Gravatar Giorgio Marzano
plot_info::plot_type Signed-off-by: Giorgio Marzano <marzano.giorgio@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-10-13Fix questionable build errorsGravatar Dirk Hohndel
Some Linux distributions have compiler settings that cause calls to the printf family of functions to fail if they have just one argument and that argument isn't a literal string. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-10-13Say in infobox if NDL or TTS calculation was cut-offGravatar Robert C. Helling
Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-10-12Break out of TTS calculation for deco longer than 2hGravatar Robert C. Helling
If you have a serious deco obligation TTS is not meaningful anyhow so don't compute it for the profile. In particular not without gas changes. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-09-20Fix plot entry creationGravatar Linus Torvalds
This was originally triggered by an odd merge of two dives that should have been the same, but that showed a corner case where the plot entry creation could create broken results that violated our assumptions about time stamps being monotonous. When setting up the plot entries we create surface entries at the beginning and end. We then fill in the plot entries between them based on the samples from the dive computer plus our own interpolation (so we have one entry at least every ten seconds). The loop ends when we are out of space - which in this instance caused us to exit before updating the maxtime and therefore the final plot entries having time stamps that were smaller than the last entry filled in by the inner loop. This patch makes sure we have enough space in the plot entry structure and moves the exit from the inner loop until after we have updated the maxtime. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-09-20Warn about non-monotonous plot data and prevent infinite loopGravatar Dirk Hohndel
The data are supposed to be sorted with monotonous time stamp. And while the actual bug that causes this needs to be identified and fixed, this is at least a stop gap measure that shows the issue and prevents Subsurface from hanging. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-08-31Introduce double depth_to_bar()Gravatar Robert C. Helling
as it leads to significant cleanup. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-08-31Calculate ceiling only when it is neededGravatar Robert C. Helling
So far, add_segment() returned a tissue tolerance (i.e. ceiling) computed just in its return statement. This tissue_tolerance needed to be dragged around until it was needed or be dropped if not needed at all. As for VPM-B, this ceiling computation is a bit expensive, this patch calls the computation function tissue_tolerance_calc() when the value is actually needed and not before. This changes the signature of some functions. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-08-31Do the Boyle compensation when the gradient is neededGravatar Robert C. Helling
and not some time before and store the result in a global variable. This stores only the bottom gradients and computes the Boyle compensation when computing the allowed ambient pressure. As the Boyle compensation needs a reference ambient pressure, to find the ceiling, we have to iterate this computation until the reference pressure is close enough to the ceiling. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-08-30VPM-B: Get rid of ugly blips in ceilingGravatar Rick Walsh
A real ceiling is the ceiling calculated when the ambient pressure is at the ceiling. As such, the Boyle's law compensation should be done against the ambient pressure at the ceiling. Instead of doing an iterative calculation, take the lesser ambient pressure of the ceiling of the previous sample, and the depth of the current sample. This approach gets rid of "blips" in the calculated ceiling due to a step in Boyle's law compensation during ascent. In limited testing, it also appears to avoid creating a ceiling deeper than the calculated plan in most cases. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-08-30Profile.c: Fix stepping through loop between sample pointsGravatar Rick Walsh
If adjacent samples at times t0 and t1 are greater than time_stepsize apart, this for loop steps through the time between samples to calculate tissue tolerance incrementally at each intermediate time, j, (and interpolated depth). If the difference between t1 and t0 is not a multiple of time_stepsize, immediately before the final increment time_stepsize needs to be reduced to t1 - j so that j = t1 in the final increment. This is necessary when: t1 - j < time_stepsize (i.e. we are about to start the final increment, and time_stepsize needs to be reduced), and j < t1 (i.e. we didn't just do the final increment - without this condition time_stepsize would be set to zero, leading to an infinite loop) Previously, the check was (j - t0 < time_stepsize), which always returns false. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-08-23Show tissue ceilings in tenth of m/ftGravatar Robert C. Helling
Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-08-20Use boyle_compensation in profileGravatar Robert C. Helling
otherwise VPM-B planned profiles seem to violate the ceiling. This needs the first_stop_pressure to be available also in the profile, so I made it global in planner.c Important lesson: If you want to use deco_allowed_depth on a tissue_tolerance that comes from a VPM-B planned dive, you have to call boyles_law() before add_segment()! Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-07-30Add support for RBT reported sample valueGravatar Salvador Cuñat
RBT (Remaining Bottom Time) is a value calculated on the fly by some air integrated divecomputers, for example Uwatec devices. This value is an estimation based in some heuristic around time function pressure gradients. This way, RBT would be the time a diver can spend at actual depth without running out of gas (taking account of ascent, deco, if required, and rock bottom gas reserve, if set). Older Uwatec devices just made the calculus and only stored alarm events if this time value reached zero, but modern devices store the value each sample, in minutes. It seems that Suunto Eon Steel is storing RBT values too, in seconds. Libdivecomputer has supported RBT for a while, but Subsurface just printed it to stdout and dropped it. This adds support for RBT value on subsurface sample structure and shows it in the profile's info box, right under TTS(calc), if selected, where these two values can be easily compared by humans. Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-07-05Round MOD of gas rather than truncateGravatar Robert C. Helling
For the proper calculation, we need to take salinity and surface pressure into account (rather than depth = bar * 10 - 10) Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-06-22Prevent potential division by zeroGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-03-11Event name should be a const char *Gravatar Dirk Hohndel
This avoids a possible warning when calling this function with a string literal as second argument. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-25More descriptive variable in calls to get_dive_gasGravatar Anton Lundin
In a previous patch, 37830bdb ("Always show deco gas as dive gas") the semantic of the last variable was changed. This updates other calls to this function. This is nothing but documenting changes. Signed-off-by: Anton Lundin <glance@acc.umu.se> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-24Correcly look at all relevant dive computer structuresGravatar Dirk Hohndel
When calculating maxima for a dive, we need to take data from all existing dive computer structures plus potentially also a fake dive computer structure that is just passed in in order to create a meaningful profile. Commit 86c961614bfa ("Actually walk all dive computers, don't just claim to do so") missed that second case and no longer took the fake_dc into account, breaking the display of dives that don't have samples. Reported-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-20Fix build problemGravatar Dirk Hohndel
In commit 86c961614bfa ("Actually walk all dive computers, don't just claim to do so") I somehow managed to forget one hunk of the patch (I was editing out debug messages). And I clearly forgot to test compile the final patch as pushed. Apologies. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-20Use SAC from preferences for PSCR oxygen dropGravatar Robert C. Helling
The ratio between SAC and oxygen metabolism rate can be assumed constant but not the metabolism rate. So we better base our calculation on the ratio that uses the SAC from the preferences as that pairs well with the O2 consumption from the preferences. Hence we ran remove the sac parameter from fill_pressures(). Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-19Actually walk all dive computers, don't just claim to do soGravatar Dirk Hohndel
If the first dive computer had pressure samples, but the second one (and no higher one) did, then we would draw a flat horizontal line for the tank pressure graph (but lable it with the correct pressures). This routine that is hunting for the actual maxima and minima does have to really go through all dive computers, not just "this one and up". Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-17Save predefined SACGravatar Robert C. Helling
When planning a dive, the gas consumption is based on a user configured SAC. Thus we should use that SAC and not try to recompute it from samples. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-10Refactor dctype -> divemodeGravatar Robert C. Helling
... and repair a failed rebase (sorry). Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-05Display CCR setpoint values on the po2 graphGravatar Willem Ferguson
When a CCR dive is viewed and the toolbar button for PO2 is activated, both the PO2 (green line) and the O2 setpoint (red line) are shown. This allows evaluation of the PO2 in the CCR loop with respect to the pre-configured O2 setpoint. The setpoint graph can be disabled from the Preferences/Graphs tab by checking the appropriate checkbox. Signed-off-by: willem ferguson <willemferguson@zoology.up.ac.za> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-03Interpolate running depth when necessaryGravatar Miika Turkia
The running depth must be interpolated when sample interval is more than 10 seconds. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2015-01-01Fix mean depth on info boxGravatar Miika Turkia
The running depth must be divided by current time to get the average depth. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-12-31Information overlay: include the moving mean depthGravatar Dirk Hohndel
Apparently this is useful for some tech divers. We urgently need an option to turn off the graph and this text, though, as I am guessing that this is just distracting and annoying to 90+% of our users. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-12-28Whitespace cleanupGravatar Dirk Hohndel
Plus removal of a few qDebug() calls I introduced earlier. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-12-28Populate the plot info with tts informationGravatar Anton Lundin
Signed-off-by: Anton Lundin <glance@acc.umu.se> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-12-18Free event list names on clear_events()Gravatar Anton Lundin
clear_events() just reset the start point of our event list, but didn't actually free the event names that got "cleared". Signed-off-by: Anton Lundin <glance@acc.umu.se> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-12-17Recording average depth dataGravatar Robert C. Helling
This is the calculation that is needed to display a running average in the profile. It adds a new member plot_data.running_sum which can be turned into the running average by dividing by plot_data.time. Right now this isn't used by the UI. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-12-04Don't interpolate pressure while dragging waypointsGravatar Robert C. Helling
A profiler session in the planner shows that for deep long dives a significant amount of CPU time is spent in populate_pressure_information() which interpolates the cylinder pressure graphs. This patch introduces a "fast" flag for the replot of the profile which is active while the mouse button is still pressed and that suppresses this calculation. In the future, this flag could be used for other responsiveness tunings of the plot. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-12-01Context menu entry to change setpointGravatar Robert C. Helling
This patch adds a context menu entry to add a setpoint change event. In particular, this can be used to turn a logged dive into a CCR dive. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-20Correctly computer O2 partial pressureGravatar Robert C. Helling
I had forgotten a / 1000.0 in the conversion of partial pressures from (double) bar to (int32) mbar. Fixes #763 Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-19Fix warnings in debug_print_profiledataGravatar Anton Lundin
Use the right format, now when those variables are integers and not doubles. Signed-off-by: Anton Lundin <glance@acc.umu.se> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-18Cleaning up pressuresGravatar Robert C. Helling
Added comment about meaning of o2pressure in struct plot_info. Turned some pressures from double (in bar) to pressure_t (in mbar) [Dirk Hohndel: picked parts of this patch and dropped others] Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-18Fix issues in CCR handlingGravatar willem ferguson
In commit 0d7c192e6edc ("For CCR dives, the diluent cylinder is the current cylinder") a few things got broken. This tries to undo those changes and adds expanded XML output. 1) Calculate correct partial pressure of oxygen to be plotted on dive profile, taking into account the oxygen sensor data. Currently, erroneously, OC PO2 values are shown, due to an erroneous calling parameter to fill_pressures(). 2) Read start and end cylinder pressured correctly. some wrong assignments were done in file.c. This is now corrected and the correct cylinder pressures are shown in the equipment tab. 3) Write correct cylinder pressures to XML. Currently the data for the two cylinders are written to XML the wrong way round (diluent pressures = oxygen and vice versa). 4) Expand XML output: a) Write oxygen sensor data to XML b) Write no_of_02sensors to XML Signed-off-by: willem ferguson <willemferguson@zoology.up.ac.za> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-17For CCR dives, show plot for diluent and O2 cylinder pressuresGravatar Robert C. Helling
Also fixes a bug in the diluent pressure interpolation Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-17For CCR dives, the diluent cylinder is the current cylinderGravatar Robert C. Helling
Change the meaning that _the_ cylinder (as we treat it in OC dives) is the diluent cylinder (rather than the O2 cylinder). This eliminates special cases. Now, for CCR, we have to handle the O2 cylinder in addition (rather than the diluent in addition). Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-17More CCR code cleanupGravatar Dirk Hohndel
Random constants are bad. Let's use the indices that we already calculated (and true and false if we mean boolean values). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-12profile.c: fix a bug in calculate_gas_information_new()Gravatar Lubomir I. Ivanov
In a test case loading dives/test35.xml results in a infinite(-like) loop (Note: possibly requires the partial pressure plots enabled). calculate_gas_information_new() has an 'if' branch to update the cylinderindex to a dive's diluent_cylinder_index, but it does not consider that said index can be set previously to -1. This results in a random neighbour memory assigned as &dive->cylinder[-1].gasmix and passed to fill_pressures(..). Following the calculations in the function the He gas, can receive a bad value (e.g. for the test case in the E+6 ranges). Said value is then used in DivePlotDataModel()::pheMax() (defined by MAX_PPGAS_FUNC()) resulting in one of the loops (the 3rd one) in DiveCartesianAxis::updateTicks() to loop indefinitely. Fixes #759 Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-08Remove leftover last_setpointGravatar Anton Lundin
Back in 24c491053cd9 ("Don't overwrite zero setpoints") the filling of last_setpoint logic was removed. This clears out the last bits left over. Signed-off-by: Anton Lundin <glance@acc.umu.se> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-07The po2 argument of addS_segment is the setpoint, not the pO2 at that timeGravatar Robert C. Helling
Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-07Don't overwrite zero setpointsGravatar Robert C. Helling
As we agreed, in memory we don't zero repeated setpoints and thus zero setpoints don't have to be overwritten by the last setpoint value. This corrects the deco ceiling with CCR dives that bailout to OC. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-04Use the CCR corrected gases for EAD and END calculationsGravatar Robert C. Helling
Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2014-11-04Prepare for PSCR calculationsGravatar Robert C. Helling
Calculations for passive semi-closed rebreathers are pretty much like OC except the pO2 is lower bey a certain (SAC dependent) factor. This patch introduces the corresponding calculations in case dctype == PSCR which is so far never set and there is currently no UI for these calculations. As pO2 is SAC dependent it takes a certain attempt at getting it and drops to defaults from the prefs otherwise. As there is no UI at this point and I also don't have any dives, this has not received much testing, yet, but it compiles. At least. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>