Add a device info event for the Uwatec Memomouse.
This commit is contained in:
parent
8e05b91502
commit
b8ff29d15d
@ -500,7 +500,7 @@ uwatec_memomouse_device_foreach (device_t *abstract, dive_callback_t callback, v
|
|||||||
if (rc != DEVICE_STATUS_SUCCESS)
|
if (rc != DEVICE_STATUS_SUCCESS)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
rc = uwatec_memomouse_extract_dives (buffer + 2, length - 3, callback, userdata);
|
rc = uwatec_memomouse_extract_dives (abstract, buffer + 2, length - 3, callback, userdata);
|
||||||
if (rc != DEVICE_STATUS_SUCCESS) {
|
if (rc != DEVICE_STATUS_SUCCESS) {
|
||||||
free (buffer);
|
free (buffer);
|
||||||
return rc;
|
return rc;
|
||||||
@ -513,8 +513,13 @@ uwatec_memomouse_device_foreach (device_t *abstract, dive_callback_t callback, v
|
|||||||
|
|
||||||
|
|
||||||
device_status_t
|
device_status_t
|
||||||
uwatec_memomouse_extract_dives (const unsigned char data[], unsigned int size, dive_callback_t callback, void *userdata)
|
uwatec_memomouse_extract_dives (device_t *abstract, const unsigned char data[], unsigned int size, dive_callback_t callback, void *userdata)
|
||||||
{
|
{
|
||||||
|
uwatec_memomouse_device_t *device = (uwatec_memomouse_device_t*) abstract;
|
||||||
|
|
||||||
|
if (abstract && !device_is_uwatec_memomouse (abstract))
|
||||||
|
return DEVICE_STATUS_TYPE_MISMATCH;
|
||||||
|
|
||||||
// Parse the data stream to find the total number of dives.
|
// Parse the data stream to find the total number of dives.
|
||||||
unsigned int ndives = 0;
|
unsigned int ndives = 0;
|
||||||
unsigned int previous = 0;
|
unsigned int previous = 0;
|
||||||
@ -537,6 +542,19 @@ uwatec_memomouse_extract_dives (const unsigned char data[], unsigned int size, d
|
|||||||
if (current + len + 18 > size)
|
if (current + len + 18 > size)
|
||||||
return DEVICE_STATUS_ERROR;
|
return DEVICE_STATUS_ERROR;
|
||||||
|
|
||||||
|
// A memomouse can store data from several dive computers, but only
|
||||||
|
// the data of the connected dive computer can be transferred.
|
||||||
|
// Therefore, the device info will be the same for all dives, and
|
||||||
|
// only needs to be reported once.
|
||||||
|
if (abstract && ndives == 0) {
|
||||||
|
// Emit a device info event.
|
||||||
|
device_devinfo_t devinfo;
|
||||||
|
devinfo.model = data[current + 3];
|
||||||
|
devinfo.firmware = 0;
|
||||||
|
devinfo.serial = (data[current + 0] << 16) + (data[current + 1] << 8) + data[current + 2];
|
||||||
|
device_event_emit (abstract, DEVICE_EVENT_DEVINFO, &devinfo);
|
||||||
|
}
|
||||||
|
|
||||||
// Move to the next dive.
|
// Move to the next dive.
|
||||||
previous = current;
|
previous = current;
|
||||||
current += len + 18;
|
current += len + 18;
|
||||||
|
|||||||
@ -36,7 +36,7 @@ device_status_t
|
|||||||
uwatec_memomouse_device_set_timestamp (device_t *device, unsigned int timestamp);
|
uwatec_memomouse_device_set_timestamp (device_t *device, unsigned int timestamp);
|
||||||
|
|
||||||
device_status_t
|
device_status_t
|
||||||
uwatec_memomouse_extract_dives (const unsigned char data[], unsigned int size, dive_callback_t callback, void *userdata);
|
uwatec_memomouse_extract_dives (device_t *device, const unsigned char data[], unsigned int size, dive_callback_t callback, void *userdata);
|
||||||
|
|
||||||
parser_status_t
|
parser_status_t
|
||||||
uwatec_memomouse_parser_create (parser_t **parser);
|
uwatec_memomouse_parser_create (parser_t **parser);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user