From 83d0e6899fe42133cc0c2af82a321dd618e6fa56 Mon Sep 17 00:00:00 2001 From: Christopher Collins Date: Mon, 27 Feb 2017 20:25:53 -0800 Subject: [PATCH] MYNEWT-642 Eddystone UID format is incorrect The tx power and reserved bytes were missing. X-Original-Commit: e6594232f39f717eb5cdeb954a1dc69542b9212e --- nimble/host/src/ble_eddystone.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/nimble/host/src/ble_eddystone.c b/nimble/host/src/ble_eddystone.c index e6e15c34b..6132b782c 100644 --- a/nimble/host/src/ble_eddystone.c +++ b/nimble/host/src/ble_eddystone.c @@ -127,12 +127,28 @@ ble_eddystone_set_adv_data_uid(struct ble_hs_adv_fields *adv_fields, void *uid) return BLE_HS_ENOTSUP; #endif - void *svc_data; + uint8_t *svc_data; + int8_t tx_pwr; int rc; + /* Eddystone UUID and frame type (0). */ svc_data = ble_eddystone_set_svc_data_base(BLE_EDDYSTONE_FRAME_TYPE_UID); - memcpy(svc_data, uid, 16); - rc = ble_eddystone_set_adv_data_gen(adv_fields, 16); + + /* Ranging data (Calibrated tx power at 0 meters). */ + rc = ble_hs_hci_util_read_adv_tx_pwr(&tx_pwr); + if (rc != 0) { + return rc; + } + svc_data[0] = tx_pwr; + + /* UID. */ + memcpy(svc_data + 1, uid, 16); + + /* Reserved. */ + svc_data[17] = 0x00; + svc_data[18] = 0x00; + + rc = ble_eddystone_set_adv_data_gen(adv_fields, 19); if (rc != 0) { return rc; }