Suunto EON Steel: support downloading of core dive profile data

Basic Suunto EON Steel downloading copied from my test application.
This parses all the core dive data, including sample data (time, depth,
cylinder pressure, deco information etc).

The deco information returns ceiling and TTS rather than ceiling and
"time at ceiling", because that's what the dive computer has, and I
don't see any other way to return the information.

We don't report any events yet, though.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Follow the libdivecomputer naming conventions.

All entry point functions (e.g. public functions or functions called
through the vtable) use the backend name as the prefix. The same applies
to the main device and parser structures.
Fix a redefinition warning for the ERROR macro.

See commit 113d2e4706698f7086e5499282ec958aa2de044f for more details.
Use the libusb autodetach functionality only if available.

The libusb autodetach kernel driver functionality is only available in
recent versions.
Don't terminate the application on error.

Terminating the application on error, by calling exit, is not
appropriate in a library. An error code should be returned instead.
Remove the custom logging functions.

There is no need for custom logging functions, because libdivecomputer
already has an extensive logging infrastructure, featuring conditional
compilation, multiple loglevels, customization by the application, etc.
Replace void pointers with unsigned char pointers.

Since we're dealing with byte arrays, there's no need to use void
pointers. Using unsigned char pointers also eliminates some compiler
warnings for pointer arithmetic on void pointers.
Replace zero length strings with NULL pointers.

This avoids some compiler warnings. The type of the string literal is a
const char pointer, while the send_cmd() function expects an unsigned
char pointer.
Replace string literals with arrays.

This avoids some more compiler warnings regarding incompatible pointer
types (e.g. signed vs unsigned char pointers). Arrays have the
additional advantage of the sizeof operator. This eliminates an
unnecessary strlen() call, and the strcpy() call can be replaced with
memcpy().
Add explicit casts for the msvc C++ compiler.
Use the non-standard _snprintf() function for msvc.
Fix a NULL pointer dereference.
Fix a few memory leaks.
Fix another memory leak.

The array with type descriptors is populated with dynamically allocated
strings, but they are never freed anywhere. To be able to free those
strings easily, they are now initialized with NULL pointers instead of
zero length strings.
Add a default case to the switch statement.

This is only the silence the "enumeration value not handled in switch"
compiler warning. There is already a check earlier on to take care of
unsupported fields, but the default case is a good practice anyway.
Merge branch 'eonsteel'