Mares Smart Apnea

Giorgio Marzano marzano.giorgio at gmail.com
Wed Sep 9 05:04:41 PDT 2015


Hi, Jef

I have compiled this sniplet:

main (int argc, char *argv[])
{
int i;
const mares_iconhd_model_t models[] = {
{"Matrix",      MATRIX},
// {"Smart Apnea", SMARTAPNEA},
{"Smart",       SMART},
{"Icon HD",     ICONHD},
{"Icon AIR",    ICONHDNET},
{"Puck Pro",    PUCKPRO},
{"Nemo Wide 2", NEMOWIDE2},
{"Puck 2",      PUCK2},
};

// Check the product name in the version packet against the list
// with valid names, and return the corresponding model number.
unsigned int model = 0;
for ( i = 0; i < 7; ++i) {
printf ("i: %d, sizeof: %d, strlen:  %d\n",i,sizeof(models[i].name),strlen
(models[i].name));

}
}

and the corresponding ouput is:


giorgio at giorgio-laptop:~$ ./prova i: 0, sizeof: 17, strlen: 6 i: 1, sizeof:
17, strlen: 5 i: 2, sizeof: 17, strlen: 7 i: 3, sizeof: 17, strlen: 8 i: 4,
sizeof: 17, strlen: 8 i: 5, sizeof: 17, strlen: 11 i: 6, sizeof: 17,
strlen: 6


So it seems to me that either we use strlen or we use strcmp

G


2015-09-09 13:41 GMT+02:00 Jef Driesen <jef at libdivecomputer.org>:

> On 2015-09-04 12:25, Giorgio Marzano wrote:
>
>> Right now, I noticed a bug in the mares_iconhd_get_model function, line
>> 120
>> of mares_iconhd.c, where sizeof should be actually strlen.
>>
>> if (memcmp (device->version + 0x46, models[i].name, /*sizeof*/ strlen
>> (models[i].name) - 1) == 0) {
>>
>
> This is not a bug. The name field is a 16 byte array, not a string. The
> initialization with a sting literal is convenient. The remainder of the
> array will automatically get padded with zero bytes, which is exactly what
> we need.
>
> The correct fix is to add a new entry containing "Mares Smart". Then, the
> next question is: what's the correct model number? According to the model
> number in the memory dump (e.g. byte at offset 0), it's 0x10 or SMART:
>
>                 {"Smart",       SMART},
> +               {"Smart Apnea", SMART},
>                 {"Icon HD",     ICONHD},
>
> But then how do we distinguish the normal smart from the apnea variant?
> That will be important, because both appear to use a different data format.
> The strange thing here is that the normal smart already had a freedive
> mode. The main difference is that we now not only get a summary of each
> freedive in the session, but also a detailed profile.
>
> I wonder if there is some kind of format indicator in the header that we
> can use to distinguish between dives with the enhanced apnea format and the
> more limited normal format.
>
> Jef
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://libdivecomputer.org/pipermail/devel/attachments/20150909/b2c779a7/attachment.html>


More information about the devel mailing list