Prepare to merge the Uwatec Smart and Galileo parsers.
This commit is contained in:
parent
019b807e0f
commit
03b7e3091e
@ -208,29 +208,29 @@ typedef enum {
|
|||||||
|
|
||||||
typedef struct uwatec_galileo_sample_info_t {
|
typedef struct uwatec_galileo_sample_info_t {
|
||||||
uwatec_galileo_sample_t type;
|
uwatec_galileo_sample_t type;
|
||||||
unsigned int nbits;
|
unsigned int ntypebits;
|
||||||
unsigned int extrabytes;
|
unsigned int extrabytes;
|
||||||
} uwatec_galileo_sample_info_t;
|
} uwatec_galileo_sample_info_t;
|
||||||
|
|
||||||
static const
|
static const
|
||||||
uwatec_galileo_sample_info_t uwatec_galileo_sol_table [] = {
|
uwatec_galileo_sample_info_t uwatec_galileo_sol_table [] = {
|
||||||
{DELTA_DEPTH, 7, 0}, // 0ddd dddd
|
{DELTA_DEPTH, 1, 0}, // 0ddd dddd
|
||||||
{DELTA_RBT, 5, 0}, // 100d dddd
|
{DELTA_RBT, 3, 0}, // 100d dddd
|
||||||
{DELTA_TANK_PRESSURE, 4, 0}, // 1010 dddd
|
{DELTA_TANK_PRESSURE, 4, 0}, // 1010 dddd
|
||||||
{DELTA_TEMPERATURE, 4, 0}, // 1011 dddd
|
{DELTA_TEMPERATURE, 4, 0}, // 1011 dddd
|
||||||
{TIME, 4, 0}, // 1100 dddd
|
{TIME, 4, 0}, // 1100 dddd
|
||||||
{DELTA_HEARTRATE, 4, 0}, // 1101 dddd
|
{DELTA_HEARTRATE, 4, 0}, // 1101 dddd
|
||||||
{ALARMS, 4, 0}, // 1110 dddd
|
{ALARMS, 4, 0}, // 1110 dddd
|
||||||
{ALARMS, 0, 1}, // 1111 0000 dddddddd
|
{ALARMS, 8, 1}, // 1111 0000 dddddddd
|
||||||
{ABSOLUTE_DEPTH, 0, 2}, // 1111 0001 dddddddd dddddddd
|
{ABSOLUTE_DEPTH, 8, 2}, // 1111 0001 dddddddd dddddddd
|
||||||
{ABSOLUTE_RBT, 0, 1}, // 1111 0010 dddddddd
|
{ABSOLUTE_RBT, 8, 1}, // 1111 0010 dddddddd
|
||||||
{ABSOLUTE_TEMPERATURE, 0, 2}, // 1111 0011 dddddddd dddddddd
|
{ABSOLUTE_TEMPERATURE, 8, 2}, // 1111 0011 dddddddd dddddddd
|
||||||
{ABSOLUTE_TANK_1_PRESSURE, 0, 2}, // 1111 0100 dddddddd dddddddd
|
{ABSOLUTE_TANK_1_PRESSURE, 8, 2}, // 1111 0100 dddddddd dddddddd
|
||||||
{ABSOLUTE_TANK_2_PRESSURE, 0, 2}, // 1111 0101 dddddddd dddddddd
|
{ABSOLUTE_TANK_2_PRESSURE, 8, 2}, // 1111 0101 dddddddd dddddddd
|
||||||
{ABSOLUTE_TANK_D_PRESSURE, 0, 2}, // 1111 0110 dddddddd dddddddd
|
{ABSOLUTE_TANK_D_PRESSURE, 8, 2}, // 1111 0110 dddddddd dddddddd
|
||||||
{ABSOLUTE_HEARTRATE, 0, 1}, // 1111 0111 dddddddd
|
{ABSOLUTE_HEARTRATE, 8, 1}, // 1111 0111 dddddddd
|
||||||
{BEARING, 0, 2}, // 1111 1000 dddddddd dddddddd
|
{BEARING, 8, 2}, // 1111 1000 dddddddd dddddddd
|
||||||
{ALARMS, 0, 1}, // 1111 1001 dddddddd
|
{ALARMS, 8, 1}, // 1111 1001 dddddddd
|
||||||
};
|
};
|
||||||
|
|
||||||
static parser_status_t
|
static parser_status_t
|
||||||
@ -279,20 +279,28 @@ uwatec_galileo_parser_samples_foreach (parser_t *abstract, sample_callback_t cal
|
|||||||
unsigned int id = uwatec_galileo_identify (data + offset, size - offset);
|
unsigned int id = uwatec_galileo_identify (data + offset, size - offset);
|
||||||
assert (id < entries);
|
assert (id < entries);
|
||||||
|
|
||||||
// Process the remaining data bytes.
|
// Skip the processed type bytes.
|
||||||
unsigned int nbits = table[id].nbits;
|
offset += table[id].ntypebits / NBITS;
|
||||||
unsigned int n = NBITS - nbits;
|
|
||||||
unsigned int value = data[offset] & (0xFF >> n);
|
// Process the remaining data bits.
|
||||||
assert (offset + table[id].extrabytes + 1 <= size);
|
unsigned int nbits = 0;
|
||||||
|
unsigned int value = 0;
|
||||||
|
unsigned int n = table[id].ntypebits % NBITS;
|
||||||
|
if (n > 0) {
|
||||||
|
nbits = NBITS - n;
|
||||||
|
value = data[offset] & (0xFF >> n);
|
||||||
|
offset++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process the extra data bytes.
|
||||||
|
assert (offset + table[id].extrabytes <= size);
|
||||||
for (unsigned int i = 0; i < table[id].extrabytes; ++i) {
|
for (unsigned int i = 0; i < table[id].extrabytes; ++i) {
|
||||||
nbits += NBITS;
|
nbits += NBITS;
|
||||||
value <<= NBITS;
|
value <<= NBITS;
|
||||||
value += data[offset + i + 1];
|
value += data[offset];
|
||||||
|
offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip the processed data bytes.
|
|
||||||
offset += table[id].extrabytes + 1;
|
|
||||||
|
|
||||||
// Fix the sign bit.
|
// Fix the sign bit.
|
||||||
signed int svalue = uwatec_galileo_fixsignbit (value, nbits);
|
signed int svalue = uwatec_galileo_fixsignbit (value, nbits);
|
||||||
|
|
||||||
|
|||||||
@ -127,7 +127,9 @@ uwatec_smart_identify (const unsigned char data[], unsigned int size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
assert (0);
|
||||||
|
|
||||||
|
return (unsigned int) -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -167,67 +169,68 @@ typedef enum {
|
|||||||
|
|
||||||
typedef struct uwatec_smart_sample_info_t {
|
typedef struct uwatec_smart_sample_info_t {
|
||||||
uwatec_smart_sample_t type;
|
uwatec_smart_sample_t type;
|
||||||
|
unsigned int ntypebits;
|
||||||
unsigned int ignoretype;
|
unsigned int ignoretype;
|
||||||
unsigned int extrabytes;
|
unsigned int extrabytes;
|
||||||
} uwatec_smart_sample_info_t;
|
} uwatec_smart_sample_info_t;
|
||||||
|
|
||||||
static const
|
static const
|
||||||
uwatec_smart_sample_info_t uwatec_smart_pro_table [] = {
|
uwatec_smart_sample_info_t uwatec_smart_pro_table [] = {
|
||||||
{DELTA_DEPTH, 0, 0}, // 0ddddddd
|
{DELTA_DEPTH, 1, 0, 0}, // 0ddddddd
|
||||||
{DELTA_TEMPERATURE, 0, 0}, // 10dddddd
|
{DELTA_TEMPERATURE, 2, 0, 0}, // 10dddddd
|
||||||
{TIME, 0, 0}, // 110ddddd
|
{TIME, 3, 0, 0}, // 110ddddd
|
||||||
{ALARMS, 0, 0}, // 1110dddd
|
{ALARMS, 4, 0, 0}, // 1110dddd
|
||||||
{DELTA_DEPTH, 0, 1}, // 11110ddd dddddddd
|
{DELTA_DEPTH, 5, 0, 1}, // 11110ddd dddddddd
|
||||||
{DELTA_TEMPERATURE, 0, 1}, // 111110dd dddddddd
|
{DELTA_TEMPERATURE, 6, 0, 1}, // 111110dd dddddddd
|
||||||
{ABSOLUTE_DEPTH, 1, 2}, // 1111110d dddddddd dddddddd
|
{ABSOLUTE_DEPTH, 7, 1, 2}, // 1111110d dddddddd dddddddd
|
||||||
{ABSOLUTE_TEMPERATURE, 1, 2}, // 11111110 dddddddd dddddddd
|
{ABSOLUTE_TEMPERATURE, 8, 0, 2}, // 11111110 dddddddd dddddddd
|
||||||
};
|
};
|
||||||
|
|
||||||
static const
|
static const
|
||||||
uwatec_smart_sample_info_t uwatec_smart_aladin_table [] = {
|
uwatec_smart_sample_info_t uwatec_smart_aladin_table [] = {
|
||||||
{DELTA_DEPTH, 0, 0}, // 0ddddddd
|
{DELTA_DEPTH, 1, 0, 0}, // 0ddddddd
|
||||||
{DELTA_TEMPERATURE, 0, 0}, // 10dddddd
|
{DELTA_TEMPERATURE, 2, 0, 0}, // 10dddddd
|
||||||
{TIME, 0, 0}, // 110ddddd
|
{TIME, 3, 0, 0}, // 110ddddd
|
||||||
{ALARMS, 0, 0}, // 1110dddd
|
{ALARMS, 4, 0, 0}, // 1110dddd
|
||||||
{DELTA_DEPTH, 0, 1}, // 11110ddd dddddddd
|
{DELTA_DEPTH, 5, 0, 1}, // 11110ddd dddddddd
|
||||||
{DELTA_TEMPERATURE, 0, 1}, // 111110dd dddddddd
|
{DELTA_TEMPERATURE, 6, 0, 1}, // 111110dd dddddddd
|
||||||
{ABSOLUTE_DEPTH, 1, 2}, // 1111110d dddddddd dddddddd
|
{ABSOLUTE_DEPTH, 7, 1, 2}, // 1111110d dddddddd dddddddd
|
||||||
{ABSOLUTE_TEMPERATURE, 1, 2}, // 11111110 dddddddd dddddddd
|
{ABSOLUTE_TEMPERATURE, 8, 0, 2}, // 11111110 dddddddd dddddddd
|
||||||
{ALARMS, 0, 0}, // 11111111 0ddddddd
|
{ALARMS, 9, 0, 0}, // 11111111 0ddddddd
|
||||||
};
|
};
|
||||||
|
|
||||||
static const
|
static const
|
||||||
uwatec_smart_sample_info_t uwatec_smart_com_table [] = {
|
uwatec_smart_sample_info_t uwatec_smart_com_table [] = {
|
||||||
{DELTA_TANK_PRESSURE_DEPTH, 0, 1}, // 0ddddddd dddddddd
|
{DELTA_TANK_PRESSURE_DEPTH, 1, 0, 1}, // 0ddddddd dddddddd
|
||||||
{DELTA_RBT, 0, 0}, // 10dddddd
|
{DELTA_RBT, 2, 0, 0}, // 10dddddd
|
||||||
{DELTA_TEMPERATURE, 0, 0}, // 110ddddd
|
{DELTA_TEMPERATURE, 3, 0, 0}, // 110ddddd
|
||||||
{DELTA_TANK_PRESSURE, 0, 1}, // 1110dddd dddddddd
|
{DELTA_TANK_PRESSURE, 4, 0, 1}, // 1110dddd dddddddd
|
||||||
{DELTA_DEPTH, 0, 1}, // 11110ddd dddddddd
|
{DELTA_DEPTH, 5, 0, 1}, // 11110ddd dddddddd
|
||||||
{DELTA_TEMPERATURE, 0, 1}, // 111110dd dddddddd
|
{DELTA_TEMPERATURE, 6, 0, 1}, // 111110dd dddddddd
|
||||||
{ALARMS, 1, 1}, // 1111110d dddddddd
|
{ALARMS, 7, 1, 1}, // 1111110d dddddddd
|
||||||
{TIME, 1, 1}, // 11111110 dddddddd
|
{TIME, 8, 0, 1}, // 11111110 dddddddd
|
||||||
{ABSOLUTE_DEPTH, 1, 2}, // 11111111 0ddddddd dddddddd dddddddd
|
{ABSOLUTE_DEPTH, 9, 1, 2}, // 11111111 0ddddddd dddddddd dddddddd
|
||||||
{ABSOLUTE_TANK_1_PRESSURE, 1, 2}, // 11111111 10dddddd dddddddd dddddddd
|
{ABSOLUTE_TANK_1_PRESSURE, 10, 1, 2}, // 11111111 10dddddd dddddddd dddddddd
|
||||||
{ABSOLUTE_TEMPERATURE, 1, 2}, // 11111111 110ddddd dddddddd dddddddd
|
{ABSOLUTE_TEMPERATURE, 11, 1, 2}, // 11111111 110ddddd dddddddd dddddddd
|
||||||
{ABSOLUTE_RBT, 1, 1}, // 11111111 1110dddd dddddddd
|
{ABSOLUTE_RBT, 12, 1, 1}, // 11111111 1110dddd dddddddd
|
||||||
};
|
};
|
||||||
|
|
||||||
static const
|
static const
|
||||||
uwatec_smart_sample_info_t uwatec_smart_tec_table [] = {
|
uwatec_smart_sample_info_t uwatec_smart_tec_table [] = {
|
||||||
{DELTA_TANK_PRESSURE_DEPTH, 0, 1}, // 0ddddddd dddddddd
|
{DELTA_TANK_PRESSURE_DEPTH, 1, 0, 1}, // 0ddddddd dddddddd
|
||||||
{DELTA_RBT, 0, 0}, // 10dddddd
|
{DELTA_RBT, 2, 0, 0}, // 10dddddd
|
||||||
{DELTA_TEMPERATURE, 0, 0}, // 110ddddd
|
{DELTA_TEMPERATURE, 3, 0, 0}, // 110ddddd
|
||||||
{DELTA_TANK_PRESSURE, 0, 1}, // 1110dddd dddddddd
|
{DELTA_TANK_PRESSURE, 4, 0, 1}, // 1110dddd dddddddd
|
||||||
{DELTA_DEPTH, 0, 1}, // 11110ddd dddddddd
|
{DELTA_DEPTH, 5, 0, 1}, // 11110ddd dddddddd
|
||||||
{DELTA_TEMPERATURE, 0, 1}, // 111110dd dddddddd
|
{DELTA_TEMPERATURE, 6, 0, 1}, // 111110dd dddddddd
|
||||||
{ALARMS, 1, 1}, // 1111110d dddddddd
|
{ALARMS, 7, 1, 1}, // 1111110d dddddddd
|
||||||
{TIME, 1, 1}, // 11111110 dddddddd
|
{TIME, 8, 0, 1}, // 11111110 dddddddd
|
||||||
{ABSOLUTE_DEPTH, 1, 2}, // 11111111 0ddddddd dddddddd dddddddd
|
{ABSOLUTE_DEPTH, 9, 1, 2}, // 11111111 0ddddddd dddddddd dddddddd
|
||||||
{ABSOLUTE_TEMPERATURE, 1, 2}, // 11111111 10dddddd dddddddd dddddddd
|
{ABSOLUTE_TEMPERATURE, 10, 1, 2}, // 11111111 10dddddd dddddddd dddddddd
|
||||||
{ABSOLUTE_TANK_1_PRESSURE, 1, 2}, // 11111111 110ddddd dddddddd dddddddd
|
{ABSOLUTE_TANK_1_PRESSURE, 11, 1, 2}, // 11111111 110ddddd dddddddd dddddddd
|
||||||
{ABSOLUTE_TANK_2_PRESSURE, 1, 2}, // 11111111 1110dddd dddddddd dddddddd
|
{ABSOLUTE_TANK_2_PRESSURE, 12, 1, 2}, // 11111111 1110dddd dddddddd dddddddd
|
||||||
{ABSOLUTE_TANK_D_PRESSURE, 1, 2}, // 11111111 11110ddd dddddddd dddddddd
|
{ABSOLUTE_TANK_D_PRESSURE, 13, 1, 2}, // 11111111 11110ddd dddddddd dddddddd
|
||||||
{ABSOLUTE_RBT, 1, 1}, // 11111111 111110dd dddddddd
|
{ABSOLUTE_RBT, 14, 1, 1}, // 11111111 111110dd dddddddd
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -293,28 +296,33 @@ uwatec_smart_parser_samples_foreach (parser_t *abstract, sample_callback_t callb
|
|||||||
assert (id < entries);
|
assert (id < entries);
|
||||||
|
|
||||||
// Skip the processed type bytes.
|
// Skip the processed type bytes.
|
||||||
offset += id / NBITS;
|
offset += table[id].ntypebits / NBITS;
|
||||||
|
|
||||||
// Process the remaining data bytes.
|
// Process the remaining data bits.
|
||||||
unsigned int n = id % NBITS;
|
unsigned int nbits = 0;
|
||||||
unsigned int nbits = NBITS - n - 1;
|
unsigned int value = 0;
|
||||||
unsigned int value = data[offset] & (0xFF >> n);
|
unsigned int n = table[id].ntypebits % NBITS;
|
||||||
if (table[id].ignoretype) {
|
if (n > 0) {
|
||||||
// Ignore any data bits that are stored in
|
nbits = NBITS - n;
|
||||||
// the last type byte for certain samples.
|
value = data[offset] & (0xFF >> n);
|
||||||
nbits = 0;
|
if (table[id].ignoretype) {
|
||||||
value = 0;
|
// Ignore any data bits that are stored in
|
||||||
|
// the last type byte for certain samples.
|
||||||
|
nbits = 0;
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
offset++;
|
||||||
}
|
}
|
||||||
assert (offset + table[id].extrabytes + 1 <= size);
|
|
||||||
|
// Process the extra data bytes.
|
||||||
|
assert (offset + table[id].extrabytes <= size);
|
||||||
for (unsigned int i = 0; i < table[id].extrabytes; ++i) {
|
for (unsigned int i = 0; i < table[id].extrabytes; ++i) {
|
||||||
nbits += NBITS;
|
nbits += NBITS;
|
||||||
value <<= NBITS;
|
value <<= NBITS;
|
||||||
value += data[offset + i + 1];
|
value += data[offset];
|
||||||
|
offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip the processed data bytes.
|
|
||||||
offset += table[id].extrabytes + 1;
|
|
||||||
|
|
||||||
// Fix the sign bit.
|
// Fix the sign bit.
|
||||||
signed int svalue = uwatec_smart_fixsignbit (value, nbits);
|
signed int svalue = uwatec_smart_fixsignbit (value, nbits);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user