nimble/adv: Use ble_uuid types in ble_hs_adv_fields

Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/ef6808ab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/ef6808ab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/ef6808ab

Branch: refs/heads/develop
Commit: ef6808ab5ed765ff2e3f35d5a60901c81a03fe42
Parents: 1fe117a
Author: Andrzej Kaczmarek <[email protected]>
Authored: Fri Jan 27 13:26:11 2017 +0100
Committer: Andrzej Kaczmarek <[email protected]>
Committed: Fri Jan 27 16:51:45 2017 +0100

----------------------------------------------------------------------
 apps/blecent/src/main.c                    |   2 +-
 apps/blecent/src/misc.c                    |  12 +--
 apps/bleprph/src/main.c                    |   4 +-
 apps/bleprph_oic/src/main.c                |   5 +-
 apps/bletiny/src/cmd.c                     |  13 +--
 apps/bletiny/src/main.c                    |  12 +--
 apps/bleuart/src/main.c                    |   2 +-
 net/nimble/host/include/host/ble_hs_adv.h  |   7 +-
 net/nimble/host/src/ble_eddystone.c        |   6 +-
 net/nimble/host/src/ble_hs_adv.c           | 129 +++++++++++++++++++-----
 net/nimble/host/test/src/ble_hs_adv_test.c |  66 ++++++++----
 11 files changed, 181 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/apps/blecent/src/main.c
----------------------------------------------------------------------
diff --git a/apps/blecent/src/main.c b/apps/blecent/src/main.c
index 64279a9..28fadf8 100755
--- a/apps/blecent/src/main.c
+++ b/apps/blecent/src/main.c
@@ -279,7 +279,7 @@ blecent_should_connect(const struct ble_gap_disc_desc *disc)
      * service (0x1811).
      */
     for (i = 0; i < fields.num_uuids16; i++) {
-        if (fields.uuids16[i] == BLECENT_SVC_ALERT_UUID) {
+        if (ble_uuid_u16(&fields.uuids16[i].u) == BLECENT_SVC_ALERT_UUID) {
             return 1;
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/apps/blecent/src/misc.c
----------------------------------------------------------------------
diff --git a/apps/blecent/src/misc.c b/apps/blecent/src/misc.c
index a51377d..11360e5 100644
--- a/apps/blecent/src/misc.c
+++ b/apps/blecent/src/misc.c
@@ -105,7 +105,6 @@ print_adv_fields(const struct ble_hs_adv_fields *fields)
 {
     char s[BLE_HS_ADV_MAX_SZ];
     const uint8_t *u8p;
-    ble_uuid_any_t uuid;
     int i;
 
     if (fields->flags != 0) {
@@ -116,7 +115,8 @@ print_adv_fields(const struct ble_hs_adv_fields *fields)
         BLECENT_LOG(DEBUG, "    uuids16(%scomplete)=",
                     fields->uuids16_is_complete ? "" : "in");
         for (i = 0; i < fields->num_uuids16; i++) {
-            BLECENT_LOG(DEBUG, "0x%04x ", fields->uuids16[i]);
+            print_uuid(&fields->uuids16[i].u);
+            BLECENT_LOG(DEBUG, " ");
         }
         BLECENT_LOG(DEBUG, "\n");
     }
@@ -125,7 +125,8 @@ print_adv_fields(const struct ble_hs_adv_fields *fields)
         BLECENT_LOG(DEBUG, "    uuids32(%scomplete)=",
                     fields->uuids32_is_complete ? "" : "in");
         for (i = 0; i < fields->num_uuids32; i++) {
-            BLECENT_LOG(DEBUG, "0x%08x ", fields->uuids32[i]);
+            print_uuid(&fields->uuids32[i].u);
+            BLECENT_LOG(DEBUG, " ");
         }
         BLECENT_LOG(DEBUG, "\n");
     }
@@ -133,12 +134,9 @@ print_adv_fields(const struct ble_hs_adv_fields *fields)
     if (fields->uuids128 != NULL) {
         BLECENT_LOG(DEBUG, "    uuids128(%scomplete)=",
                     fields->uuids128_is_complete ? "" : "in");
-        u8p = fields->uuids128;
         for (i = 0; i < fields->num_uuids128; i++) {
-            ble_uuid_init_from_buf(&uuid, u8p, 16);
-            print_uuid(&uuid.u);
+            print_uuid(&fields->uuids128[i].u);
             BLECENT_LOG(DEBUG, " ");
-            u8p += 16;
         }
         BLECENT_LOG(DEBUG, "\n");
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/apps/bleprph/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bleprph/src/main.c b/apps/bleprph/src/main.c
index 962a345..62da56a 100755
--- a/apps/bleprph/src/main.c
+++ b/apps/bleprph/src/main.c
@@ -113,7 +113,9 @@ bleprph_advertise(void)
     fields.name_len = strlen(name);
     fields.name_is_complete = 1;
 
-    fields.uuids16 = (uint16_t[]){ GATT_SVR_SVC_ALERT_UUID };
+    fields.uuids16 = (ble_uuid16_t[]){
+        BLE_UUID16_INIT(GATT_SVR_SVC_ALERT_UUID)
+    };
     fields.num_uuids16 = 1;
     fields.uuids16_is_complete = 1;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/apps/bleprph_oic/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bleprph_oic/src/main.c b/apps/bleprph_oic/src/main.c
index 513c875..e25f182 100755
--- a/apps/bleprph_oic/src/main.c
+++ b/apps/bleprph_oic/src/main.c
@@ -117,8 +117,9 @@ bleprph_advertise(void)
     fields.name_len = strlen(name);
     fields.name_is_complete = 1;
 
-    fields.uuids128 =
-        BLE_UUID128(BLE_UUID128_DECLARE(OC_GATT_SERVICE_UUID))->value;
+    fields.uuids128 = (ble_uuid128_t []) {
+        BLE_UUID128_INIT(OC_GATT_SERVICE_UUID)
+    };
     fields.num_uuids128 = 1;
     fields.uuids128_is_complete = 1;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/apps/bletiny/src/cmd.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/cmd.c b/apps/bletiny/src/cmd.c
index e03872a..3019bb3 100644
--- a/apps/bletiny/src/cmd.c
+++ b/apps/bletiny/src/cmd.c
@@ -1883,9 +1883,9 @@ bletiny_set_adv_data_help(void)
 static int
 cmd_set_adv_data(void)
 {
-    static bssnz_t uint16_t uuids16[CMD_ADV_DATA_MAX_UUIDS16];
-    static bssnz_t uint32_t uuids32[CMD_ADV_DATA_MAX_UUIDS32];
-    static bssnz_t uint8_t uuids128[CMD_ADV_DATA_MAX_UUIDS128][16];
+    static bssnz_t ble_uuid16_t uuids16[CMD_ADV_DATA_MAX_UUIDS16];
+    static bssnz_t ble_uuid32_t uuids32[CMD_ADV_DATA_MAX_UUIDS32];
+    static bssnz_t ble_uuid128_t uuids128[CMD_ADV_DATA_MAX_UUIDS128];
     static bssnz_t uint8_t
         public_tgt_addrs[CMD_ADV_DATA_MAX_PUBLIC_TGT_ADDRS]
                         [BLE_HS_ADV_PUBLIC_TGT_ADDR_ENTRY_LEN];
@@ -1935,7 +1935,7 @@ cmd_set_adv_data(void)
                 help_cmd_uint16("uuid16");
                 return EINVAL;
             }
-            uuids16[adv_fields.num_uuids16] = uuid16;
+            uuids16[adv_fields.num_uuids16] = (ble_uuid16_t) 
BLE_UUID16_INIT(uuid16);
             adv_fields.num_uuids16++;
         } else if (rc == ENOENT) {
             break;
@@ -1966,7 +1966,7 @@ cmd_set_adv_data(void)
                 help_cmd_uint32("uuid32");
                 return EINVAL;
             }
-            uuids32[adv_fields.num_uuids32] = uuid32;
+            uuids32[adv_fields.num_uuids32] = (ble_uuid32_t) 
BLE_UUID32_INIT(uuid32);
             adv_fields.num_uuids32++;
         } else if (rc == ENOENT) {
             break;
@@ -1997,7 +1997,8 @@ cmd_set_adv_data(void)
                 help_cmd_byte_stream_exact_length("uuid128", 16);
                 return EINVAL;
             }
-            memcpy(uuids128[adv_fields.num_uuids128], uuid128, 16);
+            ble_uuid_init_from_buf((ble_uuid_any_t *) 
&uuids128[adv_fields.num_uuids128],
+                                   uuid128, 16);
             adv_fields.num_uuids128++;
         } else if (rc == ENOENT) {
             break;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/apps/bletiny/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bletiny/src/main.c b/apps/bletiny/src/main.c
index 63b0535..5f76bcf 100755
--- a/apps/bletiny/src/main.c
+++ b/apps/bletiny/src/main.c
@@ -124,7 +124,6 @@ static void
 bletiny_print_adv_fields(const struct ble_hs_adv_fields *fields)
 {
     uint8_t *u8p;
-    ble_uuid_any_t uuid;
     int i;
 
     if (fields->flags != 0) {
@@ -152,7 +151,8 @@ bletiny_print_adv_fields(const struct ble_hs_adv_fields 
*fields)
         console_printf("    uuids16(%scomplete)=",
                        fields->uuids16_is_complete ? "" : "in");
         for (i = 0; i < fields->num_uuids16; i++) {
-            console_printf("0x%04x ", fields->uuids16[i]);
+            print_uuid(&fields->uuids16[i].u);
+            console_printf(" ");
         }
         console_printf("\n");
     }
@@ -161,7 +161,8 @@ bletiny_print_adv_fields(const struct ble_hs_adv_fields 
*fields)
         console_printf("    uuids32(%scomplete)=",
                        fields->uuids32_is_complete ? "" : "in");
         for (i = 0; i < fields->num_uuids32; i++) {
-            console_printf("0x%08x ", (unsigned int)fields->uuids32[i]);
+            print_uuid(&fields->uuids32[i].u);
+            console_printf(" ");
         }
         console_printf("\n");
     }
@@ -169,12 +170,9 @@ bletiny_print_adv_fields(const struct ble_hs_adv_fields 
*fields)
     if (fields->uuids128 != NULL) {
         console_printf("    uuids128(%scomplete)=",
                        fields->uuids128_is_complete ? "" : "in");
-        u8p = fields->uuids128;
         for (i = 0; i < fields->num_uuids128; i++) {
-            ble_uuid_init_from_buf(&uuid, u8p, 16);
-            print_uuid(&uuid.u);
+            print_uuid(&fields->uuids128[i].u);
             console_printf(" ");
-            u8p += 16;
         }
         console_printf("\n");
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/apps/bleuart/src/main.c
----------------------------------------------------------------------
diff --git a/apps/bleuart/src/main.c b/apps/bleuart/src/main.c
index 270bb70..1a9e4dc 100755
--- a/apps/bleuart/src/main.c
+++ b/apps/bleuart/src/main.c
@@ -89,7 +89,7 @@ bleuart_advertise(void)
     fields.tx_pwr_lvl_is_present = 1;
     fields.tx_pwr_lvl = BLE_HS_ADV_TX_PWR_LVL_AUTO;
 
-    fields.uuids128 = BLE_UUID128(&gatt_svr_svc_uart_uuid.u)->value;
+    fields.uuids128 = BLE_UUID128(&gatt_svr_svc_uart_uuid.u);
     fields.num_uuids128 = 1;
     fields.uuids128_is_complete = 1;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/net/nimble/host/include/host/ble_hs_adv.h
----------------------------------------------------------------------
diff --git a/net/nimble/host/include/host/ble_hs_adv.h 
b/net/nimble/host/include/host/ble_hs_adv.h
index 538fc7d..23c2155 100644
--- a/net/nimble/host/include/host/ble_hs_adv.h
+++ b/net/nimble/host/include/host/ble_hs_adv.h
@@ -21,6 +21,7 @@
 #define H_BLE_HS_ADV_
 
 #include <inttypes.h>
+#include "host/ble_uuid.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -45,17 +46,17 @@ struct ble_hs_adv_fields {
     uint8_t flags;
 
     /*** 0x02,0x03 - 16-bit service class UUIDs. */
-    uint16_t *uuids16;
+    ble_uuid16_t *uuids16;
     uint8_t num_uuids16;
     unsigned uuids16_is_complete:1;
 
     /*** 0x04,0x05 - 32-bit service class UUIDs. */
-    uint32_t *uuids32;
+    ble_uuid32_t *uuids32;
     uint8_t num_uuids32;
     unsigned uuids32_is_complete:1;
 
     /*** 0x06,0x07 - 128-bit service class UUIDs. */
-    void *uuids128;
+    ble_uuid128_t *uuids128;
     uint8_t num_uuids128;
     unsigned uuids128_is_complete:1;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/net/nimble/host/src/ble_eddystone.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_eddystone.c 
b/net/nimble/host/src/ble_eddystone.c
index e1d8ec8..fa4a783 100644
--- a/net/nimble/host/src/ble_eddystone.c
+++ b/net/nimble/host/src/ble_eddystone.c
@@ -30,7 +30,7 @@
 #define BLE_EDDYSTONE_FRAME_TYPE_UID    0x00
 #define BLE_EDDYSTONE_FRAME_TYPE_URL    0x10
 
-static uint16_t ble_eddystone_uuids16[BLE_EDDYSTONE_MAX_UUIDS16 + 1];
+static ble_uuid16_t ble_eddystone_uuids16[BLE_EDDYSTONE_MAX_UUIDS16 + 1];
 static uint8_t ble_eddystone_svc_data[BLE_EDDYSTONE_MAX_SVC_DATA_LEN];
 
 /**
@@ -85,9 +85,9 @@ ble_eddystone_set_adv_data_gen(struct ble_hs_adv_fields 
*adv_fields,
         return BLE_HS_EINVAL;
     }
 
-    ble_eddystone_uuids16[0] = BLE_EDDYSTONE_SERVICE_UUID;
+    ble_eddystone_uuids16[0] = (ble_uuid16_t) 
BLE_UUID16_INIT(BLE_EDDYSTONE_SERVICE_UUID);
     memcpy(ble_eddystone_uuids16 + 1, adv_fields->uuids16,
-           adv_fields->num_uuids16 * 2);
+           adv_fields->num_uuids16 * sizeof(ble_uuid16_t));
     adv_fields->uuids16 = ble_eddystone_uuids16;
     adv_fields->num_uuids16++;
     adv_fields->uuids16_is_complete = 1;

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/net/nimble/host/src/ble_hs_adv.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/src/ble_hs_adv.c b/net/nimble/host/src/ble_hs_adv.c
index 37236c8..01ea981 100644
--- a/net/nimble/host/src/ble_hs_adv.c
+++ b/net/nimble/host/src/ble_hs_adv.c
@@ -28,8 +28,9 @@ struct find_field_data {
     const struct ble_hs_adv_field *field;
 };
 
-static uint16_t ble_hs_adv_uuids16[BLE_HS_ADV_MAX_FIELD_SZ / 2];
-static uint32_t ble_hs_adv_uuids32[BLE_HS_ADV_MAX_FIELD_SZ / 4];
+static ble_uuid16_t ble_hs_adv_uuids16[BLE_HS_ADV_MAX_FIELD_SZ / 2];
+static ble_uuid32_t ble_hs_adv_uuids32[BLE_HS_ADV_MAX_FIELD_SZ / 4];
+static ble_uuid128_t ble_hs_adv_uuids128[BLE_HS_ADV_MAX_FIELD_SZ / 16];
 
 static int
 ble_hs_adv_set_hdr(uint8_t type, uint8_t data_len, uint8_t max_len,
@@ -71,28 +72,77 @@ ble_hs_adv_set_flat(uint8_t type, int data_len, const void 
*data,
 }
 
 static int
-ble_hs_adv_set_array16(uint8_t type, uint8_t num_elems, const uint16_t *elems,
-                       uint8_t *dst, uint8_t *dst_len, uint8_t max_len)
+ble_hs_adv_set_array_uuid16(uint8_t type, uint8_t num_elems,
+                            const ble_uuid16_t *elems, uint8_t *dst,
+                            uint8_t *dst_len, uint8_t max_len)
 {
     int rc;
     int i;
 
-    rc = ble_hs_adv_set_hdr(type, num_elems * sizeof *elems, max_len, dst,
+    rc = ble_hs_adv_set_hdr(type, num_elems * 2, max_len, dst,
                             dst_len);
     if (rc != 0) {
         return rc;
     }
 
     for (i = 0; i < num_elems; i++) {
-        put_le16(dst + *dst_len, elems[i]);
-        *dst_len += sizeof elems[i];
+        ble_uuid_flat(&elems[i].u, dst + *dst_len);
+        *dst_len += 2;
     }
 
     return 0;
 }
 
 static int
-ble_hs_adv_set_array32(uint8_t type, uint8_t num_elems, const uint32_t *elems,
+ble_hs_adv_set_array_uuid32(uint8_t type, uint8_t num_elems,
+                            const ble_uuid32_t *elems, uint8_t *dst,
+                            uint8_t *dst_len, uint8_t max_len)
+{
+    int rc;
+    int i;
+
+    rc = ble_hs_adv_set_hdr(type, num_elems * 4, max_len, dst,
+                            dst_len);
+    if (rc != 0) {
+        return rc;
+    }
+
+    for (i = 0; i < num_elems; i++) {
+        /* We cannot use ble_uuid_flat here since it converts 32-bit UUIDs to
+         * 128-bit as ATT requires. In AD, 32-bit UUID shall be written as an
+         * actual 32-bit value.
+         */
+        put_le32(dst + *dst_len, elems[i].value);
+        *dst_len += 4;
+    }
+
+    return 0;
+}
+
+static int
+ble_hs_adv_set_array_uuid128(uint8_t type, uint8_t num_elems,
+                             const ble_uuid128_t *elems, uint8_t *dst,
+                             uint8_t *dst_len, uint8_t max_len)
+{
+    int rc;
+    int i;
+
+    rc = ble_hs_adv_set_hdr(type, num_elems * 16, max_len, dst,
+                            dst_len);
+    if (rc != 0) {
+        return rc;
+    }
+
+    for (i = 0; i < num_elems; i++) {
+        ble_uuid_flat(&elems[i].u, dst + *dst_len);
+        *dst_len += 16;
+    }
+
+    return 0;
+}
+
+static int
+ble_hs_adv_set_array16(uint8_t type, uint8_t num_elems, const uint16_t *elems,
                        uint8_t *dst, uint8_t *dst_len, uint8_t max_len)
 {
     int rc;
@@ -105,7 +155,7 @@ ble_hs_adv_set_array32(uint8_t type, uint8_t num_elems, 
const uint32_t *elems,
     }
 
     for (i = 0; i < num_elems; i++) {
-        put_le32(dst + *dst_len, elems[i]);
+        put_le16(dst + *dst_len, elems[i]);
         *dst_len += sizeof elems[i];
     }
 
@@ -152,9 +202,9 @@ ble_hs_adv_set_fields(const struct ble_hs_adv_fields 
*adv_fields,
             type = BLE_HS_ADV_TYPE_INCOMP_UUIDS16;
         }
 
-        rc = ble_hs_adv_set_array16(type, adv_fields->num_uuids16,
-                                    adv_fields->uuids16, dst, dst_len,
-                                    max_len);
+        rc = ble_hs_adv_set_array_uuid16(type, adv_fields->num_uuids16,
+                                         adv_fields->uuids16, dst, dst_len,
+                                         max_len);
         if (rc != 0) {
             return rc;
         }
@@ -168,9 +218,9 @@ ble_hs_adv_set_fields(const struct ble_hs_adv_fields 
*adv_fields,
             type = BLE_HS_ADV_TYPE_INCOMP_UUIDS32;
         }
 
-        rc = ble_hs_adv_set_array32(type, adv_fields->num_uuids32,
-                                    adv_fields->uuids32, dst, dst_len,
-                                    max_len);
+        rc = ble_hs_adv_set_array_uuid32(type, adv_fields->num_uuids32,
+                                         adv_fields->uuids32, dst, dst_len,
+                                         max_len);
         if (rc != 0) {
             return rc;
         }
@@ -184,8 +234,9 @@ ble_hs_adv_set_fields(const struct ble_hs_adv_fields 
*adv_fields,
             type = BLE_HS_ADV_TYPE_INCOMP_UUIDS128;
         }
 
-        rc = ble_hs_adv_set_flat(type, adv_fields->num_uuids128 * 16,
-                                 adv_fields->uuids128, dst, dst_len, max_len);
+        rc = ble_hs_adv_set_array_uuid128(type, adv_fields->num_uuids128,
+                                          adv_fields->uuids128, dst, dst_len,
+                                          max_len);
         if (rc != 0) {
             return rc;
         }
@@ -332,6 +383,7 @@ static int
 ble_hs_adv_parse_uuids16(struct ble_hs_adv_fields *adv_fields,
                          const uint8_t *data, uint8_t data_len)
 {
+    ble_uuid_any_t uuid;
     int i;
 
     if (data_len % 2 != 0) {
@@ -342,7 +394,8 @@ ble_hs_adv_parse_uuids16(struct ble_hs_adv_fields 
*adv_fields,
     adv_fields->num_uuids16 = data_len / 2;
 
     for (i = 0; i < adv_fields->num_uuids16; i++) {
-        adv_fields->uuids16[i] = get_le16(data + i * 2);
+        ble_uuid_init_from_buf(&uuid, data + i * 2, 2);
+        adv_fields->uuids16[i] = uuid.u16;
     }
 
     return 0;
@@ -352,6 +405,7 @@ static int
 ble_hs_adv_parse_uuids32(struct ble_hs_adv_fields *adv_fields,
                          const uint8_t *data, uint8_t data_len)
 {
+    ble_uuid_any_t uuid;
     int i;
 
     if (data_len % 4 != 0) {
@@ -362,7 +416,30 @@ ble_hs_adv_parse_uuids32(struct ble_hs_adv_fields 
*adv_fields,
     adv_fields->num_uuids32 = data_len / 4;
 
     for (i = 0; i < adv_fields->num_uuids32; i++) {
-        adv_fields->uuids32[i] = get_le32(data + i * 4);
+        ble_uuid_init_from_buf(&uuid, data + i * 4, 4);
+        adv_fields->uuids32[i] = uuid.u32;
+    }
+
+    return 0;
+}
+
+static int
+ble_hs_adv_parse_uuids128(struct ble_hs_adv_fields *adv_fields,
+                          const uint8_t *data, uint8_t data_len)
+{
+    ble_uuid_any_t uuid;
+    int i;
+
+    if (data_len % 16 != 0) {
+        return BLE_HS_EBADDATA;
+    }
+
+    adv_fields->uuids128 = ble_hs_adv_uuids128;
+    adv_fields->num_uuids128 = data_len / 16;
+
+    for (i = 0; i < adv_fields->num_uuids128; i++) {
+        ble_uuid_init_from_buf(&uuid, data + i * 16, 16);
+        adv_fields->uuids128[i] = uuid.u128;
     }
 
     return 0;
@@ -435,20 +512,18 @@ ble_hs_adv_parse_one_field(struct ble_hs_adv_fields 
*adv_fields,
         break;
 
     case BLE_HS_ADV_TYPE_INCOMP_UUIDS128:
-        if (data_len % 16 != 0) {
-            return BLE_HS_EBADDATA;
+        rc = ble_hs_adv_parse_uuids128(adv_fields, data, data_len);
+        if (rc != 0) {
+            return rc;
         }
-        adv_fields->uuids128 = data;
-        adv_fields->num_uuids128 = data_len / 16;
         adv_fields->uuids128_is_complete = 0;
         break;
 
     case BLE_HS_ADV_TYPE_COMP_UUIDS128:
-        if (data_len % 16 != 0) {
-            return BLE_HS_EBADDATA;
+        rc = ble_hs_adv_parse_uuids128(adv_fields, data, data_len);
+        if (rc != 0) {
+            return rc;
         }
-        adv_fields->uuids128 = data;
-        adv_fields->num_uuids128 = data_len / 16;
         adv_fields->uuids128_is_complete = 1;
         break;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ef6808ab/net/nimble/host/test/src/ble_hs_adv_test.c
----------------------------------------------------------------------
diff --git a/net/nimble/host/test/src/ble_hs_adv_test.c 
b/net/nimble/host/test/src/ble_hs_adv_test.c
index c1a7e55..526fa74 100644
--- a/net/nimble/host/test/src/ble_hs_adv_test.c
+++ b/net/nimble/host/test/src/ble_hs_adv_test.c
@@ -189,7 +189,11 @@ TEST_CASE(ble_hs_adv_test_case_user)
     adv_fields.flags = BLE_HS_ADV_F_BREDR_UNSUP;
     adv_fields.tx_pwr_lvl_is_present = 1;
     adv_fields.tx_pwr_lvl = BLE_HS_ADV_TX_PWR_LVL_AUTO;
-    adv_fields.uuids16 = (uint16_t[]) { 0x0001, 0x1234, 0x54ab };
+    adv_fields.uuids16 = (ble_uuid16_t[]) {
+        BLE_UUID16_INIT(0x0001),
+        BLE_UUID16_INIT(0x1234),
+        BLE_UUID16_INIT(0x54ab)
+    };
     adv_fields.num_uuids16 = 3;
     adv_fields.uuids16_is_complete = 1;
 
@@ -217,7 +221,11 @@ TEST_CASE(ble_hs_adv_test_case_user)
     memset(&adv_fields, 0, sizeof adv_fields);
     adv_fields.flags = BLE_HS_ADV_F_BREDR_UNSUP;
     adv_fields.tx_pwr_lvl_is_present = 1;
-    adv_fields.uuids16 = (uint16_t[]) { 0x0001, 0x1234, 0x54ab };
+    adv_fields.uuids16 = (ble_uuid16_t[]) {
+        BLE_UUID16_INIT(0x0001),
+        BLE_UUID16_INIT(0x1234),
+        BLE_UUID16_INIT(0x54ab)
+    };
     adv_fields.num_uuids16 = 3;
     adv_fields.uuids16_is_complete = 0;
 
@@ -245,7 +253,10 @@ TEST_CASE(ble_hs_adv_test_case_user)
     memset(&adv_fields, 0, sizeof adv_fields);
     adv_fields.flags = BLE_HS_ADV_F_BREDR_UNSUP;
     adv_fields.tx_pwr_lvl_is_present = 1;
-    adv_fields.uuids32 = (uint32_t[]) { 0x12345678, 0xabacadae };
+    adv_fields.uuids32 = (ble_uuid32_t[]) {
+        BLE_UUID32_INIT(0x12345678),
+        BLE_UUID32_INIT(0xabacadae)
+    };
     adv_fields.num_uuids32 = 2;
     adv_fields.uuids32_is_complete = 1;
 
@@ -273,7 +284,10 @@ TEST_CASE(ble_hs_adv_test_case_user)
     memset(&adv_fields, 0, sizeof adv_fields);
     adv_fields.flags = BLE_HS_ADV_F_BREDR_UNSUP;
     adv_fields.tx_pwr_lvl_is_present = 1;
-    adv_fields.uuids32 = (uint32_t[]) { 0x12345678, 0xabacadae };
+    adv_fields.uuids32 = (ble_uuid32_t[]) {
+        BLE_UUID32_INIT(0x12345678),
+        BLE_UUID32_INIT(0xabacadae)
+    };
     adv_fields.num_uuids32 = 2;
     adv_fields.uuids32_is_complete = 0;
 
@@ -301,9 +315,9 @@ TEST_CASE(ble_hs_adv_test_case_user)
     memset(&adv_fields, 0, sizeof adv_fields);
     adv_fields.flags = BLE_HS_ADV_F_BREDR_UNSUP;
     adv_fields.tx_pwr_lvl_is_present = 1;
-    adv_fields.uuids128 = (uint8_t[]) {
-        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
-        0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
+    adv_fields.uuids128 = (ble_uuid128_t[]) {
+        BLE_UUID128_INIT(0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+                         0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)
     };
     adv_fields.num_uuids128 = 1;
     adv_fields.uuids128_is_complete = 1;
@@ -335,10 +349,10 @@ TEST_CASE(ble_hs_adv_test_case_user)
     memset(&adv_fields, 0, sizeof adv_fields);
     adv_fields.flags = BLE_HS_ADV_F_BREDR_UNSUP;
     adv_fields.tx_pwr_lvl_is_present = 1;
-    adv_fields.uuids128 = (uint8_t[]) {
+    adv_fields.uuids128 = BLE_UUID128(BLE_UUID128_DECLARE(
         0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
         0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
-    };
+    ));
     adv_fields.num_uuids128 = 1;
     adv_fields.uuids128_is_complete = 0;
 
@@ -677,7 +691,11 @@ TEST_CASE(ble_hs_adv_test_case_user_rsp)
 
     /*** Complete 16-bit service class UUIDs. */
     memset(&rsp_fields, 0, sizeof rsp_fields);
-    rsp_fields.uuids16 = (uint16_t[]) { 0x0001, 0x1234, 0x54ab };
+    rsp_fields.uuids16 = (ble_uuid16_t[]) {
+        BLE_UUID16_INIT(0x0001),
+        BLE_UUID16_INIT(0x1234),
+        BLE_UUID16_INIT(0x54ab)
+    };
     rsp_fields.num_uuids16 = 3;
     rsp_fields.uuids16_is_complete = 1;
 
@@ -707,7 +725,11 @@ TEST_CASE(ble_hs_adv_test_case_user_rsp)
 
     /*** Incomplete 16-bit service class UUIDs. */
     memset(&rsp_fields, 0, sizeof rsp_fields);
-    rsp_fields.uuids16 = (uint16_t[]) { 0x0001, 0x1234, 0x54ab };
+    rsp_fields.uuids16 = (ble_uuid16_t[]) {
+        BLE_UUID16_INIT(0x0001),
+        BLE_UUID16_INIT(0x1234),
+        BLE_UUID16_INIT(0x54ab)
+    };
     rsp_fields.num_uuids16 = 3;
     rsp_fields.uuids16_is_complete = 0;
 
@@ -737,7 +759,10 @@ TEST_CASE(ble_hs_adv_test_case_user_rsp)
 
     /*** Complete 32-bit service class UUIDs. */
     memset(&rsp_fields, 0, sizeof rsp_fields);
-    rsp_fields.uuids32 = (uint32_t[]) { 0x12345678, 0xabacadae };
+    rsp_fields.uuids32 = (ble_uuid32_t[]) {
+        BLE_UUID32_INIT(0x12345678),
+        BLE_UUID32_INIT(0xabacadae)
+    };
     rsp_fields.num_uuids32 = 2;
     rsp_fields.uuids32_is_complete = 1;
 
@@ -767,7 +792,10 @@ TEST_CASE(ble_hs_adv_test_case_user_rsp)
 
     /*** Incomplete 32-bit service class UUIDs. */
     memset(&rsp_fields, 0, sizeof rsp_fields);
-    rsp_fields.uuids32 = (uint32_t[]) { 0x12345678, 0xabacadae };
+    rsp_fields.uuids32 = (ble_uuid32_t[]) {
+        BLE_UUID32_INIT(0x12345678),
+        BLE_UUID32_INIT(0xabacadae)
+    };
     rsp_fields.num_uuids32 = 2;
     rsp_fields.uuids32_is_complete = 0;
 
@@ -797,9 +825,9 @@ TEST_CASE(ble_hs_adv_test_case_user_rsp)
 
     /*** Complete 128-bit service class UUIDs. */
     memset(&rsp_fields, 0, sizeof rsp_fields);
-    rsp_fields.uuids128 = (uint8_t[]) {
-        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
-        0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
+    rsp_fields.uuids128 = (ble_uuid128_t[]) {
+        BLE_UUID128_INIT(0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+                         0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)
     };
     rsp_fields.num_uuids128 = 1;
     rsp_fields.uuids128_is_complete = 1;
@@ -833,9 +861,9 @@ TEST_CASE(ble_hs_adv_test_case_user_rsp)
 
     /*** Incomplete 128-bit service class UUIDs. */
     memset(&rsp_fields, 0, sizeof rsp_fields);
-    rsp_fields.uuids128 = (uint8_t[]) {
-        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
-        0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
+    rsp_fields.uuids128 = (ble_uuid128_t[]) {
+        BLE_UUID128_INIT(0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+                         0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff)
     };
     rsp_fields.num_uuids128 = 1;
     rsp_fields.uuids128_is_complete = 0;

Reply via email to