35 Commits

Author SHA1 Message Date
Jef Driesen
84563c6303 Refactor the internal serial and IrDA api.
The low level serial and IrDA functions are modified to:

 - Use the libdivecomputer namespace prefix.

 - Return a more detailed status code instead of the zero on success and
   negative on error return value. This will allow to return more
   fine-grained error codes.

 - The read and write functions have an additional output parameter to
   return the actual number of bytes transferred. Since these functions
   are not atomic, some data might still be transferred successfully if
   an error occurs.

The dive computer backends are updated to use the new api.
2016-05-10 11:34:57 +02:00
Jef Driesen
ff29d218bb Use helper functions to allocate and free objects.
Both the allocation and initialization of the object data structure is
now moved to a single function. The corresponding deallocation function
is intended to free objects that have been allocated, but are not fully
initialized yet. The public cleanup function shouldn't be used in such
case, because it may try to release resources that haven't been
initialized yet.
2016-01-05 20:40:21 +01:00
Jef Driesen
a155fb717b Add extra debug information to the error messages.
With the extra debug information it's easier to investigate the
underlying problem, without needing a debugger.
2015-12-06 17:40:02 +01:00
Jef Driesen
c95ab19e6a Use symbolic constants for the dive mode. 2014-11-07 22:04:16 +01:00
Jef Driesen
ed2b9d34d5 Fix the dive mode detection for the Mares Nemo Air.
For the Nemo Air, a dive mode with the value 2 indicates gauge mode
instead of freedive mode. With this change, all models from the puck
family now use the same values.
2014-08-03 15:49:16 +02:00
Jef Driesen
5826257a79 Use symbolic constants for the model numbers. 2014-08-03 15:03:08 +02:00
Jef Driesen
007479fc92 Rename the backend structure to vtable.
The term "backend" can be confusing because it can refer to both the
virtual function table and the device/parser backends. The use of the
term "vtable" avoids this.
2013-04-16 12:18:53 +02:00
Jef Driesen
e5fde4c57d Merge branch 'release-0.2'
Integrate the bugfixes from the stable branch.
2013-02-04 19:14:24 +01:00
Jef Driesen
1e4d051b1e Move the bin/hex conversion functions to a common file. 2013-02-04 16:51:30 +01:00
Jef Driesen
633e8423dc Add a small delay before retrying a packet.
If the first attempt fails, that might indicate the device isn't ready
yet to service requests. In that case immediately retrying again isn't
the right solution. Adding a small delay seems to increase the success
rate, so it's a good idea anyway, regardless of the underlying reason.
2012-12-23 12:48:49 +01:00
Jef Driesen
550e37d0b5 Remove the page, packet and memory size macros from the public api.
These macros are used internally and don't need to be exposed. In some
cases, the actual values are not even constant, but dependant on the
model and/or the firmware version.
2012-12-05 16:07:32 +01:00
Jef Driesen
cd31ff9dff Properly store the context pointer internally.
I forgot to update the device and parser initialization functions to
store the context pointer into the objects. As a result, the internal
context pointers were always NULL.
2012-08-28 08:44:47 +02:00
Jef Driesen
53e9d72a40 Integrate the context object in the library.
The public api is changed to require a context object for all
operations. Because other library objects store the context pointer
internally, only the constructor functions need an explicit context
object as a parameter.
2012-08-27 23:08:38 +02:00
Jef Driesen
3df5cb09d7 Require a serial handle for the sleep function. 2012-08-27 23:02:44 +02:00
Jef Driesen
2a72da59ad Don't ignore errors in the ascii/binary conversions.
Instead of silently ignoring errors and logging a warning, the
conversion functions now return an error code that can be checked by the
caller.
2012-08-27 23:02:44 +02:00
Jef Driesen
c821d40144 Introduce a namespace prefix for the high-level public api.
Adding the "dc_" namespace prefix (which is of course an abbreviation
for libdivecomputer) should avoid conflicts with other libraries. For
the time being, only the high-level device and parser layers are
changed.
2012-06-21 21:42:37 +02:00
Jef Driesen
9136a52835 Use common status codes for the device and parser layers. 2012-06-21 21:42:34 +02:00
Jef Driesen
e65025b501 Separate private and public headers.
The public header files are moved to a new subdirectory, to separate
the definition of the public interface from the actual implementation.
Using an identical directory layout as the final installation has the
advantage that the example code can be build outside the project tree
without any modifications to the #include statements.
2012-06-21 21:39:24 +02:00
Jef Driesen
bb4a498302 Fix the freedive mode detection for the Mares Puck Air. 2012-04-10 20:53:38 +02:00
Khalid El Fathi
3882827736 Spelling correction. 2012-04-05 20:21:23 +02:00
Jef Driesen
d4b94cb77c Improve the communication with Darwin Air devices.
We received a report of a Darwin Air device which has a very high error
rate. The majority of the echo packets is incorrect, but since this
doesn't seem to have any effect on the actual data packet, we can just
ignore this error. If there happens to be a more serious error, it will
be detect in the data packet.

Sometimes there were also a some garbage bytes received at startup.
Adding a small delay seems to fix this.
2012-03-05 21:20:07 +01:00
Jef Driesen
2abd5164f4 Add a delay between sending the commands.
When trying to send the commands as fast as possible, without any delay,
the failure rate is very high. Almost every single packet fails with a
timeout at first. Retrying the packet works, but those many timeouts
make the download extremely slow. Adding a small delay avoids the much
more expensive timeout and speeds up the transfer significantly.
2012-01-02 08:01:08 +01:00
Jef Driesen
5ef0398c42 Add support for the Dacor Darwin Air. 2011-11-11 11:13:03 +01:00
Jef Driesen
474336a587 Move the low-level communication to the common layer. 2011-11-11 10:42:39 +01:00
Jef Driesen
5410378849 Remove the common device structure for the Mares Nemo.
The common device structure was used only for sharing the fingerprint
and layout descriptor, but the nemo backend doesn't even store a layout
descriptor, and the fingerprint can equally well be passed around as a
function argument.
2011-11-11 07:09:59 +01:00
Jef Driesen
154f767a9c Convert assertions into error codes. 2011-01-08 23:40:15 +01:00
Jef Driesen
5875941641 Add support for the Mares Puck Air. 2010-07-13 09:09:14 +02:00
Jef Driesen
33051dd294 Use different layouts for the Mares Puck and Nemo Wide. 2010-03-25 09:51:00 +00:00
Jef Driesen
54695f1022 Fix the freedive mode detection for the Mares Nemo Wide. 2010-03-24 08:08:42 +00:00
Jef Driesen
1e7a1b8194 Use the correct freedive mode for each model. 2010-02-26 14:41:25 +00:00
Jef Driesen
9b1a89582c Add support for the Mares Nemo Air data format.
The Nemo Air contains an extra header which can be detected due to the
presence of a three byte marker sequence. The sample size is larger too.
2010-02-26 14:41:10 +00:00
Jef Driesen
cb0a9c6c81 Store the layout descriptor in the device handle. 2010-02-26 14:40:36 +00:00
Jef Driesen
293b45b77c Use the common fingerprint function directly. 2010-02-26 14:40:16 +00:00
Jef Driesen
4b590ba5e2 Pass the fingerprint data to the callback function. 2010-02-04 10:46:42 +00:00
Jef Driesen
cc1a99b9c7 Add a common base class for the Mares backends.
The memory layout of the Mares Puck and Nemo devices is very similar, 
which allows to share the parsing code between the backends.
    
The Mares Puck protocol allows for a more efficient implementation, by 
reading only the data that we really need. But as an intermediate 
solution, reusing the Nemo code is good enough.
2009-10-11 13:51:26 +00:00