On 2014-05-30 09:52, Joshua Joseph wrote:
Please check and see if I am on the right track.

I quickly checked the patched, and noticed one libdivecomputer related mistake: you shouldn't use the vendor or product strings to check the device type. There are much better ways to do this. The strings are mainly intended for display in the user interface.

0003-Read-basic-details-from-dive-computer.patch:

+ rc = dc_device_open(&data->device, data->context, data->descriptor, data->devname);
+       if (rc == DC_STATUS_SUCCESS) {
+               if (vendor.trimmed() == "Heinrichs Weikamp") {
+                       unsigned char hw_data[10];
+                       hw_frog_device_version(data->device, hw_data, 10);


Here, you check for "Heinrichs Weikamp", and then call the hw_frog_device_version function. As the name indicates, this function does support the HW Frog only. But there are several other devices made by Heinrichs Weikamp (e.g. OSTC2 and OSTC3), which do not support this function!

0004-Create-class-to-write-settings-to-dive-computer.patch:

+               if (product.trimmed() == "OSTC 3") {
+                       if (m_settingName == "Name") {
+                               supported = true;
+ result = hw_ostc3_device_customtext(data->device, m_settingValue.toByteArray().data());
+                       }
+               }


If a future model remains backwards compatible with the ostc3 protocol, but changes its name to something different than "OSTC 3", this code will not be able to support this new model!

The solution to both of these problems, is to check the family type instead, using the dc_device_get_type or dc_descriptor_get_type function:

if (dc_device_get_type(data->device) == DC_FAMILY_HW_FROG) {
   ...
   hw_frog_device_version(data->device, hw_data, 10);
   ...
}

Jef
_______________________________________________
subsurface mailing list
[email protected]
http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to