Re: [RFC 4/7] Add att_get_u128

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi folks,

On Fri, Feb 11, 2011 at 6:37 PM, Claudio Takahasi
<claudio.takahasi@xxxxxxxxxxxxx> wrote:
> Function to convert 128-bits values from little endian to host
> order. Different than SDP, ATT uses little endian format.
> ---
> Âattrib/att.c   Â|  12 ++++++++----
> Âattrib/att.h   Â|  10 ++++++++++
> Âattrib/gatt.c   |  13 ++++++++-----
> Âattrib/gatttool.c | Â Â6 ++++--
> Â4 files changed, 30 insertions(+), 11 deletions(-)
>
> diff --git a/attrib/att.c b/attrib/att.c
> index dff8597..5b851a2 100644
> --- a/attrib/att.c
> +++ b/attrib/att.c
> @@ -141,8 +141,10 @@ uint16_t dec_read_by_grp_req(const uint8_t *pdu, int len, uint16_t *start,
> Â Â Â Â*end = att_get_u16(&pdu[3]);
> Â Â Â Âif (len == min_len + 2)
> Â Â Â Â Â Â Â Âsdp_uuid16_create(uuid, att_get_u16(&pdu[5]));
> - Â Â Â else
> - Â Â Â Â Â Â Â sdp_uuid128_create(uuid, &pdu[5]);
> + Â Â Â else {
> + Â Â Â Â Â Â Â uint128_t h128 = att_get_u128(&pdu[5]);
> + Â Â Â Â Â Â Â sdp_uuid128_create(uuid, &h128);
> + Â Â Â }
>
> Â Â Â Âreturn len;
> Â}
> @@ -370,8 +372,10 @@ uint16_t dec_read_by_type_req(const uint8_t *pdu, int len, uint16_t *start,
>
> Â Â Â Âif (len == min_len + 2)
> Â Â Â Â Â Â Â Âsdp_uuid16_create(uuid, att_get_u16(&pdu[5]));
> - Â Â Â else
> - Â Â Â Â Â Â Â sdp_uuid128_create(uuid, &pdu[5]);
> + Â Â Â else {
> + Â Â Â Â Â Â Â uint128_t h128 = att_get_u128(&pdu[5]);
> + Â Â Â Â Â Â Â sdp_uuid128_create(uuid, &h128);
> + Â Â Â }
>
> Â Â Â Âreturn len;
> Â}
> diff --git a/attrib/att.h b/attrib/att.h
> index 7e81dc4..0cd6626 100644
> --- a/attrib/att.h
> +++ b/attrib/att.h
> @@ -170,6 +170,16 @@ static inline uint32_t att_get_u32(const void *ptr)
> Â Â Â Âreturn btohl(bt_get_unaligned(u32_ptr));
> Â}
>
> +static inline uint128_t att_get_u128(const void *ptr)
Pass a uint128_t pointer or return the struct uint128_t?

BR,
Claudio
> +{
> + Â Â Â const uint128_t *u128_ptr = ptr;
> + Â Â Â uint128_t dst;
> +
> + Â Â Â btoh128(u128_ptr, &dst);
> +
> + Â Â Â return dst;
> +}
> +
> Âstatic inline void att_put_u8(uint8_t src, void *dst)
> Â{
> Â Â Â Âbt_put_unaligned(src, (uint8_t *) dst);
> diff --git a/attrib/gatt.c b/attrib/gatt.c
> index b99d39c..3fedcc4 100644
> --- a/attrib/gatt.c
> +++ b/attrib/gatt.c
> @@ -174,9 +174,10 @@ static void primary_all_cb(guint8 status, const guint8 *ipdu, guint16 iplen,
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âatt_get_u16(&data[4]));
> Â Â Â Â Â Â Â Â Â Â Â Âsdp_uuid16_to_uuid128(&u128, &u16);
>
> - Â Â Â Â Â Â Â } else if (list->len == 20)
> - Â Â Â Â Â Â Â Â Â Â Â sdp_uuid128_create(&u128, &data[4]);
> - Â Â Â Â Â Â Â else
> + Â Â Â Â Â Â Â } else if (list->len == 20) {
> + Â Â Â Â Â Â Â Â Â Â Â uint128_t h128 = att_get_u128(&data[4]);
> + Â Â Â Â Â Â Â Â Â Â Â sdp_uuid128_create(&u128, &h128);
> + Â Â Â Â Â Â Â } else
> Â Â Â Â Â Â Â Â Â Â Â Â/* Skipping invalid data */
> Â Â Â Â Â Â Â Â Â Â Â Âcontinue;
>
> @@ -271,8 +272,10 @@ static void char_discovered_cb(guint8 status, const guint8 *ipdu, guint16 iplen,
> Â Â Â Â Â Â Â Âif (list->len == 7) {
> Â Â Â Â Â Â Â Â Â Â Â Âsdp_uuid16_create(&u16, att_get_u16(&value[5]));
> Â Â Â Â Â Â Â Â Â Â Â Âsdp_uuid16_to_uuid128(&u128, &u16);
> - Â Â Â Â Â Â Â } else
> - Â Â Â Â Â Â Â Â Â Â Â sdp_uuid128_create(&u128, &value[5]);
> + Â Â Â Â Â Â Â } else {
> + Â Â Â Â Â Â Â Â Â Â Â uint128_t h128 = att_get_u128(&value[5]);
> + Â Â Â Â Â Â Â Â Â Â Â sdp_uuid128_create(&u128, &h128);
> + Â Â Â Â Â Â Â }
>
> Â Â Â Â Â Â Â Âchars = g_try_new0(struct att_char, 1);
> Â Â Â Â Â Â Â Âif (!chars) {
> diff --git a/attrib/gatttool.c b/attrib/gatttool.c
> index 8e8ed8e..6c9394e 100644
> --- a/attrib/gatttool.c
> +++ b/attrib/gatttool.c
> @@ -464,8 +464,10 @@ static void char_desc_cb(guint8 status, const guint8 *pdu, guint16 plen,
>
> Â Â Â Â Â Â Â Âif (format == 0x01)
> Â Â Â Â Â Â Â Â Â Â Â Âsdp_uuid16_create(&uuid, att_get_u16(&value[2]));
> - Â Â Â Â Â Â Â else
> - Â Â Â Â Â Â Â Â Â Â Â sdp_uuid128_create(&uuid, &value[2]);
> + Â Â Â Â Â Â Â else {
> + Â Â Â Â Â Â Â Â Â Â Â uint128_t h128 = att_get_u128(&value[2]);
> + Â Â Â Â Â Â Â Â Â Â Â sdp_uuid128_create(&uuid, &h128);
> + Â Â Â Â Â Â Â }
>
> Â Â Â Â Â Â Â Âsdp_uuid2strn(&uuid, uuidstr, MAX_LEN_UUID_STR);
> Â Â Â Â Â Â Â Âg_print("handle = 0x%04x, uuid = %s\n", handle, uuidstr);
> --
> 1.7.4
>
>
ÿô.nlj·Ÿ®‰­†+%ŠË±é¥Šwÿº{.nlj·¥Š{±ý¶â^n‡r¡öë¨è&£ûz¹Þúzf£¢·hšˆ§~†­†Ûÿÿïÿ‘ê_èæ+v‰¨þ)ßø

[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux