Fix the HelO2 fingerprint, datetime and sample interval offsets.

This commit is contained in:
Jef Driesen 2010-02-23 13:43:57 +00:00
parent b295f71536
commit 10edb943ff
2 changed files with 18 additions and 5 deletions

View File

@ -377,10 +377,14 @@ suunto_common2_device_foreach (device_t *abstract, dive_callback_t callback, voi
previous = current; previous = current;
current = prev; current = prev;
if (memcmp (p + FP_OFFSET, device->fingerprint, sizeof (device->fingerprint)) == 0) unsigned int fp_offset = FP_OFFSET;
if (devinfo.model == 0x15)
fp_offset += 6; // HelO2
if (memcmp (p + fp_offset, device->fingerprint, sizeof (device->fingerprint)) == 0)
return DEVICE_STATUS_SUCCESS; return DEVICE_STATUS_SUCCESS;
if (callback && !callback (p + 4, size - 4, p + FP_OFFSET, sizeof (device->fingerprint), userdata)) if (callback && !callback (p + 4, size - 4, p + fp_offset, sizeof (device->fingerprint), userdata))
return DEVICE_STATUS_SUCCESS; return DEVICE_STATUS_SUCCESS;
} }

View File

@ -112,10 +112,16 @@ suunto_d9_parser_set_data (parser_t *abstract, const unsigned char *data, unsign
static parser_status_t static parser_status_t
suunto_d9_parser_get_datetime (parser_t *abstract, dc_datetime_t *datetime) suunto_d9_parser_get_datetime (parser_t *abstract, dc_datetime_t *datetime)
{ {
if (abstract->size < 0x15 - 4 + 7) suunto_d9_parser_t *parser = (suunto_d9_parser_t*) abstract;
unsigned int offset = 0x15 - 4;
if (parser->model == 0x15)
offset += 6; // HelO2
if (abstract->size < offset + 7)
return PARSER_STATUS_ERROR; return PARSER_STATUS_ERROR;
const unsigned char *p = abstract->data + 0x15 - 4; const unsigned char *p = abstract->data + offset;
if (datetime) { if (datetime) {
datetime->hour = p[0]; datetime->hour = p[0];
@ -159,7 +165,10 @@ suunto_d9_parser_samples_foreach (parser_t *abstract, sample_callback_t callback
assert (profile + 5 <= size); assert (profile + 5 <= size);
// Sample recording interval. // Sample recording interval.
unsigned int interval_sample = data[0x1C - SKIP]; unsigned int interval_sample_offset = 0x1C - SKIP;
if (parser->model == 0x15)
interval_sample_offset += 6; // HelO2
unsigned int interval_sample = data[interval_sample_offset];
assert (interval_sample > 0); assert (interval_sample > 0);
// Temperature recording interval. // Temperature recording interval.