understanding the sensor values in our samples

Michael Andreen harv at ruin.nu
Thu Apr 28 08:38:09 PDT 2022


On Thursday 28 April 2022 16:31:06 CEST Dirk Hohndel wrote:
> > The sensor[] array has slightly different usage for OC and CCR dives. For OC dives it's not that sensor[0] is the main tank/diluent and sensor[1] is O2. Instead, we support for up to two pressure samples per sample. So sensor[0] says which tank pressure[0] is attached to and sensor[1] says which tank pressure[1] is attached to. And with 3 sensors you can end up with something like this:
> > 
> > sample1 sensor[0]=0 sensor[1]=1 pressure[0]=100.0 pressure[1]=200.0
> > sample2 sensor[0]=2 sensor[1]=1 pressure[0]=300.0 pressure[1]=200.0
> > sample3 sensor[0]=0 sensor[1]=2 pressure[0]=100.0 pressure[1]=300.0
> > sample4 sensor[0]=1 sensor[1]=2 pressure[0]=200.0 pressure[1]=300.0
> 
> Fascinating. Do you have a dive you could point me at in cloud storage or export as .XML that shows this?
> Because my understanding of the git and xml parsing code says that it does not do what it should be doing if that is indeed the idea here.
> But then it's always possible that I ended up confusing myself... so having a working example would be neat.

I don't have a real dive, since my current setup has two sensors attached to two different dive computers. It took some time to understand the model when I did the sensor move work. I've attached a small manual dive that I've added sensor data to, which shows the above behavior.
 
> The one thing that I /can/ say with confidence is that the fact that for a case with just a single active sensor, the current code creates two "used" sensor entries - and that can't be right.
 
I noticed that too, but in most places it checks if the pressure is 0 to determine if it is actually used or not. There are also some places that relies on sensor[1] not being -1 when unused, like deciding if the legacy or new format for pressure is used. It'll likely need some care, but would probably be worth it.

> > It tries to reuse the index for the same cylinder, but if the cylinder isn't in the previous sample then it picks the first index that doesn't (yet) have a pressure for this sample. So ignoring sensor[1] is not right solution for OC dives. For these I think the real solution is to ensure that unused sensor[n] is set to NO_SENSOR.
> 
> There are at least three places in the code where that definitely doesn't happen.
> 
> > However, I don't really understand the special CCR O2 handling. There is a lot of odd handling, including picking the format to use for saving the pressure samples, so the change to have unsed sensor[n] as NO_SENSOR might have a bigger impact.
> 
> I don't fully understand that code, either. I've never used anything but OC - so this code was mostly written by others.
> 
> > I wonder how much of that special CCR O2 handling is actually needed and how much is just there because of history. Why do we save o2pressure in pressure[1] when there is already a separate o2pressure? Especially since o2pressure seems to be partial pressure and not cylinder pressure.

I realized that the o2pressure is only a separate member in the plot_entry struct. And it doesn't actually seem to use sensor[1], so I'm still confused about how this works. If it's actually cylinder pressure then maybe we could always save in the new format and only support the legacy format when parsing?
> 
> Willem?

-------------- next part --------------
<divelog program='subsurface' version='3'>
<settings>
</settings>
<divesites>
</divesites>
<dives>
<dive number='1' otu='3' cns='4%' date='2022-04-28' time='18:00:51' duration='40:00 min'>
  <cylinder size='12.0 l' workpressure='232.0 bar' description='12? 232 bar' depth='65.697 m' />
  <cylinder size='11.094 l' workpressure='206.843 bar' description='AL80' depth='39.651 m' />
  <cylinder size='11.094 l' workpressure='206.843 bar' description='AL80' depth='39.651 m' />
  <divecomputer model='manually added dive' last-manual-time='40:00 min'>
  <depth max='15.0 m' mean='12.999 m' />
  <sample time='0:00 min' pressure0="100.0 bar" pressure1="200.0 bar" depth='0.0 m' />
  <sample time='5:00 min' pressure1="200.0 bar" pressure2="300.0 bar" depth='15.0 m' />
  <sample time='18:00 min' pressure0="100.0 bar" pressure2="300.0 bar" depth='15.0 m' />
  <sample time='26:00 min' pressure1="200.0 bar" pressure2="300.0 bar"depth='15.0 m' />
  <sample time='34:30 min' depth='15.0 m' />
  <sample time='37:51 min' depth='4.95 m' />
  <sample time='38:21 min' depth='4.95 m' />
  <sample time='40:00 min' depth='0.0 m' />
  </divecomputer>
</dive>
</dives>
</divelog>


More information about the subsurface mailing list