* [PATCH bluez] add get_le/get_be helpers @ 2011-10-24 9:20 Emeltchenko Andrei 2011-10-24 10:13 ` Vinicius Gomes 2011-10-25 8:52 ` Johan Hedberg 0 siblings, 2 replies; 9+ messages in thread From: Emeltchenko Andrei @ 2011-10-24 9:20 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Helpers to access LE / BE values. In bluetooth there is a mixture of LE / BE network byte order. --- lib/bluetooth.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 64 insertions(+), 0 deletions(-) diff --git a/lib/bluetooth.h b/lib/bluetooth.h index b0680e2..5bd4f03 100644 --- a/lib/bluetooth.h +++ b/lib/bluetooth.h @@ -125,6 +125,70 @@ do { \ __p->__v = (val); \ } while(0) +#if __BYTE_ORDER == __LITTLE_ENDIAN +static inline uint64_t bt_get_le64(void *ptr) +{ + return bt_get_unaligned((uint64_t *) ptr); +} + +static inline uint64_t bt_get_be64(void *ptr) +{ + return bswap_64(bt_get_unaligned((uint64_t *) ptr)); +} + +static inline uint32_t bt_get_le32(void *ptr) +{ + return bt_get_unaligned((uint32_t *) ptr); +} + +static inline uint32_t bt_get_be32(void *ptr) +{ + return bswap_32(bt_get_unaligned((uint32_t *) ptr)); +} + +static inline uint16_t bt_get_le16(void *ptr) +{ + return bt_get_unaligned((uint16_t *) ptr); +} + +static inline uint16_t bt_get_be16(void *ptr) +{ + return bswap_16(bt_get_unaligned((uint16_t *) ptr)); +} +#elif __BYTE_ORDER == __BIG_ENDIAN +static inline uint64_t bt_get_le64(void *ptr) +{ + return bswap_64(bt_get_unaligned((uint64_t *) ptr)); +} + +static inline uint64_t bt_get_be64(void *ptr) +{ + return bt_get_unaligned((uint64_t *) ptr); +} + +static inline uint32_t bt_get_le32(void *ptr) +{ + return bswap_32(bt_get_unaligned((uint32_t *) ptr)); +} + +static inline uint32_t bt_get_be32(void *ptr) +{ + return bt_get_unaligned((uint32_t *) ptr); +} + +static inline uint16_t bt_get_le16(void *ptr) +{ + return bswap_16(bt_get_unaligned((uint16_t *) ptr)); +} + +static inline uint16_t bt_get_be16(void *ptr) +{ + return bt_get_unaligned((uint16_t *) ptr); +} +#else +#error "Unknown byte order" +#endif + /* BD Address */ typedef struct { uint8_t b[6]; -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH bluez] add get_le/get_be helpers 2011-10-24 9:20 [PATCH bluez] add get_le/get_be helpers Emeltchenko Andrei @ 2011-10-24 10:13 ` Vinicius Gomes 2011-10-24 10:26 ` Andrei Emeltchenko ` (2 more replies) 2011-10-25 8:52 ` Johan Hedberg 1 sibling, 3 replies; 9+ messages in thread From: Vinicius Gomes @ 2011-10-24 10:13 UTC (permalink / raw) To: Emeltchenko Andrei; +Cc: linux-bluetooth Hi Andrei, On Mon, Oct 24, 2011 at 11:20 AM, Emeltchenko Andrei <Andrei.Emeltchenko.news@gmail.com> wrote: > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > Helpers to access LE / BE values. In bluetooth there is a mixture > of LE / BE network byte order. > --- Sorry if this comes too late, but here's an idea: How about changing the name of the functions to something a little more high level, for example: in attrib/att.h we have att_{get,put}_u16() that uses the byte order defined in the ATT spec (little endian). So my suggestion is to have bt_{get,put}_u*() and sdp_{get,put}_u* functions (perhaps also no_{get,put}_u* for cases when we use the host byte order). The bt_ functions will be used for everything that uses the Bluetooth byte order and the sdp_ ones for SDP, which is the only case of Big Endian defined by Bluetooth, correct me if I am wrong. What do you think? > lib/bluetooth.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 64 insertions(+), 0 deletions(-) > > diff --git a/lib/bluetooth.h b/lib/bluetooth.h > index b0680e2..5bd4f03 100644 > --- a/lib/bluetooth.h > +++ b/lib/bluetooth.h > @@ -125,6 +125,70 @@ do { \ > __p->__v = (val); \ > } while(0) > > +#if __BYTE_ORDER == __LITTLE_ENDIAN > +static inline uint64_t bt_get_le64(void *ptr) > +{ > + return bt_get_unaligned((uint64_t *) ptr); > +} > + > +static inline uint64_t bt_get_be64(void *ptr) > +{ > + return bswap_64(bt_get_unaligned((uint64_t *) ptr)); > +} > + > +static inline uint32_t bt_get_le32(void *ptr) > +{ > + return bt_get_unaligned((uint32_t *) ptr); > +} > + > +static inline uint32_t bt_get_be32(void *ptr) > +{ > + return bswap_32(bt_get_unaligned((uint32_t *) ptr)); > +} > + > +static inline uint16_t bt_get_le16(void *ptr) > +{ > + return bt_get_unaligned((uint16_t *) ptr); > +} > + > +static inline uint16_t bt_get_be16(void *ptr) > +{ > + return bswap_16(bt_get_unaligned((uint16_t *) ptr)); > +} > +#elif __BYTE_ORDER == __BIG_ENDIAN > +static inline uint64_t bt_get_le64(void *ptr) > +{ > + return bswap_64(bt_get_unaligned((uint64_t *) ptr)); > +} > + > +static inline uint64_t bt_get_be64(void *ptr) > +{ > + return bt_get_unaligned((uint64_t *) ptr); > +} > + > +static inline uint32_t bt_get_le32(void *ptr) > +{ > + return bswap_32(bt_get_unaligned((uint32_t *) ptr)); > +} > + > +static inline uint32_t bt_get_be32(void *ptr) > +{ > + return bt_get_unaligned((uint32_t *) ptr); > +} > + > +static inline uint16_t bt_get_le16(void *ptr) > +{ > + return bswap_16(bt_get_unaligned((uint16_t *) ptr)); > +} > + > +static inline uint16_t bt_get_be16(void *ptr) > +{ > + return bt_get_unaligned((uint16_t *) ptr); > +} > +#else > +#error "Unknown byte order" > +#endif > + > /* BD Address */ > typedef struct { > uint8_t b[6]; > -- > 1.7.4.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Cheers, -- Vinicius ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bluez] add get_le/get_be helpers 2011-10-24 10:13 ` Vinicius Gomes @ 2011-10-24 10:26 ` Andrei Emeltchenko 2011-10-24 10:27 ` Szymon Janc 2011-10-24 11:50 ` Marcel Holtmann 2 siblings, 0 replies; 9+ messages in thread From: Andrei Emeltchenko @ 2011-10-24 10:26 UTC (permalink / raw) To: Vinicius Gomes; +Cc: linux-bluetooth Hi Vinicius, On Mon, Oct 24, 2011 at 12:13:43PM +0200, Vinicius Gomes wrote: > Hi Andrei, > > On Mon, Oct 24, 2011 at 11:20 AM, Emeltchenko Andrei > <Andrei.Emeltchenko.news@gmail.com> wrote: > > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > > > Helpers to access LE / BE values. In bluetooth there is a mixture > > of LE / BE network byte order. > > --- > > Sorry if this comes too late, but here's an idea: > > How about changing the name of the functions to something a little > more high level, for example: in attrib/att.h we have > att_{get,put}_u16() that uses the byte order defined in the ATT spec > (little endian). > > So my suggestion is to have bt_{get,put}_u*() and sdp_{get,put}_u* > functions (perhaps also no_{get,put}_u* for cases when we use the host > byte order). The bt_ functions will be used for everything that uses > the Bluetooth byte order and the sdp_ ones for SDP, which is the only maybe we can define bt_{get,put}_u*() as bt_{get,put}_le*() and be with SDP? Best regards Andrei Emeltchenko > case of Big Endian defined by Bluetooth, correct me if I am wrong. > > What do you think? > > > lib/bluetooth.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > 1 files changed, 64 insertions(+), 0 deletions(-) > > > > diff --git a/lib/bluetooth.h b/lib/bluetooth.h > > index b0680e2..5bd4f03 100644 > > --- a/lib/bluetooth.h > > +++ b/lib/bluetooth.h > > @@ -125,6 +125,70 @@ do { \ > > __p->__v = (val); \ > > } while(0) > > > > +#if __BYTE_ORDER == __LITTLE_ENDIAN > > +static inline uint64_t bt_get_le64(void *ptr) > > +{ > > + return bt_get_unaligned((uint64_t *) ptr); > > +} > > + > > +static inline uint64_t bt_get_be64(void *ptr) > > +{ > > + return bswap_64(bt_get_unaligned((uint64_t *) ptr)); > > +} > > + > > +static inline uint32_t bt_get_le32(void *ptr) > > +{ > > + return bt_get_unaligned((uint32_t *) ptr); > > +} > > + > > +static inline uint32_t bt_get_be32(void *ptr) > > +{ > > + return bswap_32(bt_get_unaligned((uint32_t *) ptr)); > > +} > > + > > +static inline uint16_t bt_get_le16(void *ptr) > > +{ > > + return bt_get_unaligned((uint16_t *) ptr); > > +} > > + > > +static inline uint16_t bt_get_be16(void *ptr) > > +{ > > + return bswap_16(bt_get_unaligned((uint16_t *) ptr)); > > +} > > +#elif __BYTE_ORDER == __BIG_ENDIAN > > +static inline uint64_t bt_get_le64(void *ptr) > > +{ > > + return bswap_64(bt_get_unaligned((uint64_t *) ptr)); > > +} > > + > > +static inline uint64_t bt_get_be64(void *ptr) > > +{ > > + return bt_get_unaligned((uint64_t *) ptr); > > +} > > + > > +static inline uint32_t bt_get_le32(void *ptr) > > +{ > > + return bswap_32(bt_get_unaligned((uint32_t *) ptr)); > > +} > > + > > +static inline uint32_t bt_get_be32(void *ptr) > > +{ > > + return bt_get_unaligned((uint32_t *) ptr); > > +} > > + > > +static inline uint16_t bt_get_le16(void *ptr) > > +{ > > + return bswap_16(bt_get_unaligned((uint16_t *) ptr)); > > +} > > + > > +static inline uint16_t bt_get_be16(void *ptr) > > +{ > > + return bt_get_unaligned((uint16_t *) ptr); > > +} > > +#else > > +#error "Unknown byte order" > > +#endif > > + > > /* BD Address */ > > typedef struct { > > uint8_t b[6]; > > -- > > 1.7.4.1 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > > > Cheers, > -- > Vinicius ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bluez] add get_le/get_be helpers 2011-10-24 10:13 ` Vinicius Gomes 2011-10-24 10:26 ` Andrei Emeltchenko @ 2011-10-24 10:27 ` Szymon Janc 2011-10-24 11:50 ` Marcel Holtmann 2 siblings, 0 replies; 9+ messages in thread From: Szymon Janc @ 2011-10-24 10:27 UTC (permalink / raw) To: Vinicius Gomes; +Cc: Emeltchenko Andrei, linux-bluetooth@vger.kernel.org Hi, > Sorry if this comes too late, but here's an idea: > > How about changing the name of the functions to something a little > more high level, for example: in attrib/att.h we have > att_{get,put}_u16() that uses the byte order defined in the ATT spec > (little endian). > > So my suggestion is to have bt_{get,put}_u*() and sdp_{get,put}_u* > functions (perhaps also no_{get,put}_u* for cases when we use the host > byte order). The bt_ functions will be used for everything that uses > the Bluetooth byte order and the sdp_ ones for SDP, which is the only > case of Big Endian defined by Bluetooth, correct me if I am wrong. > > What do you think? Some profiles e.g. AVRCP and SAP use big endian... -- BR Szymon ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bluez] add get_le/get_be helpers 2011-10-24 10:13 ` Vinicius Gomes 2011-10-24 10:26 ` Andrei Emeltchenko 2011-10-24 10:27 ` Szymon Janc @ 2011-10-24 11:50 ` Marcel Holtmann 2011-10-24 12:06 ` Vinicius Gomes 2 siblings, 1 reply; 9+ messages in thread From: Marcel Holtmann @ 2011-10-24 11:50 UTC (permalink / raw) To: Vinicius Gomes; +Cc: Emeltchenko Andrei, linux-bluetooth Hi Vinicius, > Sorry if this comes too late, but here's an idea: > > How about changing the name of the functions to something a little > more high level, for example: in attrib/att.h we have > att_{get,put}_u16() that uses the byte order defined in the ATT spec > (little endian). > > So my suggestion is to have bt_{get,put}_u*() and sdp_{get,put}_u* > functions (perhaps also no_{get,put}_u* for cases when we use the host > byte order). The bt_ functions will be used for everything that uses > the Bluetooth byte order and the sdp_ ones for SDP, which is the only > case of Big Endian defined by Bluetooth, correct me if I am wrong. lets not try to be too smart. We want the code clearly identify what endian is expected. Same as the kernel handles this. Regards Marcel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bluez] add get_le/get_be helpers 2011-10-24 11:50 ` Marcel Holtmann @ 2011-10-24 12:06 ` Vinicius Gomes 0 siblings, 0 replies; 9+ messages in thread From: Vinicius Gomes @ 2011-10-24 12:06 UTC (permalink / raw) To: Marcel Holtmann; +Cc: Emeltchenko Andrei, linux-bluetooth Hi Marcel, On Mon, Oct 24, 2011 at 1:50 PM, Marcel Holtmann <marcel@holtmann.org> wrote: > Hi Vinicius, > >> Sorry if this comes too late, but here's an idea: >> >> How about changing the name of the functions to something a little >> more high level, for example: in attrib/att.h we have >> att_{get,put}_u16() that uses the byte order defined in the ATT spec >> (little endian). >> >> So my suggestion is to have bt_{get,put}_u*() and sdp_{get,put}_u* >> functions (perhaps also no_{get,put}_u* for cases when we use the host >> byte order). The bt_ functions will be used for everything that uses >> the Bluetooth byte order and the sdp_ ones for SDP, which is the only >> case of Big Endian defined by Bluetooth, correct me if I am wrong. > > lets not try to be too smart. We want the code clearly identify what > endian is expected. Same as the kernel handles this. > After reading Szymon comments I came to the same conclusion. This more explicit approach makes more sense. > Regards > > Marcel > > > Cheers, -- Vinicius ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bluez] add get_le/get_be helpers 2011-10-24 9:20 [PATCH bluez] add get_le/get_be helpers Emeltchenko Andrei 2011-10-24 10:13 ` Vinicius Gomes @ 2011-10-25 8:52 ` Johan Hedberg 2011-10-25 9:34 ` Lucas De Marchi 1 sibling, 1 reply; 9+ messages in thread From: Johan Hedberg @ 2011-10-25 8:52 UTC (permalink / raw) To: Emeltchenko Andrei; +Cc: linux-bluetooth Hi Andrei, On Mon, Oct 24, 2011, Emeltchenko Andrei wrote: > Helpers to access LE / BE values. In bluetooth there is a mixture > of LE / BE network byte order. > --- > lib/bluetooth.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 64 insertions(+), 0 deletions(-) Applied. Thanks. Please start your commit messages with a capital letter in the future so I don't have to keep fixing them manually. Johan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bluez] add get_le/get_be helpers 2011-10-25 8:52 ` Johan Hedberg @ 2011-10-25 9:34 ` Lucas De Marchi 2011-10-25 9:22 ` Johan Hedberg 0 siblings, 1 reply; 9+ messages in thread From: Lucas De Marchi @ 2011-10-25 9:34 UTC (permalink / raw) To: Emeltchenko Andrei, linux-bluetooth Hi Johan, On Tue, Oct 25, 2011 at 6:52 AM, Johan Hedberg <johan.hedberg@gmail.com> wrote: > Hi Andrei, > > On Mon, Oct 24, 2011, Emeltchenko Andrei wrote: >> Helpers to access LE / BE values. In bluetooth there is a mixture >> of LE / BE network byte order. >> --- >> lib/bluetooth.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 64 insertions(+), 0 deletions(-) > > Applied. Thanks. Should we convert code to use these new functions? Lucas De Marchi ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH bluez] add get_le/get_be helpers 2011-10-25 9:34 ` Lucas De Marchi @ 2011-10-25 9:22 ` Johan Hedberg 0 siblings, 0 replies; 9+ messages in thread From: Johan Hedberg @ 2011-10-25 9:22 UTC (permalink / raw) To: Lucas De Marchi; +Cc: Emeltchenko Andrei, linux-bluetooth Hi Lucas, On Tue, Oct 25, 2011, Lucas De Marchi wrote: > On Tue, Oct 25, 2011 at 6:52 AM, Johan Hedberg <johan.hedberg@gmail.com> wrote: > > Hi Andrei, > > > > On Mon, Oct 24, 2011, Emeltchenko Andrei wrote: > >> Helpers to access LE / BE values. In bluetooth there is a mixture > >> of LE / BE network byte order. > >> --- > >> lib/bluetooth.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > >> 1 files changed, 64 insertions(+), 0 deletions(-) > > > > Applied. Thanks. > > Should we convert code to use these new functions? Yes, please. Johan ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-10-25 9:34 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-10-24 9:20 [PATCH bluez] add get_le/get_be helpers Emeltchenko Andrei 2011-10-24 10:13 ` Vinicius Gomes 2011-10-24 10:26 ` Andrei Emeltchenko 2011-10-24 10:27 ` Szymon Janc 2011-10-24 11:50 ` Marcel Holtmann 2011-10-24 12:06 ` Vinicius Gomes 2011-10-25 8:52 ` Johan Hedberg 2011-10-25 9:34 ` Lucas De Marchi 2011-10-25 9:22 ` Johan Hedberg
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.