mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Add some more cochran data parsing code/comments
The code is pretty useless, the comments perhaps equally so. I'm trying to figure out what the data pattern is for the cochran CAN files. There definitely *is* a pattern, but it actually seems to be different for the files of different people - and it's not obvious in any case. There probably are multiple versions of the format, and there might be things like "David has a high-pressure sensor, and Alex does not" going on too. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
9c7aaed02a
commit
8add7917ce
1 changed files with 59 additions and 0 deletions
59
cochran.c
59
cochran.c
|
|
@ -150,6 +150,64 @@ static void parse_cochran_header(const char *filename,
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cochran export files show that depths seem to be in
|
||||||
|
* tenth of feet.
|
||||||
|
*
|
||||||
|
* Temperature seems to be exported in Fahrenheit.
|
||||||
|
*
|
||||||
|
* Cylinder pressure seems to be in multiples of 4 psi.
|
||||||
|
*
|
||||||
|
* The data seems to be some byte-stream where the pattern
|
||||||
|
* appears to be that the two high bits indicate type of
|
||||||
|
* data.
|
||||||
|
*
|
||||||
|
* For '00', the low six bits seem to be positive
|
||||||
|
* values with a distribution towards zero, probably depth
|
||||||
|
* deltas. '0 0' exists, but is very rare ("surface"?). 63
|
||||||
|
* exists, but is rare.
|
||||||
|
*
|
||||||
|
* For '01', the low six bits seem to be a signed binary value,
|
||||||
|
* with the most common being 0, and 1 and -1 (63) being the
|
||||||
|
* next most common values.
|
||||||
|
*
|
||||||
|
* NOTE! Don's CAN data is different. It shows the reverse pattern
|
||||||
|
* for 00 and 01 above: 00 looks like signed data, with 01 looking
|
||||||
|
* like unsigned data.
|
||||||
|
*
|
||||||
|
* For '10', there seems to be another positive value distribution,
|
||||||
|
* but unlike '00' the value 0 is common, and I see examples of 63
|
||||||
|
* too ("overflow"?) and a spike at '7'.
|
||||||
|
*
|
||||||
|
* Again, Don's data is different.
|
||||||
|
*
|
||||||
|
* The values for '11' seem to be some exception case. Possibly
|
||||||
|
* overflow handling, possibly warning events. It doesn't have
|
||||||
|
* any clear distribution: values 0, 1, 16, 33, 35, 48, 51, 55
|
||||||
|
* and 63 are common.
|
||||||
|
*
|
||||||
|
* For David and Don's data, '01' is the most common, with '00'
|
||||||
|
* and '10' not uncommon. '11' is two orders of magnitude less
|
||||||
|
* common.
|
||||||
|
*
|
||||||
|
* For Alex, '00' is the most common, with 01 about a third as
|
||||||
|
* common, and 02 a third of that. 11 is least common.
|
||||||
|
*
|
||||||
|
* There clearly are variations in the format here. And Alex has
|
||||||
|
* a different data offset than Don/David too (see the #ifdef DON).
|
||||||
|
* Christ. Maybe I've misread the patterns entirely.
|
||||||
|
*/
|
||||||
|
static void cochran_profile_write(const unsigned char *buf, int size)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < size; i++) {
|
||||||
|
unsigned char c = buf[i];
|
||||||
|
printf("%d %d\n",
|
||||||
|
c >> 6, c & 0x3f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void parse_cochran_dive(const char *filename, int dive,
|
static void parse_cochran_dive(const char *filename, int dive,
|
||||||
const unsigned char *decode, unsigned mod,
|
const unsigned char *decode, unsigned mod,
|
||||||
const unsigned char *in, unsigned size)
|
const unsigned char *in, unsigned size)
|
||||||
|
|
@ -187,6 +245,7 @@ static void parse_cochran_dive(const char *filename, int dive,
|
||||||
|
|
||||||
printf("\n%s, dive %d\n\n", filename, dive);
|
printf("\n%s, dive %d\n\n", filename, dive);
|
||||||
cochran_debug_write(filename, buf, size);
|
cochran_debug_write(filename, buf, size);
|
||||||
|
cochran_profile_write(buf + offset, size - offset);
|
||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue