Re: Correct way to specify custom UUID's

2016-05-19 Thread Christopher Collins
On Thu, May 19, 2016 at 12:57:53PM -0700, James Howarth wrote:
> Hi Chris,
> 
> A)  Thanks for the style tips.  I always appreciate those.
> 
> B)  The device seems to be stuck in trying to register attributes loop,
> similar to what had happened when I didn't have enough attributes
> supported.  Because I have just changed the UUID of the attribute I had
> working before, I don't expect this to be the same problem.

Hmm, I am not sure.  I think I would need to see more code.  Could you
please send the full service definition?

Thanks,
Chris


Re: Correct way to specify custom UUID's

2016-05-19 Thread James Howarth
Hi Chris,

A)  Thanks for the style tips.  I always appreciate those.

B)  The device seems to be stuck in trying to register attributes loop,
similar to what had happened when I didn't have enough attributes
supported.  Because I have just changed the UUID of the attribute I had
working before, I don't expect this to be the same problem.

Cheers
James




On Thu, May 19, 2016 at 12:13 PM, Christopher Collins 
wrote:

> On Thu, May 19, 2016 at 11:57:45AM -0700, James Howarth wrote:
> > I'm not quite sure how to define a custom 128 bit UUID and pass it to
> > .uuid128.
> >
> > I thought it might be a global variable e.g.
> > static uint8_t UUID_BASE[16] = {0x03, 0x04, 0x00, 0x00, 0x2A, 0xAE,
> > 0x4D,
> > 0x26, 0xAD, 0x62, 0x03, 0xE9, 0xA8, 0x63, 0x7E, 0xBD};
> >
> > And then pass this to the service like:
> > .uuid128 = UUID_BASE,
> >
> > However this does not seem to work.  Any suggestions appreciated.
>
> Hi James,
>
> That is the correct way to specify a 128-bit UUID.  What goes wrong when
> you try it?
>
> I also wanted to add a few nitpicks.  None of these are issues that will
> prevent your code from working, but I wanted to mention them in case you
> want to come back to them later and for the benefit of other readers.
>
> 1. You might want to declare the uuid array as const, since it is a
> read-only value.  This will allow the linker to place this data in flash
> rather than RAM (which is generally more scarce).  Unfortunately, this
> requires that you add a (void *) cast to the service definition, since
> the service descriptor's uuid128 pointer is non-const [*].
>
> 2. I recommend against using all-caps for that variable name.
> Generally, all-caps is reserved for macros.  Macros don't obey the usual
> rules of the C language, so it is helpful to have a visual indication
> that something is actually a macro rather than a regular identifier.
>
> Thanks,
> Chris
>
> [*] Nimble and a lot of other Mynewt code has eschewed "const".  I think
> there are some places in the nimble host where using const would
> simplify the API by obviating the need for casts, so I think we should
> change this in the next release.
>


Re: Correct way to specify custom UUID's

2016-05-19 Thread Christopher Collins
On Thu, May 19, 2016 at 11:57:45AM -0700, James Howarth wrote:
> I'm not quite sure how to define a custom 128 bit UUID and pass it to
> .uuid128.
> 
> I thought it might be a global variable e.g.
> static uint8_t UUID_BASE[16] = {0x03, 0x04, 0x00, 0x00, 0x2A, 0xAE,
> 0x4D,
> 0x26, 0xAD, 0x62, 0x03, 0xE9, 0xA8, 0x63, 0x7E, 0xBD};
> 
> And then pass this to the service like:
> .uuid128 = UUID_BASE,
> 
> However this does not seem to work.  Any suggestions appreciated.

Hi James,

That is the correct way to specify a 128-bit UUID.  What goes wrong when
you try it?

I also wanted to add a few nitpicks.  None of these are issues that will
prevent your code from working, but I wanted to mention them in case you
want to come back to them later and for the benefit of other readers.

1. You might want to declare the uuid array as const, since it is a
read-only value.  This will allow the linker to place this data in flash
rather than RAM (which is generally more scarce).  Unfortunately, this
requires that you add a (void *) cast to the service definition, since
the service descriptor's uuid128 pointer is non-const [*].

2. I recommend against using all-caps for that variable name.
Generally, all-caps is reserved for macros.  Macros don't obey the usual
rules of the C language, so it is helpful to have a visual indication
that something is actually a macro rather than a regular identifier.

Thanks,
Chris

[*] Nimble and a lot of other Mynewt code has eschewed "const".  I think
there are some places in the nimble host where using const would
simplify the API by obviating the need for casts, so I think we should
change this in the next release.


Correct way to specify custom UUID's

2016-05-19 Thread James Howarth
Hi,

I am looking for the correct way to specify custom UUID's.

1)  I can see how to define a custom 16 bit UUID e.g.

 #define GATT_SVR_SVC_CUSTOM   0xABBA


2)  I'm not quite sure how to define a custom 128 bit UUID and pass it to
.uuid128.

I thought it might be a global variable e.g.
static uint8_t UUID_BASE[16] = {0x03, 0x04, 0x00, 0x00, 0x2A, 0xAE, 0x4D,
0x26, 0xAD, 0x62, 0x03, 0xE9, 0xA8, 0x63, 0x7E, 0xBD};

And then pass this to the service like:
.uuid128 = UUID_BASE,

However this does not seem to work.  Any suggestions appreciated.

Cheers
James