summaryrefslogtreecommitdiff
path: root/src/libs/mynewt-nimble/nimble/host/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/mynewt-nimble/nimble/host/include')
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_att.h194
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_eddystone.h117
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_gap.h2052
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_gatt.h896
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_hs.h386
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_adv.h177
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_hci.h98
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_id.h132
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_log.h52
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_mbuf.h82
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_stop.h70
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_ibeacon.h34
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_l2cap.h266
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_monitor.h40
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_sm.h124
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_store.h303
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h182
17 files changed, 5205 insertions, 0 deletions
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_att.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_att.h
new file mode 100644
index 00000000..391a992a
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_att.h
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_ATT_
+#define H_BLE_ATT_
+
+/**
+ * @brief Bluetooth Attribute Protocol (ATT)
+ * @defgroup bt_att Bluetooth Attribute Protocol (ATT)
+ * @ingroup bt_host
+ * @{
+ */
+
+#include "os/queue.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct os_mbuf;
+
+#define BLE_ATT_UUID_PRIMARY_SERVICE 0x2800
+#define BLE_ATT_UUID_SECONDARY_SERVICE 0x2801
+#define BLE_ATT_UUID_INCLUDE 0x2802
+#define BLE_ATT_UUID_CHARACTERISTIC 0x2803
+
+#define BLE_ATT_ERR_INVALID_HANDLE 0x01
+#define BLE_ATT_ERR_READ_NOT_PERMITTED 0x02
+#define BLE_ATT_ERR_WRITE_NOT_PERMITTED 0x03
+#define BLE_ATT_ERR_INVALID_PDU 0x04
+#define BLE_ATT_ERR_INSUFFICIENT_AUTHEN 0x05
+#define BLE_ATT_ERR_REQ_NOT_SUPPORTED 0x06
+#define BLE_ATT_ERR_INVALID_OFFSET 0x07
+#define BLE_ATT_ERR_INSUFFICIENT_AUTHOR 0x08
+#define BLE_ATT_ERR_PREPARE_QUEUE_FULL 0x09
+#define BLE_ATT_ERR_ATTR_NOT_FOUND 0x0a
+#define BLE_ATT_ERR_ATTR_NOT_LONG 0x0b
+#define BLE_ATT_ERR_INSUFFICIENT_KEY_SZ 0x0c
+#define BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN 0x0d
+#define BLE_ATT_ERR_UNLIKELY 0x0e
+#define BLE_ATT_ERR_INSUFFICIENT_ENC 0x0f
+#define BLE_ATT_ERR_UNSUPPORTED_GROUP 0x10
+#define BLE_ATT_ERR_INSUFFICIENT_RES 0x11
+
+#define BLE_ATT_OP_ERROR_RSP 0x01
+#define BLE_ATT_OP_MTU_REQ 0x02
+#define BLE_ATT_OP_MTU_RSP 0x03
+#define BLE_ATT_OP_FIND_INFO_REQ 0x04
+#define BLE_ATT_OP_FIND_INFO_RSP 0x05
+#define BLE_ATT_OP_FIND_TYPE_VALUE_REQ 0x06
+#define BLE_ATT_OP_FIND_TYPE_VALUE_RSP 0x07
+#define BLE_ATT_OP_READ_TYPE_REQ 0x08
+#define BLE_ATT_OP_READ_TYPE_RSP 0x09
+#define BLE_ATT_OP_READ_REQ 0x0a
+#define BLE_ATT_OP_READ_RSP 0x0b
+#define BLE_ATT_OP_READ_BLOB_REQ 0x0c
+#define BLE_ATT_OP_READ_BLOB_RSP 0x0d
+#define BLE_ATT_OP_READ_MULT_REQ 0x0e
+#define BLE_ATT_OP_READ_MULT_RSP 0x0f
+#define BLE_ATT_OP_READ_GROUP_TYPE_REQ 0x10
+#define BLE_ATT_OP_READ_GROUP_TYPE_RSP 0x11
+#define BLE_ATT_OP_WRITE_REQ 0x12
+#define BLE_ATT_OP_WRITE_RSP 0x13
+#define BLE_ATT_OP_PREP_WRITE_REQ 0x16
+#define BLE_ATT_OP_PREP_WRITE_RSP 0x17
+#define BLE_ATT_OP_EXEC_WRITE_REQ 0x18
+#define BLE_ATT_OP_EXEC_WRITE_RSP 0x19
+#define BLE_ATT_OP_NOTIFY_REQ 0x1b
+#define BLE_ATT_OP_INDICATE_REQ 0x1d
+#define BLE_ATT_OP_INDICATE_RSP 0x1e
+#define BLE_ATT_OP_WRITE_CMD 0x52
+
+#define BLE_ATT_ATTR_MAX_LEN 512
+
+#define BLE_ATT_F_READ 0x01
+#define BLE_ATT_F_WRITE 0x02
+#define BLE_ATT_F_READ_ENC 0x04
+#define BLE_ATT_F_READ_AUTHEN 0x08
+#define BLE_ATT_F_READ_AUTHOR 0x10
+#define BLE_ATT_F_WRITE_ENC 0x20
+#define BLE_ATT_F_WRITE_AUTHEN 0x40
+#define BLE_ATT_F_WRITE_AUTHOR 0x80
+
+#define HA_FLAG_PERM_RW (BLE_ATT_F_READ | BLE_ATT_F_WRITE)
+
+#define BLE_ATT_ACCESS_OP_READ 1
+#define BLE_ATT_ACCESS_OP_WRITE 2
+
+/** Default ATT MTU. Also the minimum. */
+#define BLE_ATT_MTU_DFLT 23
+
+/**
+ * An ATT MTU of 527 allows the largest ATT command (signed write) to contain a
+ * 512-byte attribute value.
+ */
+#define BLE_ATT_MTU_MAX 527
+
+/**
+ * Reads a locally registered attribute. If the specified attribute handle
+ * corresponds to a GATT characteristic value or descriptor, the read is
+ * performed by calling the registered GATT access callback.
+ *
+ * @param attr_handle The 16-bit handle of the attribute to read.
+ * @param out_om On success, this is made to point to a
+ * newly-allocated mbuf containing the
+ * attribute data read.
+ *
+ * @return 0 on success;
+ * NimBLE host ATT return code if the attribute
+ * access callback reports failure;
+ * NimBLE host core return code on unexpected
+ * error.
+ */
+int ble_att_svr_read_local(uint16_t attr_handle, struct os_mbuf **out_om);
+
+/**
+ * Writes a locally registered attribute. This function consumes the supplied
+ * mbuf regardless of the outcome. If the specified attribute handle
+ * corresponds to a GATT characteristic value or descriptor, the write is
+ * performed by calling the registered GATT access callback.
+ *
+ * @param attr_handle The 16-bit handle of the attribute to write.
+ * @param om The value to write to the attribute.
+ *
+ * @return 0 on success;
+ * NimBLE host ATT return code if the attribute
+ * access callback reports failure;
+ * NimBLE host core return code on unexpected
+ * error.
+ */
+int ble_att_svr_write_local(uint16_t attr_handle, struct os_mbuf *om);
+
+/**
+ * Retrieves the ATT MTU of the specified connection. If an MTU exchange for
+ * this connection has occurred, the MTU is the lower of the two peers'
+ * preferred values. Otherwise, the MTU is the default value of 23.
+ *
+ * @param conn_handle The handle of the connection to query.
+ *
+ * @return The specified connection's ATT MTU, or 0 if
+ * there is no such connection.
+ */
+uint16_t ble_att_mtu(uint16_t conn_handle);
+
+/**
+ * Retrieves the preferred ATT MTU. This is the value indicated by the device
+ * during an ATT MTU exchange.
+ *
+ * @return The preferred ATT MTU.
+ */
+uint16_t ble_att_preferred_mtu(void);
+
+/**
+ * Sets the preferred ATT MTU; the device will indicate this value in all
+ * subsequent ATT MTU exchanges. The ATT MTU of a connection is equal to the
+ * lower of the two peers' preferred MTU values. The ATT MTU is what dictates
+ * the maximum size of any message sent during a GATT procedure.
+ *
+ * The specified MTU must be within the following range: [23, BLE_ATT_MTU_MAX].
+ * 23 is a minimum imposed by the Bluetooth specification; BLE_ATT_MTU_MAX is a
+ * NimBLE compile-time setting.
+ *
+ * @param mtu The preferred ATT MTU.
+ *
+ * @return 0 on success;
+ * BLE_HS_EINVAL if the specified value is not
+ * within the allowed range.
+ */
+int ble_att_set_preferred_mtu(uint16_t mtu);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_eddystone.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_eddystone.h
new file mode 100644
index 00000000..76b7e2b0
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_eddystone.h
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_EDDYSTONE_
+#define H_BLE_EDDYSTONE_
+
+/**
+ * @brief Eddystone - BLE beacon from Google
+ * @defgroup bt_eddystone Eddystone - BLE beacon from Google
+ * @ingroup bt_host
+ * @{
+ */
+
+#include <inttypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct ble_hs_adv_fields;
+
+#define BLE_EDDYSTONE_MAX_UUIDS16 3
+#define BLE_EDDYSTONE_URL_MAX_LEN 17
+
+#define BLE_EDDYSTONE_URL_SCHEME_HTTP_WWW 0
+#define BLE_EDDYSTONE_URL_SCHEME_HTTPS_WWW 1
+#define BLE_EDDYSTONE_URL_SCHEME_HTTP 2
+#define BLE_EDDYSTONE_URL_SCHEME_HTTPS 3
+
+#define BLE_EDDYSTONE_URL_SUFFIX_COM_SLASH 0x00
+#define BLE_EDDYSTONE_URL_SUFFIX_ORG_SLASH 0x01
+#define BLE_EDDYSTONE_URL_SUFFIX_EDU_SLASH 0x02
+#define BLE_EDDYSTONE_URL_SUFFIX_NET_SLASH 0x03
+#define BLE_EDDYSTONE_URL_SUFFIX_INFO_SLASH 0x04
+#define BLE_EDDYSTONE_URL_SUFFIX_BIZ_SLASH 0x05
+#define BLE_EDDYSTONE_URL_SUFFIX_GOV_SLASH 0x06
+#define BLE_EDDYSTONE_URL_SUFFIX_COM 0x07
+#define BLE_EDDYSTONE_URL_SUFFIX_ORG 0x08
+#define BLE_EDDYSTONE_URL_SUFFIX_EDU 0x09
+#define BLE_EDDYSTONE_URL_SUFFIX_NET 0x0a
+#define BLE_EDDYSTONE_URL_SUFFIX_INFO 0x0b
+#define BLE_EDDYSTONE_URL_SUFFIX_BIZ 0x0c
+#define BLE_EDDYSTONE_URL_SUFFIX_GOV 0x0d
+#define BLE_EDDYSTONE_URL_SUFFIX_NONE 0xff
+
+/**
+ * Configures the device to advertise Eddystone UID beacons.
+ *
+ * @param adv_fields The base advertisement fields to transform into
+ * an eddystone beacon. All configured fields
+ * are preserved; you probably want to clear
+ * this struct before calling this function.
+ * @param uid The 16-byte UID to advertise.
+ * @param measured_power The Measured Power (RSSI value at 0 Meter).
+ *
+ * @return 0 on success;
+ * BLE_HS_EBUSY if advertising is in progress;
+ * BLE_HS_EMSGSIZE if the specified data is too
+ * large to fit in an advertisement;
+ * Other nonzero on failure.
+ */
+int ble_eddystone_set_adv_data_uid(struct ble_hs_adv_fields *adv_fields,
+ void *uid, int8_t measured_power);
+
+/**
+ * Configures the device to advertise Eddystone URL beacons.
+ *
+ * @param adv_fields The base advertisement fields to transform into
+ * an eddystone beacon. All configured fields
+ * are preserved; you probably want to clear
+ * this struct before calling this function.
+ * @param url_scheme The prefix of the URL; one of the
+ * BLE_EDDYSTONE_URL_SCHEME values.
+ * @param url_body The middle of the URL. Don't include the
+ * suffix if there is a suitable suffix code.
+ * @param url_body_len The string length of the url_body argument.
+ * @param url_suffix The suffix of the URL; one of the
+ * BLE_EDDYSTONE_URL_SUFFIX values; use
+ * BLE_EDDYSTONE_URL_SUFFIX_NONE if the suffix
+ * is embedded in the body argument.
+ * @param measured_power The Measured Power (RSSI value at 0 Meter).
+ *
+ * @return 0 on success;
+ * BLE_HS_EBUSY if advertising is in progress;
+ * BLE_HS_EMSGSIZE if the specified data is too
+ * large to fit in an advertisement;
+ * Other nonzero on failure.
+ */
+int ble_eddystone_set_adv_data_url(struct ble_hs_adv_fields *adv_fields,
+ uint8_t url_scheme, char *url_body,
+ uint8_t url_body_len, uint8_t suffix,
+ int8_t measured_power);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_gap.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_gap.h
new file mode 100644
index 00000000..b58f350f
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_gap.h
@@ -0,0 +1,2052 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_GAP_
+#define H_BLE_GAP_
+
+/**
+ * @brief Bluetooth Host Generic Access Profile (GAP)
+ * @defgroup bt_host_gap Bluetooth Host Generic Access Profile (GAP)
+ * @ingroup bt_host
+ * @{
+ */
+
+#include <inttypes.h>
+#include "host/ble_hs.h"
+#include "host/ble_hs_adv.h"
+#include "syscfg/syscfg.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct hci_le_conn_complete;
+struct hci_conn_update;
+
+/** 30 ms. */
+#define BLE_GAP_ADV_FAST_INTERVAL1_MIN (30 * 1000 / BLE_HCI_ADV_ITVL)
+
+/** 60 ms. */
+#define BLE_GAP_ADV_FAST_INTERVAL1_MAX (60 * 1000 / BLE_HCI_ADV_ITVL)
+
+/** 100 ms. */
+#define BLE_GAP_ADV_FAST_INTERVAL2_MIN (100 * 1000 / BLE_HCI_ADV_ITVL)
+
+/** 150 ms. */
+#define BLE_GAP_ADV_FAST_INTERVAL2_MAX (150 * 1000 / BLE_HCI_ADV_ITVL)
+
+/** 30 ms; active scanning. */
+#define BLE_GAP_SCAN_FAST_INTERVAL_MIN (30 * 1000 / BLE_HCI_ADV_ITVL)
+
+/** 60 ms; active scanning. */
+#define BLE_GAP_SCAN_FAST_INTERVAL_MAX (60 * 1000 / BLE_HCI_ADV_ITVL)
+
+/** 11.25 ms; limited discovery interval. */
+#define BLE_GAP_LIM_DISC_SCAN_INT (11.25 * 1000 / BLE_HCI_SCAN_ITVL)
+
+/** 11.25 ms; limited discovery window (not from the spec). */
+#define BLE_GAP_LIM_DISC_SCAN_WINDOW (11.25 * 1000 / BLE_HCI_SCAN_ITVL)
+
+/** 30 ms; active scanning. */
+#define BLE_GAP_SCAN_FAST_WINDOW (30 * 1000 / BLE_HCI_SCAN_ITVL)
+
+/* 30.72 seconds; active scanning. */
+#define BLE_GAP_SCAN_FAST_PERIOD (30.72 * 1000)
+
+/** 1.28 seconds; background scanning. */
+#define BLE_GAP_SCAN_SLOW_INTERVAL1 (1280 * 1000 / BLE_HCI_SCAN_ITVL)
+
+/** 11.25 ms; background scanning. */
+#define BLE_GAP_SCAN_SLOW_WINDOW1 (11.25 * 1000 / BLE_HCI_SCAN_ITVL)
+
+/** 10.24 seconds. */
+#define BLE_GAP_DISC_DUR_DFLT (10.24 * 1000)
+
+/** 30 seconds (not from the spec). */
+#define BLE_GAP_CONN_DUR_DFLT (30 * 1000)
+
+/** 1 second. */
+#define BLE_GAP_CONN_PAUSE_CENTRAL (1 * 1000)
+
+/** 5 seconds. */
+#define BLE_GAP_CONN_PAUSE_PERIPHERAL (5 * 1000)
+
+/* 30 ms. */
+#define BLE_GAP_INITIAL_CONN_ITVL_MIN (30 * 1000 / BLE_HCI_CONN_ITVL)
+
+/* 50 ms. */
+#define BLE_GAP_INITIAL_CONN_ITVL_MAX (50 * 1000 / BLE_HCI_CONN_ITVL)
+
+/** Default channels mask: all three channels are used. */
+#define BLE_GAP_ADV_DFLT_CHANNEL_MAP 0x07
+
+#define BLE_GAP_INITIAL_CONN_LATENCY 0
+#define BLE_GAP_INITIAL_SUPERVISION_TIMEOUT 0x0100
+#define BLE_GAP_INITIAL_CONN_MIN_CE_LEN 0x0010
+#define BLE_GAP_INITIAL_CONN_MAX_CE_LEN 0x0300
+
+#define BLE_GAP_ROLE_MASTER 0
+#define BLE_GAP_ROLE_SLAVE 1
+
+#define BLE_GAP_EVENT_CONNECT 0
+#define BLE_GAP_EVENT_DISCONNECT 1
+/* Reserved 2 */
+#define BLE_GAP_EVENT_CONN_UPDATE 3
+#define BLE_GAP_EVENT_CONN_UPDATE_REQ 4
+#define BLE_GAP_EVENT_L2CAP_UPDATE_REQ 5
+#define BLE_GAP_EVENT_TERM_FAILURE 6
+#define BLE_GAP_EVENT_DISC 7
+#define BLE_GAP_EVENT_DISC_COMPLETE 8
+#define BLE_GAP_EVENT_ADV_COMPLETE 9
+#define BLE_GAP_EVENT_ENC_CHANGE 10
+#define BLE_GAP_EVENT_PASSKEY_ACTION 11
+#define BLE_GAP_EVENT_NOTIFY_RX 12
+#define BLE_GAP_EVENT_NOTIFY_TX 13
+#define BLE_GAP_EVENT_SUBSCRIBE 14
+#define BLE_GAP_EVENT_MTU 15
+#define BLE_GAP_EVENT_IDENTITY_RESOLVED 16
+#define BLE_GAP_EVENT_REPEAT_PAIRING 17
+#define BLE_GAP_EVENT_PHY_UPDATE_COMPLETE 18
+#define BLE_GAP_EVENT_EXT_DISC 19
+#define BLE_GAP_EVENT_PERIODIC_SYNC 20
+#define BLE_GAP_EVENT_PERIODIC_REPORT 21
+#define BLE_GAP_EVENT_PERIODIC_SYNC_LOST 22
+#define BLE_GAP_EVENT_SCAN_REQ_RCVD 23
+#define BLE_GAP_EVENT_PERIODIC_TRANSFER 24
+
+/*** Reason codes for the subscribe GAP event. */
+
+/** Peer's CCCD subscription state changed due to a descriptor write. */
+#define BLE_GAP_SUBSCRIBE_REASON_WRITE 1
+
+/** Peer's CCCD subscription state cleared due to connection termination. */
+#define BLE_GAP_SUBSCRIBE_REASON_TERM 2
+
+/**
+ * Peer's CCCD subscription state changed due to restore from persistence
+ * (bonding restored).
+ */
+#define BLE_GAP_SUBSCRIBE_REASON_RESTORE 3
+
+#define BLE_GAP_REPEAT_PAIRING_RETRY 1
+#define BLE_GAP_REPEAT_PAIRING_IGNORE 2
+
+/** Connection security state */
+struct ble_gap_sec_state {
+ /** If connection is encrypted */
+ unsigned encrypted:1;
+
+ /** If connection is authenticated */
+ unsigned authenticated:1;
+
+ /** If connection is bonded (security information is stored) */
+ unsigned bonded:1;
+
+ /** Size of a key used for encryption */
+ unsigned key_size:5;
+};
+
+/** Advertising parameters */
+struct ble_gap_adv_params {
+ /** Advertising mode. Can be one of following constants:
+ * - BLE_GAP_CONN_MODE_NON (non-connectable; 3.C.9.3.2).
+ * - BLE_GAP_CONN_MODE_DIR (directed-connectable; 3.C.9.3.3).
+ * - BLE_GAP_CONN_MODE_UND (undirected-connectable; 3.C.9.3.4).
+ */
+ uint8_t conn_mode;
+ /** Discoverable mode. Can be one of following constants:
+ * - BLE_GAP_DISC_MODE_NON (non-discoverable; 3.C.9.2.2).
+ * - BLE_GAP_DISC_MODE_LTD (limited-discoverable; 3.C.9.2.3).
+ * - BLE_GAP_DISC_MODE_GEN (general-discoverable; 3.C.9.2.4).
+ */
+ uint8_t disc_mode;
+
+ /** Minimum advertising interval, if 0 stack use sane defaults */
+ uint16_t itvl_min;
+ /** Maximum advertising interval, if 0 stack use sane defaults */
+ uint16_t itvl_max;
+ /** Advertising channel map , if 0 stack use sane defaults */
+ uint8_t channel_map;
+
+ /** Advertising Filter policy */
+ uint8_t filter_policy;
+
+ /** If do High Duty cycle for Directed Advertising */
+ uint8_t high_duty_cycle:1;
+};
+
+/** @brief Connection descriptor */
+struct ble_gap_conn_desc {
+ /** Connection security state */
+ struct ble_gap_sec_state sec_state;
+
+ /** Local identity address */
+ ble_addr_t our_id_addr;
+
+ /** Peer identity address */
+ ble_addr_t peer_id_addr;
+
+ /** Local over-the-air address */
+ ble_addr_t our_ota_addr;
+
+ /** Peer over-the-air address */
+ ble_addr_t peer_ota_addr;
+
+ /** Connection handle */
+ uint16_t conn_handle;
+
+ /** Connection interval */
+ uint16_t conn_itvl;
+
+ /** Connection latency */
+ uint16_t conn_latency;
+
+ /** Connection supervision timeout */
+ uint16_t supervision_timeout;
+
+ /** Connection Role
+ * Possible values BLE_GAP_ROLE_SLAVE or BLE_GAP_ROLE_MASTER
+ */
+ uint8_t role;
+
+ /** Master clock accuracy */
+ uint8_t master_clock_accuracy;
+};
+
+/** @brief Connection parameters */
+struct ble_gap_conn_params {
+ /** Scan interval in 0.625ms units */
+ uint16_t scan_itvl;
+
+ /** Scan window in 0.625ms units */
+ uint16_t scan_window;
+
+ /** Minimum value for connection interval in 1.25ms units */
+ uint16_t itvl_min;
+
+ /** Maximum value for connection interval in 1.25ms units */
+ uint16_t itvl_max;
+
+ /** Connection latency */
+ uint16_t latency;
+
+ /** Supervision timeout in 10ms units */
+ uint16_t supervision_timeout;
+
+ /** Minimum length of connection event in 0.625ms units */
+ uint16_t min_ce_len;
+
+ /** Maximum length of connection event in 0.625ms units */
+ uint16_t max_ce_len;
+};
+
+/** @brief Extended discovery parameters */
+struct ble_gap_ext_disc_params {
+ /** Scan interval in 0.625ms units */
+ uint16_t itvl;
+
+ /** Scan window in 0.625ms units */
+ uint16_t window;
+
+ /** If passive scan should be used */
+ uint8_t passive:1;
+};
+
+/** @brief Discovery parameters */
+struct ble_gap_disc_params {
+ /** Scan interval in 0.625ms units */
+ uint16_t itvl;
+
+ /** Scan window in 0.625ms units */
+ uint16_t window;
+
+ /** Scan filter policy */
+ uint8_t filter_policy;
+
+ /** If limited discovery procedure should be used */
+ uint8_t limited:1;
+
+ /** If passive scan should be used */
+ uint8_t passive:1;
+
+ /** If enable duplicates filtering */
+ uint8_t filter_duplicates:1;
+};
+
+/** @brief Connection parameters update parameters */
+struct ble_gap_upd_params {
+ /** Minimum value for connection interval in 1.25ms units */
+ uint16_t itvl_min;
+
+ /** Maximum value for connection interval in 1.25ms units */
+ uint16_t itvl_max;
+
+ /** Connection latency */
+ uint16_t latency;
+
+ /** Supervision timeout in 10ms units */
+ uint16_t supervision_timeout;
+
+ /** Minimum length of connection event in 0.625ms units */
+ uint16_t min_ce_len;
+
+ /** Maximum length of connection event in 0.625ms units */
+ uint16_t max_ce_len;
+};
+
+/** @brief Passkey query */
+struct ble_gap_passkey_params {
+ /** Passkey action, can be one of following constants:
+ * - BLE_SM_IOACT_NONE
+ * - BLE_SM_IOACT_OOB
+ * - BLE_SM_IOACT_INPUT
+ * - BLE_SM_IOACT_DISP
+ * - BLE_SM_IOACT_NUMCMP
+ */
+ uint8_t action;
+
+ /** Passkey to compare, valid for BLE_SM_IOACT_NUMCMP action */
+ uint32_t numcmp;
+};
+
+#if MYNEWT_VAL(BLE_EXT_ADV)
+
+#define BLE_GAP_EXT_ADV_DATA_STATUS_COMPLETE 0x00
+#define BLE_GAP_EXT_ADV_DATA_STATUS_INCOMPLETE 0x01
+#define BLE_GAP_EXT_ADV_DATA_STATUS_TRUNCATED 0x02
+
+/** @brief Extended advertising report */
+struct ble_gap_ext_disc_desc {
+ /** Report properties bitmask
+ * - BLE_HCI_ADV_CONN_MASK
+ * - BLE_HCI_ADV_SCAN_MASK
+ * - BLE_HCI_ADV_DIRECT_MASK
+ * - BLE_HCI_ADV_SCAN_RSP_MASK
+ * - BLE_HCI_ADV_LEGACY_MASK
+ * */
+ uint8_t props;
+
+ /** Advertising data status, can be one of following constants:
+ * - BLE_GAP_EXT_ADV_DATA_STATUS_COMPLETE
+ * - BLE_GAP_EXT_ADV_DATA_STATUS_INCOMPLETE
+ * - BLE_GAP_EXT_ADV_DATA_STATUS_TRUNCATED
+ */
+ uint8_t data_status;
+
+ /** Legacy advertising PDU type. Valid if BLE_HCI_ADV_LEGACY_MASK props is
+ * set. Can be one of following constants:
+ * - BLE_HCI_ADV_RPT_EVTYPE_ADV_IND
+ * - BLE_HCI_ADV_RPT_EVTYPE_DIR_IND
+ * - BLE_HCI_ADV_RPT_EVTYPE_SCAN_IND
+ * - BLE_HCI_ADV_RPT_EVTYPE_NONCONN_IND
+ * - BLE_HCI_ADV_RPT_EVTYPE_SCAN_RSP
+ */
+ uint8_t legacy_event_type;
+
+ /** Advertiser address */
+ ble_addr_t addr;
+
+ /** Received signal strength indication in dBm (127 if unavailable) */
+ int8_t rssi;
+
+ /** Advertiser transmit power in dBm (127 if unavailable) */
+ int8_t tx_power;
+
+ /** Advertising Set ID */
+ uint8_t sid;
+
+ /** Primary advertising PHY, can be one of following constants:
+ * - BLE_HCI_LE_PHY_1M
+ * - BLE_HCI_LE_PHY_CODED
+ */
+ uint8_t prim_phy;
+
+ /** Secondary advertising PHY, can be one of following constants:
+ * - BLE_HCI_LE_PHY_1M
+ * - LE_HCI_LE_PHY_2M
+ * - BLE_HCI_LE_PHY_CODED
+ */
+ uint8_t sec_phy;
+
+ /** Periodic advertising interval. 0 if no periodic advertising. */
+ uint16_t periodic_adv_itvl;
+
+ /** Advertising Data length */
+ uint8_t length_data;
+
+ /** Advertising data */
+ const uint8_t *data;
+
+ /** Directed advertising address. Valid if BLE_HCI_ADV_DIRECT_MASK props is
+ * set (BLE_ADDR_ANY otherwise).
+ */
+ ble_addr_t direct_addr;
+};
+#endif
+
+/** @brief Advertising report */
+struct ble_gap_disc_desc {
+ /** Advertising PDU type. Can be one of following constants:
+ * - BLE_HCI_ADV_RPT_EVTYPE_ADV_IND
+ * - BLE_HCI_ADV_RPT_EVTYPE_DIR_IND
+ * - BLE_HCI_ADV_RPT_EVTYPE_SCAN_IND
+ * - BLE_HCI_ADV_RPT_EVTYPE_NONCONN_IND
+ * - BLE_HCI_ADV_RPT_EVTYPE_SCAN_RSP
+ */
+ uint8_t event_type;
+
+ /** Advertising Data length */
+ uint8_t length_data;
+
+ /** Advertiser address */
+ ble_addr_t addr;
+
+ /** Received signal strength indication in dBm (127 if unavailable) */
+ int8_t rssi;
+
+ /** Advertising data */
+ const uint8_t *data;
+
+ /** Directed advertising address. Valid for BLE_HCI_ADV_RPT_EVTYPE_DIR_IND
+ * event type (BLE_ADDR_ANY otherwise).
+ */
+ ble_addr_t direct_addr;
+};
+
+struct ble_gap_repeat_pairing {
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+
+ /** Properties of the existing bond. */
+ uint8_t cur_key_size;
+ uint8_t cur_authenticated:1;
+ uint8_t cur_sc:1;
+
+ /**
+ * Properties of the imminent secure link if the pairing procedure is
+ * allowed to continue.
+ */
+ uint8_t new_key_size;
+ uint8_t new_authenticated:1;
+ uint8_t new_sc:1;
+ uint8_t new_bonding:1;
+};
+
+/**
+ * Represents a GAP-related event. When such an event occurs, the host
+ * notifies the application by passing an instance of this structure to an
+ * application-specified callback.
+ */
+struct ble_gap_event {
+ /**
+ * Indicates the type of GAP event that occurred. This is one of the
+ * BLE_GAP_EVENT codes.
+ */
+ uint8_t type;
+
+ /**
+ * A discriminated union containing additional details concerning the GAP
+ * event. The 'type' field indicates which member of the union is valid.
+ */
+ union {
+ /**
+ * Represents a connection attempt. Valid for the following event
+ * types:
+ * o BLE_GAP_EVENT_CONNECT
+ */
+ struct {
+ /**
+ * The status of the connection attempt;
+ * o 0: the connection was successfully established.
+ * o BLE host error code: the connection attempt failed for
+ * the specified reason.
+ */
+ int status;
+
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+ } connect;
+
+ /**
+ * Represents a terminated connection. Valid for the following event
+ * types:
+ * o BLE_GAP_EVENT_DISCONNECT
+ */
+ struct {
+ /**
+ * A BLE host return code indicating the reason for the
+ * disconnect.
+ */
+ int reason;
+
+ /** Information about the connection prior to termination. */
+ struct ble_gap_conn_desc conn;
+ } disconnect;
+
+ /**
+ * Represents an advertising report received during a discovery
+ * procedure. Valid for the following event types:
+ * o BLE_GAP_EVENT_DISC
+ */
+ struct ble_gap_disc_desc disc;
+
+#if MYNEWT_VAL(BLE_EXT_ADV)
+ /**
+ * Represents an extended advertising report received during a discovery
+ * procedure. Valid for the following event types:
+ * o BLE_GAP_EVENT_EXT_DISC
+ */
+ struct ble_gap_ext_disc_desc ext_disc;
+#endif
+
+ /**
+ * Represents a completed discovery procedure. Valid for the following
+ * event types:
+ * o BLE_GAP_EVENT_DISC_COMPLETE
+ */
+ struct {
+ /**
+ * The reason the discovery procedure stopped. Typical reason
+ * codes are:
+ * o 0: Duration expired.
+ * o BLE_HS_EPREEMPTED: Host aborted procedure to configure a
+ * peer's identity.
+ */
+ int reason;
+ } disc_complete;
+
+ /**
+ * Represents a completed advertise procedure. Valid for the following
+ * event types:
+ * o BLE_GAP_EVENT_ADV_COMPLETE
+ */
+ struct {
+ /**
+ * The reason the advertise procedure stopped. Typical reason
+ * codes are:
+ * o 0: Terminated due to connection.
+ * o BLE_HS_ETIMEOUT: Duration expired.
+ * o BLE_HS_EPREEMPTED: Host aborted procedure to configure a
+ * peer's identity.
+ */
+ int reason;
+
+#if MYNEWT_VAL(BLE_EXT_ADV)
+ /** Advertising instance */
+ uint8_t instance;
+ /** The handle of the relevant connection - valid if reason=0 */
+ uint16_t conn_handle;
+ /**
+ * Number of completed extended advertising events
+ *
+ * This field is only valid if non-zero max_events was passed to
+ * ble_gap_ext_adv_start() and advertising completed due to duration
+ * timeout or max events transmitted.
+ * */
+ uint8_t num_ext_adv_events;
+#endif
+ } adv_complete;
+
+ /**
+ * Represents an attempt to update a connection's parameters. If the
+ * attempt was successful, the connection's descriptor reflects the
+ * updated parameters.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_CONN_UPDATE
+ */
+ struct {
+ /**
+ * The result of the connection update attempt;
+ * o 0: the connection was successfully updated.
+ * o BLE host error code: the connection update attempt failed
+ * for the specified reason.
+ */
+ int status;
+
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+ } conn_update;
+
+ /**
+ * Represents a peer's request to update the connection parameters.
+ * This event is generated when a peer performs any of the following
+ * procedures:
+ * o L2CAP Connection Parameter Update Procedure
+ * o Link-Layer Connection Parameters Request Procedure
+ *
+ * To reject the request, return a non-zero HCI error code. The value
+ * returned is the reject reason given to the controller.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_L2CAP_UPDATE_REQ
+ * o BLE_GAP_EVENT_CONN_UPDATE_REQ
+ */
+ struct {
+ /**
+ * Indicates the connection parameters that the peer would like to
+ * use.
+ */
+ const struct ble_gap_upd_params *peer_params;
+
+ /**
+ * Indicates the connection parameters that the local device would
+ * like to use. The application callback should fill this in. By
+ * default, this struct contains the requested parameters (i.e.,
+ * it is a copy of 'peer_params').
+ */
+ struct ble_gap_upd_params *self_params;
+
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+ } conn_update_req;
+
+ /**
+ * Represents a failed attempt to terminate an established connection.
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_TERM_FAILURE
+ */
+ struct {
+ /**
+ * A BLE host return code indicating the reason for the failure.
+ */
+ int status;
+
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+ } term_failure;
+
+ /**
+ * Represents an attempt to change the encrypted state of a
+ * connection. If the attempt was successful, the connection
+ * descriptor reflects the updated encrypted state.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_ENC_CHANGE
+ */
+ struct {
+ /**
+ * Indicates the result of the encryption state change attempt;
+ * o 0: the encrypted state was successfully updated;
+ * o BLE host error code: the encryption state change attempt
+ * failed for the specified reason.
+ */
+ int status;
+
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+ } enc_change;
+
+ /**
+ * Represents a passkey query needed to complete a pairing procedure.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_PASSKEY_ACTION
+ */
+ struct {
+ /** Contains details about the passkey query. */
+ struct ble_gap_passkey_params params;
+
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+ } passkey;
+
+ /**
+ * Represents a received ATT notification or indication.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_NOTIFY_RX
+ */
+ struct {
+ /**
+ * The contents of the notification or indication. If the
+ * application wishes to retain this mbuf for later use, it must
+ * set this pointer to NULL to prevent the stack from freeing it.
+ */
+ struct os_mbuf *om;
+
+ /** The handle of the relevant ATT attribute. */
+ uint16_t attr_handle;
+
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+
+ /**
+ * Whether the received command is a notification or an
+ * indication;
+ * o 0: Notification;
+ * o 1: Indication.
+ */
+ uint8_t indication:1;
+ } notify_rx;
+
+ /**
+ * Represents a transmitted ATT notification or indication, or a
+ * completed indication transaction.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_NOTIFY_TX
+ */
+ struct {
+ /**
+ * The status of the notification or indication transaction;
+ * o 0: Command successfully sent;
+ * o BLE_HS_EDONE: Confirmation (indication ack) received;
+ * o BLE_HS_ETIMEOUT: Confirmation (indication ack) never
+ * received;
+ * o Other return code: Error.
+ */
+ int status;
+
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+
+ /** The handle of the relevant characteristic value. */
+ uint16_t attr_handle;
+
+ /**
+ * Whether the transmitted command is a notification or an
+ * indication;
+ * o 0: Notification;
+ * o 1: Indication.
+ */
+ uint8_t indication:1;
+ } notify_tx;
+
+ /**
+ * Represents a state change in a peer's subscription status. In this
+ * comment, the term "update" is used to refer to either a notification
+ * or an indication. This event is triggered by any of the following
+ * occurrences:
+ * o Peer enables or disables updates via a CCCD write.
+ * o Connection is about to be terminated and the peer is
+ * subscribed to updates.
+ * o Peer is now subscribed to updates after its state was restored
+ * from persistence. This happens when bonding is restored.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_SUBSCRIBE
+ */
+ struct {
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+
+ /** The value handle of the relevant characteristic. */
+ uint16_t attr_handle;
+
+ /** One of the BLE_GAP_SUBSCRIBE_REASON codes. */
+ uint8_t reason;
+
+ /** Whether the peer was previously subscribed to notifications. */
+ uint8_t prev_notify:1;
+
+ /** Whether the peer is currently subscribed to notifications. */
+ uint8_t cur_notify:1;
+
+ /** Whether the peer was previously subscribed to indications. */
+ uint8_t prev_indicate:1;
+
+ /** Whether the peer is currently subscribed to indications. */
+ uint8_t cur_indicate:1;
+ } subscribe;
+
+ /**
+ * Represents a change in an L2CAP channel's MTU.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_MTU
+ */
+ struct {
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+
+ /**
+ * Indicates the channel whose MTU has been updated; either
+ * BLE_L2CAP_CID_ATT or the ID of a connection-oriented channel.
+ */
+ uint16_t channel_id;
+
+ /* The channel's new MTU. */
+ uint16_t value;
+ } mtu;
+
+ /**
+ * Represents a change in peer's identity. This is issued after
+ * successful pairing when Identity Address Information was received.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_IDENTITY_RESOLVED
+ */
+ struct {
+ /** The handle of the relevant connection. */
+ uint16_t conn_handle;
+ } identity_resolved;
+
+ /**
+ * Represents a peer's attempt to pair despite a bond already existing.
+ * The application has two options for handling this event type:
+ * o Retry: Return BLE_GAP_REPEAT_PAIRING_RETRY after deleting the
+ * conflicting bond. The stack will verify the bond has
+ * been deleted and continue the pairing procedure. If
+ * the bond is still present, this event will be reported
+ * again.
+ * o Ignore: Return BLE_GAP_REPEAT_PAIRING_IGNORE. The stack will
+ * silently ignore the pairing request.
+ *
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_REPEAT_PAIRING
+ */
+ struct ble_gap_repeat_pairing repeat_pairing;
+
+ /**
+ * Represents a change of PHY. This is issue after successful
+ * change on PHY.
+ */
+ struct {
+ int status;
+ uint16_t conn_handle;
+
+ /**
+ * Indicates enabled TX/RX PHY. Possible values:
+ * o BLE_GAP_LE_PHY_1M
+ * o BLE_GAP_LE_PHY_2M
+ * o BLE_GAP_LE_PHY_CODED
+ */
+ uint8_t tx_phy;
+ uint8_t rx_phy;
+ } phy_updated;
+#if MYNEWT_VAL(BLE_PERIODIC_ADV)
+ /**
+ * Represents a periodic advertising sync established during discovery
+ * procedure. Valid for the following event types:
+ * o BLE_GAP_EVENT_PERIODIC_SYNC
+ */
+ struct {
+ /** BLE_ERR_SUCCESS on success or error code on failure. Other
+ * fields are valid only for success
+ */
+ uint8_t status;
+ /** Periodic sync handle */
+ uint16_t sync_handle;
+
+ /** Advertising Set ID */
+ uint8_t sid;
+
+ /** Advertiser address */
+ ble_addr_t adv_addr;
+
+ /** Advertising PHY, can be one of following constants:
+ * - BLE_HCI_LE_PHY_1M
+ * - LE_HCI_LE_PHY_2M
+ * - BLE_HCI_LE_PHY_CODED
+ */
+ uint8_t adv_phy;
+
+ /** Periodic advertising interval */
+ uint16_t per_adv_ival;
+
+ /** Advertiser clock accuracy */
+ uint8_t adv_clk_accuracy;
+ } periodic_sync;
+
+ /**
+ * Represents a periodic advertising report received on established
+ * sync. Valid for the following event types:
+ * o BLE_GAP_EVENT_PERIODIC_REPORT
+ */
+ struct {
+ /** Periodic sync handle */
+ uint16_t sync_handle;
+
+ /** Advertiser transmit power in dBm (127 if unavailable) */
+ int8_t tx_power;
+
+ /** Received signal strength indication in dBm (127 if unavailable) */
+ int8_t rssi;
+
+ /** Advertising data status, can be one of following constants:
+ * - BLE_HCI_PERIODIC_DATA_STATUS_COMPLETE
+ * - BLE_HCI_PERIODIC_DATA_STATUS_INCOMPLETE
+ * - BLE_HCI_PERIODIC_DATA_STATUS_TRUNCATED
+ */
+ uint8_t data_status;
+
+ /** Advertising Data length */
+ uint8_t data_length;
+
+ /** Advertising data */
+ const uint8_t *data;
+ } periodic_report;
+
+ /**
+ * Represents a periodic advertising sync lost of established sync.
+ * Sync lost reason can be BLE_HS_ETIMEOUT (sync timeout) or
+ * BLE_HS_EDONE (sync terminated locally).
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_PERIODIC_SYNC_LOST
+ */
+ struct {
+ /** Periodic sync handle */
+ uint16_t sync_handle;
+
+ /** Reason for sync lost, can be BLE_HS_ETIMEOUT for timeout or
+ * BLE_HS_EDONE for locally terminated sync
+ */
+ int reason;
+ } periodic_sync_lost;
+#endif
+
+#if MYNEWT_VAL(BLE_EXT_ADV)
+ /**
+ * Represents a scan request for an extended advertising instance where
+ * scan request notifications were enabled.
+ * Valid for the following event types:
+ * o BLE_GAP_EVENT_SCAN_REQ_RCVD
+ */
+ struct {
+ /** Extended advertising instance */
+ uint8_t instance;
+ /** Address of scanner */
+ ble_addr_t scan_addr;
+ } scan_req_rcvd;
+#endif
+#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER)
+ /**
+ * Represents a periodic advertising sync transfer received. Valid for
+ * the following event types:
+ * o BLE_GAP_EVENT_PERIODIC_TRANSFER
+ */
+ struct {
+ /** BLE_ERR_SUCCESS on success or error code on failure. Sync handle
+ * is valid only for success.
+ */
+ uint8_t status;
+
+ /** Periodic sync handle */
+ uint16_t sync_handle;
+
+ /** Connection handle */
+ uint16_t conn_handle;
+
+ /** Service Data */
+ uint16_t service_data;
+
+ /** Advertising Set ID */
+ uint8_t sid;
+
+ /** Advertiser address */
+ ble_addr_t adv_addr;
+
+ /** Advertising PHY, can be one of following constants:
+ * - BLE_HCI_LE_PHY_1M
+ * - LE_HCI_LE_PHY_2M
+ * - BLE_HCI_LE_PHY_CODED
+ */
+ uint8_t adv_phy;
+
+ /** Periodic advertising interval */
+ uint16_t per_adv_itvl;
+
+ /** Advertiser clock accuracy */
+ uint8_t adv_clk_accuracy;
+ } periodic_transfer;
+#endif
+ };
+};
+
+typedef int ble_gap_event_fn(struct ble_gap_event *event, void *arg);
+
+#define BLE_GAP_CONN_MODE_NON 0
+#define BLE_GAP_CONN_MODE_DIR 1
+#define BLE_GAP_CONN_MODE_UND 2
+
+#define BLE_GAP_DISC_MODE_NON 0
+#define BLE_GAP_DISC_MODE_LTD 1
+#define BLE_GAP_DISC_MODE_GEN 2
+
+/**
+ * Searches for a connection with the specified handle. If a matching
+ * connection is found, the supplied connection descriptor is filled
+ * correspondingly.
+ *
+ * @param handle The connection handle to search for.
+ * @param out_desc On success, this is populated with information relating to
+ * the matching connection. Pass NULL if you don't need this
+ * information.
+ *
+ * @return 0 on success, BLE_HS_ENOTCONN if no matching connection was
+ * found.
+ */
+int ble_gap_conn_find(uint16_t handle, struct ble_gap_conn_desc *out_desc);
+
+/**
+ * Searches for a connection with a peer with the specified address.
+ * If a matching connection is found, the supplied connection descriptor
+ * is filled correspondingly.
+ *
+ * @param addr The ble address of a connected peer device to search for.
+ * @param out_desc On success, this is populated with information relating to
+ * the matching connection. Pass NULL if you don't need this
+ * information.
+ *
+ * @return 0 on success, BLE_HS_ENOTCONN if no matching connection was
+ * found.
+ */
+int ble_gap_conn_find_by_addr(const ble_addr_t *addr,
+ struct ble_gap_conn_desc *out_desc);
+
+/**
+ * Configures a connection to use the specified GAP event callback. A
+ * connection's GAP event callback is first specified when the connection is
+ * created, either via advertising or initiation. This function replaces the
+ * callback that was last configured.
+ *
+ * @param conn_handle The handle of the connection to configure.
+ * @param cb The callback to associate with the connection.
+ * @param cb_arg An optional argument that the callback receives.
+ *
+ * @return 0 on success, BLE_HS_ENOTCONN if there is no connection
+ * with the specified handle.
+ */
+int ble_gap_set_event_cb(uint16_t conn_handle,
+ ble_gap_event_fn *cb, void *cb_arg);
+
+/** @brief Start advertising
+ *
+ * This function configures and start advertising procedure.
+ *
+ * @param own_addr_type The type of address the stack should use for itself.
+ * Valid values are:
+ * - BLE_OWN_ADDR_PUBLIC
+ * - BLE_OWN_ADDR_RANDOM
+ * - BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT
+ * - BLE_OWN_ADDR_RPA_RANDOM_DEFAULT
+ * @param direct_addr The peer's address for directed advertising. This
+ * parameter shall be non-NULL if directed advertising is
+ * being used.
+ * @param duration_ms The duration of the advertisement procedure. On
+ * expiration, the procedure ends and a
+ * BLE_GAP_EVENT_ADV_COMPLETE event is reported. Units are
+ * milliseconds. Specify BLE_HS_FOREVER for no expiration.
+ * @param adv_params Additional arguments specifying the particulars of the
+ * advertising procedure.
+ * @param cb The callback to associate with this advertising
+ * procedure. If advertising ends, the event is reported
+ * through this callback. If advertising results in a
+ * connection, the connection inherits this callback as its
+ * event-reporting mechanism.
+ * @param cb_arg The optional argument to pass to the callback function.
+ *
+ * @return 0 on success, error code on failure.
+ */
+int ble_gap_adv_start(uint8_t own_addr_type, const ble_addr_t *direct_addr,
+ int32_t duration_ms,
+ const struct ble_gap_adv_params *adv_params,
+ ble_gap_event_fn *cb, void *cb_arg);
+
+/**
+ * Stops the currently-active advertising procedure. A success return
+ * code indicates that advertising has been fully aborted and a new advertising
+ * procedure can be initiated immediately.
+ *
+ * NOTE: If the caller is running in the same task as the NimBLE host, or if it
+ * is running in a higher priority task than that of the host, care must be
+ * taken when restarting advertising. Under these conditions, the following is
+ * *not* a reliable method to restart advertising:
+ * ble_gap_adv_stop()
+ * ble_gap_adv_start()
+ *
+ * Instead, the call to `ble_gap_adv_start()` must be made in a separate event
+ * context. That is, `ble_gap_adv_start()` must be called asynchronously by
+ * enqueueing an event on the current task's event queue. See
+ * https://github.com/apache/mynewt-nimble/pull/211 for more information.
+ *
+ * @return 0 on success, BLE_HS_EALREADY if there is no active advertising
+ * procedure, other error code on failure.
+ */
+int ble_gap_adv_stop(void);
+
+/**
+ * Indicates whether an advertisement procedure is currently in progress.
+ *
+ * @return 0 if no advertisement procedure in progress, 1 otherwise.
+ */
+int ble_gap_adv_active(void);
+
+/**
+ * Configures the data to include in subsequent advertisements.
+ *
+ * @param data Buffer containing the advertising data.
+ * @param data_len The size of the advertising data, in bytes.
+ *
+ * @return 0 on succes, BLE_HS_EBUSY if advertising is in progress,
+ * other error code on failure.
+ */
+int ble_gap_adv_set_data(const uint8_t *data, int data_len);
+
+/**
+ * Configures the data to include in subsequent scan responses.
+ *
+ * @param data Buffer containing the scan response data.
+ * @param data_len The size of the response data, in bytes.
+ *
+ * @return 0 on succes, BLE_HS_EBUSY if advertising is in progress,
+ * other error code on failure.
+ */
+int ble_gap_adv_rsp_set_data(const uint8_t *data, int data_len);
+
+/**
+ * Configures the fields to include in subsequent advertisements. This is a
+ * convenience wrapper for ble_gap_adv_set_data().
+ *
+ * @param adv_fields Specifies the advertisement data.
+ *
+ * @return 0 on success,
+ * BLE_HS_EBUSY if advertising is in progress,
+ * BLE_HS_EMSGSIZE if the specified data is too large to
+ * fit in an advertisement,
+ * other error code on failure.
+ */
+int ble_gap_adv_set_fields(const struct ble_hs_adv_fields *rsp_fields);
+
+/**
+ * Configures the fields to include in subsequent scan responses. This is a
+ * convenience wrapper for ble_gap_adv_rsp_set_data().
+ *
+ * @param adv_fields Specifies the scan response data.
+ *
+ * @return 0 on success,
+ * BLE_HS_EBUSY if advertising is in progress,
+ * BLE_HS_EMSGSIZE if the specified data is too large to
+ * fit in a scan response,
+ * other error code on failure.
+ */
+int ble_gap_adv_rsp_set_fields(const struct ble_hs_adv_fields *rsp_fields);
+
+#if MYNEWT_VAL(BLE_EXT_ADV)
+/** @brief Extended advertising parameters */
+struct ble_gap_ext_adv_params {
+ /** If perform connectable advertising */
+ unsigned int connectable:1;
+
+ /** If perform scannable advertising */
+ unsigned int scannable:1;
+
+ /** If perform directed advertising */
+ unsigned int directed:1;
+
+ /** If perform high-duty directed advertising */
+ unsigned int high_duty_directed:1;
+
+ /** If use legacy PDUs for advertising */
+ unsigned int legacy_pdu:1;
+
+ /** If perform anonymous advertising */
+ unsigned int anonymous:1;
+
+ /** If include TX power in advertising PDU */
+ unsigned int include_tx_power:1;
+
+ /** If enable scan request notification */
+ unsigned int scan_req_notif:1;
+
+ /** Minimum advertising interval in 0.625ms units, if 0 stack use sane
+ * defaults
+ */
+ uint32_t itvl_min;
+
+ /** Maximum advertising interval in 0.625ms units, if 0 stack use sane
+ * defaults
+ */
+ uint32_t itvl_max;
+
+ /** Advertising channel map , if 0 stack use sane defaults */
+ uint8_t channel_map;
+
+ /** Own address type to be used by advertising instance */
+ uint8_t own_addr_type;
+
+ /** Peer address for directed advertising, valid only if directed is set */
+ ble_addr_t peer;
+
+ /** Advertising Filter policy */
+ uint8_t filter_policy;
+
+ /** Primary advertising PHY to use , can be one of following constants:
+ * - BLE_HCI_LE_PHY_1M
+ * - BLE_HCI_LE_PHY_CODED
+ */
+ uint8_t primary_phy;
+
+ /** Secondary advertising PHY to use, can be one of following constants:
+ * - BLE_HCI_LE_PHY_1M
+ * - LE_HCI_LE_PHY_2M
+ * - BLE_HCI_LE_PHY_CODED
+ */
+ uint8_t secondary_phy;
+
+ /** Preferred advertiser transmit power */
+ int8_t tx_power;
+
+ /** Advertising Set ID */
+ uint8_t sid;
+};
+
+/**
+ * Configure extended advertising instance
+ *
+ * @param instance Instance ID
+ * @param params Additional arguments specifying the particulars
+ * of the advertising.
+ * @param selected_tx_power Selected advertising transmit power will be
+ * stored in that param if non-NULL.
+ * @param cb The callback to associate with this advertising
+ * procedure. Advertising complete event is reported
+ * through this callback
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_ext_adv_configure(uint8_t instance,
+ const struct ble_gap_ext_adv_params *params,
+ int8_t *selected_tx_power,
+ ble_gap_event_fn *cb, void *cb_arg);
+
+/**
+ * Set random address for configured advertising instance.
+ *
+ * @param instance Instance ID
+ * @param addr Random address to be set
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_ext_adv_set_addr(uint8_t instance, const ble_addr_t *addr);
+
+/**
+ * Start advertising instance.
+ *
+ * @param instance Instance ID
+ * @param duration The duration of the advertisement procedure. On
+ * expiration, the procedure ends and
+ * a BLE_GAP_EVENT_ADV_COMPLETE event is reported.
+ * Units are 10 milliseconds. Specify 0 for no
+ * expiration.
+ * @params max_events Number of advertising events that should be sent
+ * before advertising ends and
+ * a BLE_GAP_EVENT_ADV_COMPLETE event is reported.
+ * Specify 0 for no limit.
+ *
+ * @return 0 on success, error code on failure.
+ */
+int ble_gap_ext_adv_start(uint8_t instance, int duration, int max_events);
+
+/**
+ * Stops advertising procedure for specified instance.
+ *
+ * @param instance Instance ID
+ *
+ * @return 0 on success, BLE_HS_EALREADY if there is no active advertising
+ * procedure for instance, other error code on failure.
+ */
+int ble_gap_ext_adv_stop(uint8_t instance);
+
+/**
+ * Configures the data to include in advertisements packets for specified
+ * advertising instance.
+ *
+ * @param instance Instance ID
+ * @param data Chain containing the advertising data.
+ *
+ * @return 0 on success or error code on failure.
+ */
+int ble_gap_ext_adv_set_data(uint8_t instance, struct os_mbuf *data);
+
+/**
+ * Configures the data to include in subsequent scan responses for specified
+ * advertisign instance.
+ *
+ * @param instance Instance ID
+ * @param data Chain containing the scan response data.
+ *
+ * @return 0 on success or error code on failure.
+ */
+
+int ble_gap_ext_adv_rsp_set_data(uint8_t instance, struct os_mbuf *data);
+
+/**
+ * Remove existing advertising instance.
+ *
+ * @param instance Instance ID
+ *
+ * @return 0 on success,
+ * BLE_HS_EBUSY if advertising is in progress,
+ * other error code on failure.
+ */
+int ble_gap_ext_adv_remove(uint8_t instance);
+
+/**
+ * Clear all existing advertising instances
+ * @return 0 on success,
+ * BLE_HS_EBUSY if advertising is in progress,
+ * other error code on failure.
+ */
+int ble_gap_ext_adv_clear(void);
+#endif
+
+/* Periodic Advertising */
+#if MYNEWT_VAL(BLE_PERIODIC_ADV)
+
+/** @brief Periodic advertising parameters */
+struct ble_gap_periodic_adv_params {
+ /** If include TX power in advertising PDU */
+ unsigned int include_tx_power:1;
+
+ /** Minimum advertising interval in 0.625ms units, if 0 stack use sane
+ * defaults
+ */
+ uint16_t itvl_min;
+
+ /** Maximum advertising interval in 0.625ms units, if 0 stack use sane
+ * defaults
+ */
+ uint16_t itvl_max;
+};
+
+/** @brief Periodic sync parameters */
+struct ble_gap_periodic_sync_params {
+ /** The maximum number of periodic advertising events that controller can
+ * skip after a successful receive.
+ * */
+ uint16_t skip;
+
+ /** Synchronization timeout for the periodic advertising train in 10ms units
+ */
+ uint16_t sync_timeout;
+
+ /** If reports should be initially disabled when sync is created */
+ unsigned int reports_disabled:1;
+};
+
+/**
+ * Configure periodic advertising for specified advertising instance
+ *
+ * This is allowed only for instances configured as non-announymous,
+ * non-connectable and non-scannable.
+ *
+ * @param instance Instance ID
+ * @param params Additional arguments specifying the particulars
+ * of periodic advertising.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_periodic_adv_configure(uint8_t instance,
+ const struct ble_gap_periodic_adv_params *params);
+
+/**
+ * Start periodic advertising for specified advertising instance.
+ *
+ * @param instance Instance ID
+ *
+ * @return 0 on success, error code on failure.
+ */
+int ble_gap_periodic_adv_start(uint8_t instance);
+
+/**
+ * Stop periodic advertising for specified advertising instance.
+ *
+ * @param instance Instance ID
+ *
+ * @return 0 on success, error code on failure.
+ */
+int ble_gap_periodic_adv_stop(uint8_t instance);
+
+/**
+ * Configures the data to include in periodic advertisements for specified
+ * advertising instance.
+ *
+ * @param instance Instance ID
+ * @param data Chain containing the periodic advertising data.
+ *
+ * @return 0 on success or error code on failure.
+ */
+int ble_gap_periodic_adv_set_data(uint8_t instance, struct os_mbuf *data);
+
+/**
+ * Performs the Synchronization procedure with periodic advertiser.
+ *
+ * @param addr Peer address to synchronize with. If NULL than
+ * peers from periodic list are used.
+ * @param adv_sid Advertiser Set ID
+ * @param params Additional arguments specifying the particulars
+ * of the synchronization procedure.
+ * @param cb The callback to associate with this synchrnization
+ * procedure. BLE_GAP_EVENT_PERIODIC_REPORT events
+ * are reported only by this callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_periodic_adv_sync_create(const ble_addr_t *addr, uint8_t adv_sid,
+ const struct ble_gap_periodic_sync_params *params,
+ ble_gap_event_fn *cb, void *cb_arg);
+
+/**
+ * Cancel pending synchronization procedure.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_periodic_adv_sync_create_cancel(void);
+
+/**
+ * Terminate synchronization procedure.
+ *
+ * @param sync_handle Handle identifying synchronization to terminate.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_periodic_adv_sync_terminate(uint16_t sync_handle);
+
+#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER)
+/**
+ * Disable or enable periodic reports for specified sync.
+ *
+ * @param sync_handle Handle identifying synchronization.
+ * @param enable If reports should be enabled.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_periodic_adv_sync_reporting(uint16_t sync_handle, bool enable);
+
+/**
+ * Initialize sync transfer procedure for specified handles.
+ *
+ * This allows to transfer periodic sync to which host is synchronized.
+ *
+ * @param sync_handle Handle identifying synchronization.
+ * @param conn_handle Handle identifying connection.
+ * @param service_data Sync transfer service data
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_periodic_adv_sync_transfer(uint16_t sync_handle,
+ uint16_t conn_handle,
+ uint16_t service_data);
+
+/**
+ * Initialize set info transfer procedure for specified handles.
+ *
+ * This allows to transfer periodic sync which is being advertised by host.
+ *
+ * @param instance Advertising instance with periodic adv enabled.
+ * @param conn_handle Handle identifying connection.
+ * @param service_data Sync transfer service data
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_periodic_adv_sync_set_info(uint8_t instance,
+ uint16_t conn_handle,
+ uint16_t service_data);
+
+/**
+ * Enables or disables sync transfer reception on specified connection.
+ * When sync transfer arrives, BLE_GAP_EVENT_PERIODIC_TRANSFER is sent to the user.
+ * After that, sync transfer reception on that connection is terminated and user needs
+ * to call this API again when expect to receive next sync transfers.
+ *
+ * Note: If ACL connection gets disconnected before sync transfer arrived, user will
+ * not receive BLE_GAP_EVENT_PERIODIC_TRANSFER. Instead, sync transfer reception
+ * is terminated by the host automatically.
+ *
+ * @param conn_handle Handle identifying connection.
+ * @param params Parameters for enabled sync transfer reception.
+ * Specify NULL to disable reception.
+ * @param cb The callback to associate with this synchronization
+ * procedure. BLE_GAP_EVENT_PERIODIC_REPORT events
+ * are reported only by this callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_periodic_adv_sync_receive(uint16_t conn_handle,
+ const struct ble_gap_periodic_sync_params *params,
+ ble_gap_event_fn *cb, void *cb_arg);
+#endif
+
+/**
+ * Add peer device to periodic synchronization list.
+ *
+ * @param addr Peer address to add to list.
+ * @param adv_sid Advertiser Set ID
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_add_dev_to_periodic_adv_list(const ble_addr_t *peer_addr,
+ uint8_t adv_sid);
+
+/**
+ * Remove peer device from periodic synchronization list.
+ *
+ * @param addr Peer address to remove from list.
+ * @param adv_sid Advertiser Set ID
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_rem_dev_from_periodic_adv_list(const ble_addr_t *peer_addr,
+ uint8_t adv_sid);
+
+/**
+ * Clear periodic synchrnization list.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_clear_periodic_adv_list(void);
+
+/**
+ * Get periodic synchronization list size.
+ *
+ * @param per_adv_list_size On success list size is stored here.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_read_periodic_adv_list_size(uint8_t *per_adv_list_size);
+#endif
+
+
+/**
+ * Performs the Limited or General Discovery Procedures.
+ *
+ * @param own_addr_type The type of address the stack should use for
+ * itself when sending scan requests. Valid
+ * values are:
+ * - BLE_ADDR_TYPE_PUBLIC
+ * - BLE_ADDR_TYPE_RANDOM
+ * - BLE_ADDR_TYPE_RPA_PUB_DEFAULT
+ * - BLE_ADDR_TYPE_RPA_RND_DEFAULT
+ * This parameter is ignored unless active
+ * scanning is being used.
+ * @param duration_ms The duration of the discovery procedure.
+ * On expiration, the procedure ends and a
+ * BLE_GAP_EVENT_DISC_COMPLETE event is
+ * reported. Units are milliseconds. Specify
+ * BLE_HS_FOREVER for no expiration. Specify
+ * 0 to use stack defaults.
+ * @param disc_params Additional arguments specifying the particulars
+ * of the discovery procedure.
+ * @param cb The callback to associate with this discovery
+ * procedure. Advertising reports and
+ * discovery termination events are reported
+ * through this callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_disc(uint8_t own_addr_type, int32_t duration_ms,
+ const struct ble_gap_disc_params *disc_params,
+ ble_gap_event_fn *cb, void *cb_arg);
+
+/**
+ * Performs the Limited or General Extended Discovery Procedures.
+ *
+ * @param own_addr_type The type of address the stack should use for
+ * itself when sending scan requests. Valid
+ * values are:
+ * - BLE_ADDR_TYPE_PUBLIC
+ * - BLE_ADDR_TYPE_RANDOM
+ * - BLE_ADDR_TYPE_RPA_PUB_DEFAULT
+ * - BLE_ADDR_TYPE_RPA_RND_DEFAULT
+ * This parameter is ignored unless active
+ * scanning is being used.
+ * @param duration The duration of the discovery procedure.
+ * On expiration, if period is set to 0, the
+ * procedure ends and a
+ * BLE_GAP_EVENT_DISC_COMPLETE event is
+ * reported. Units are 10 milliseconds.
+ * Specify 0 for no expiration.
+ * @param period Time interval from when the Controller started
+ * its last Scan Duration until it begins the
+ * subsequent Scan Duration. Specify 0 to scan
+ * continuously. Units are 1.28 second.
+ * @param limited If limited discovery procedure should be used.
+ * @param uncoded_params Additional arguments specifying the particulars
+ * of the discovery procedure for uncoded PHY.
+ * If NULL is provided no scan is performed for
+ * this PHY.
+ * @param coded_params Additional arguments specifying the particulars
+ * of the discovery procedure for coded PHY.
+ * If NULL is provided no scan is performed for
+ * this PHY.
+ * @param cb The callback to associate with this discovery
+ * procedure. Advertising reports and discovery
+ * termination events are reported through this
+ * callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_ext_disc(uint8_t own_addr_type, uint16_t duration, uint16_t period,
+ uint8_t filter_duplicates, uint8_t filter_policy,
+ uint8_t limited,
+ const struct ble_gap_ext_disc_params *uncoded_params,
+ const struct ble_gap_ext_disc_params *coded_params,
+ ble_gap_event_fn *cb, void *cb_arg);
+
+/**
+ * Cancels the discovery procedure currently in progress. A success return
+ * code indicates that scanning has been fully aborted; a new discovery or
+ * connect procedure can be initiated immediately.
+ *
+ * @return 0 on success;
+ * BLE_HS_EALREADY if there is no discovery
+ * procedure to cancel;
+ * Other nonzero on unexpected error.
+ */
+int ble_gap_disc_cancel(void);
+
+/**
+ * Indicates whether a discovery procedure is currently in progress.
+ *
+ * @return 0: No discovery procedure in progress;
+ * 1: Discovery procedure in progress.
+ */
+int ble_gap_disc_active(void);
+
+/**
+ * Initiates a connect procedure.
+ *
+ * @param own_addr_type The type of address the stack should use for
+ * itself during connection establishment.
+ * - BLE_OWN_ADDR_PUBLIC
+ * - BLE_OWN_ADDR_RANDOM
+ * - BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT
+ * - BLE_OWN_ADDR_RPA_RANDOM_DEFAULT
+ * @param peer_addr The address of the peer to connect to.
+ * If this parameter is NULL, the white list
+ * is used.
+ * @param duration_ms The duration of the discovery procedure.
+ * On expiration, the procedure ends and a
+ * BLE_GAP_EVENT_DISC_COMPLETE event is
+ * reported. Units are milliseconds.
+ * @param conn_params Additional arguments specifying the particulars
+ * of the connect procedure. Specify null for
+ * default values.
+ * @param cb The callback to associate with this connect
+ * procedure. When the connect procedure
+ * completes, the result is reported through
+ * this callback. If the connect procedure
+ * succeeds, the connection inherits this
+ * callback as its event-reporting mechanism.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success;
+ * BLE_HS_EALREADY if a connection attempt is
+ * already in progress;
+ * BLE_HS_EBUSY if initiating a connection is not
+ * possible because scanning is in progress;
+ * BLE_HS_EDONE if the specified peer is already
+ * connected;
+ * Other nonzero on error.
+ */
+int ble_gap_connect(uint8_t own_addr_type, const ble_addr_t *peer_addr,
+ int32_t duration_ms,
+ const struct ble_gap_conn_params *params,
+ ble_gap_event_fn *cb, void *cb_arg);
+
+/**
+ * Initiates an extended connect procedure.
+ *
+ * @param own_addr_type The type of address the stack should use for
+ * itself during connection establishment.
+ * - BLE_OWN_ADDR_PUBLIC
+ * - BLE_OWN_ADDR_RANDOM
+ * - BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT
+ * - BLE_OWN_ADDR_RPA_RANDOM_DEFAULT
+ * @param peer_addr The address of the peer to connect to.
+ * If this parameter is NULL, the white list
+ * is used.
+ * @param duration_ms The duration of the discovery procedure.
+ * On expiration, the procedure ends and a
+ * BLE_GAP_EVENT_DISC_COMPLETE event is
+ * reported. Units are milliseconds.
+ * @param phy_mask Define on which PHYs connection attempt should
+ * be done
+ * @param phy_1m_conn_params Additional arguments specifying the
+ * particulars of the connect procedure. When
+ * BLE_GAP_LE_PHY_1M_MASK is set in phy_mask
+ * this parameter can be specify to null for
+ * default values.
+ * @param phy_2m_conn_params Additional arguments specifying the
+ * particulars of the connect procedure. When
+ * BLE_GAP_LE_PHY_2M_MASK is set in phy_mask
+ * this parameter can be specify to null for
+ * default values.
+ * @param phy_coded_conn_params Additional arguments specifying the
+ * particulars of the connect procedure. When
+ * BLE_GAP_LE_PHY_CODED_MASK is set in
+ * phy_mask this parameter can be specify to
+ * null for default values.
+ * @param cb The callback to associate with this connect
+ * procedure. When the connect procedure
+ * completes, the result is reported through
+ * this callback. If the connect procedure
+ * succeeds, the connection inherits this
+ * callback as its event-reporting mechanism.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success;
+ * BLE_HS_EALREADY if a connection attempt is
+ * already in progress;
+ * BLE_HS_EBUSY if initiating a connection is not
+ * possible because scanning is in progress;
+ * BLE_HS_EDONE if the specified peer is already
+ * connected;
+ * Other nonzero on error.
+ */
+int ble_gap_ext_connect(uint8_t own_addr_type, const ble_addr_t *peer_addr,
+ int32_t duration_ms, uint8_t phy_mask,
+ const struct ble_gap_conn_params *phy_1m_conn_params,
+ const struct ble_gap_conn_params *phy_2m_conn_params,
+ const struct ble_gap_conn_params *phy_coded_conn_params,
+ ble_gap_event_fn *cb, void *cb_arg);
+
+/**
+ * Aborts a connect procedure in progress.
+ *
+ * @return 0 on success;
+ * BLE_HS_EALREADY if there is no active connect
+ * procedure.
+ * Other nonzero on error.
+ */
+int ble_gap_conn_cancel(void);
+
+/**
+ * Indicates whether a connect procedure is currently in progress.
+ *
+ * @return 0: No connect procedure in progress;
+ * 1: Connect procedure in progress.
+ */
+int ble_gap_conn_active(void);
+
+/**
+ * Terminates an established connection.
+ *
+ * @param conn_handle The handle corresponding to the connection to
+ * terminate.
+ * @param hci_reason The HCI error code to indicate as the reason
+ * for termination.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOTCONN if there is no connection with
+ * the specified handle;
+ * Other nonzero on failure.
+ */
+int ble_gap_terminate(uint16_t conn_handle, uint8_t hci_reason);
+
+/**
+ * Overwrites the controller's white list with the specified contents.
+ *
+ * @param addrs The entries to write to the white list.
+ * @param white_list_count The number of entries in the white list.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_wl_set(const ble_addr_t *addrs, uint8_t white_list_count);
+
+/**
+ * Initiates a connection parameter update procedure.
+ *
+ * @param conn_handle The handle corresponding to the connection to
+ * update.
+ * @param params The connection parameters to attempt to update
+ * to.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOTCONN if the there is no connection
+ * with the specified handle;
+ * BLE_HS_EALREADY if a connection update
+ * procedure for this connection is already in
+ * progress;
+ * BLE_HS_EINVAL if requested parameters are
+ * invalid;
+ * Other nonzero on error.
+ */
+int ble_gap_update_params(uint16_t conn_handle,
+ const struct ble_gap_upd_params *params);
+
+/**
+ * Initiates the GAP security procedure.
+ *
+ * Depending on connection role and stored security information this function
+ * will start appropriate security procedure (pairing or encryption).
+ *
+ * @param conn_handle The handle corresponding to the connection to
+ * secure.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOTCONN if the there is no connection
+ * with the specified handle;
+ * BLE_HS_EALREADY if an security procedure for
+ * this connection is already in progress;
+ * Other nonzero on error.
+ */
+int ble_gap_security_initiate(uint16_t conn_handle);
+
+/**
+ * Initiates the GAP pairing procedure as a master. This is for testing only and
+ * should not be used by application. Use ble_gap_security_initiate() instead.
+ *
+ * @param conn_handle The handle corresponding to the connection to
+ * start pairing on.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOTCONN if the there is no connection
+ * with the specified handle;
+ * BLE_HS_EALREADY if an pairing procedure for
+ * this connection is already in progress;
+ * Other nonzero on error.
+ */
+int ble_gap_pair_initiate(uint16_t conn_handle);
+
+/**
+ * Initiates the GAP encryption procedure as a master. This is for testing only
+ * and should not be used by application. Use ble_gap_security_initiate()
+ * instead.
+ *
+ * @param conn_handle The handle corresponding to the connection to
+ * start encryption.
+ * @param key_size Encryption key size
+ * @param ltk Long Term Key to be used for encryption.
+ * @param udiv Encryption Diversifier for LTK
+ * @param rand_val Random Value for EDIV and LTK
+ * @param auth If LTK provided is authenticated.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOTCONN if the there is no connection
+ * with the specified handle;
+ * BLE_HS_EALREADY if an encryption procedure for
+ * this connection is already in progress;
+ * Other nonzero on error.
+ */
+int ble_gap_encryption_initiate(uint16_t conn_handle, uint8_t key_size,
+ const uint8_t *ltk, uint16_t ediv,
+ uint64_t rand_val, int auth);
+
+/**
+ * Retrieves the most-recently measured RSSI for the specified connection. A
+ * connection's RSSI is updated whenever a data channel PDU is received.
+ *
+ * @param conn_handle Specifies the connection to query.
+ * @param out_rssi On success, the retrieved RSSI is written here.
+ *
+ * @return 0 on success;
+ * A BLE host HCI return code if the controller
+ * rejected the request;
+ * A BLE host core return code on unexpected
+ * error.
+ */
+int ble_gap_conn_rssi(uint16_t conn_handle, int8_t *out_rssi);
+
+/**
+ * Unpairs a device with the specified address. The keys related to that peer
+ * device are removed from storage and peer address is removed from the resolve
+ * list from the controller. If a peer is connected, the connection is terminated.
+ *
+ * @param peer_addr Address of the device to be unpaired
+ *
+ * @return 0 on success;
+ * A BLE host HCI return code if the controller
+ * rejected the request;
+ * A BLE host core return code on unexpected
+ * error.
+ */
+int ble_gap_unpair(const ble_addr_t *peer_addr);
+
+/**
+ * Unpairs the oldest bonded peer device. The keys related to that peer
+ * device are removed from storage and peer address is removed from the resolve
+ * list from the controller. If a peer is connected, the connection is terminated.
+ *
+ * @return 0 on success;
+ * A BLE host HCI return code if the controller
+ * rejected the request;
+ * A BLE host core return code on unexpected
+ * error.
+ */
+int ble_gap_unpair_oldest_peer(void);
+
+/**
+ * Similar to `ble_gap_unpair_oldest_peer()`, except it makes sure that the
+ * peer received in input parameters is not deleted.
+ *
+ * @param peer_addr Address of the peer (not to be deleted)
+ *
+ * @return 0 on success;
+ * A BLE host HCI return code if the controller
+ * rejected the request;
+ * A BLE host core return code on unexpected
+ * error.
+ */
+int ble_gap_unpair_oldest_except(const ble_addr_t *peer_addr);
+
+#define BLE_GAP_PRIVATE_MODE_NETWORK 0
+#define BLE_GAP_PRIVATE_MODE_DEVICE 1
+
+/**
+ * Set privacy mode for specified peer device
+ *
+ * @param peer_addr Peer device address
+ * @param priv_mode Privacy mode to be used. Can be one of following
+ * constants:
+ * - BLE_GAP_PRIVATE_MODE_NETWORK
+ * - BLE_GAP_PRIVATE_MODE_DEVICE
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_set_priv_mode(const ble_addr_t *peer_addr, uint8_t priv_mode);
+
+#define BLE_GAP_LE_PHY_1M 1
+#define BLE_GAP_LE_PHY_2M 2
+#define BLE_GAP_LE_PHY_CODED 3
+/**
+ * Read PHYs used for specified connection.
+ *
+ * On success output parameters are filled with information about used PHY type.
+ *
+ * @param conn_handle Connection handle
+ * @param tx_phy TX PHY used. Can be one of following constants:
+ * - BLE_GAP_LE_PHY_1M
+ * - BLE_GAP_LE_PHY_2M
+ * - BLE_GAP_LE_PHY_CODED
+ * @param rx_phy RX PHY used. Can be one of following constants:
+ * - BLE_GAP_LE_PHY_1M
+ * - BLE_GAP_LE_PHY_2M
+ * - BLE_GAP_LE_PHY_CODED
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_read_le_phy(uint16_t conn_handle, uint8_t *tx_phy, uint8_t *rx_phy);
+
+#define BLE_GAP_LE_PHY_1M_MASK 0x01
+#define BLE_GAP_LE_PHY_2M_MASK 0x02
+#define BLE_GAP_LE_PHY_CODED_MASK 0x04
+#define BLE_GAP_LE_PHY_ANY_MASK 0x0F
+/**
+ * Set preferred default PHYs to be used for connections.
+ *
+ * @params tx_phys_mask Preferred TX PHY. Can be mask of following
+ * constants:
+ * - BLE_GAP_LE_PHY_1M_MASK
+ * - BLE_GAP_LE_PHY_2M_MASK
+ * - BLE_GAP_LE_PHY_CODED_MASK
+ * - BLE_GAP_LE_PHY_ANY_MASK
+ * @params rx_phys_mask Preferred RX PHY. Can be mask of following
+ * constants:
+ * - BLE_GAP_LE_PHY_1M_MASK
+ * - BLE_GAP_LE_PHY_2M_MASK
+ * - BLE_GAP_LE_PHY_CODED_MASK
+ * - BLE_GAP_LE_PHY_ANY_MASK
+
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_set_prefered_default_le_phy(uint8_t tx_phys_mask,
+ uint8_t rx_phys_mask);
+
+#define BLE_GAP_LE_PHY_CODED_ANY 0
+#define BLE_GAP_LE_PHY_CODED_S2 1
+#define BLE_GAP_LE_PHY_CODED_S8 2
+/**
+ * Set preferred PHYs to be used for connection.
+ *
+ * @param conn_handle Connection handle
+ * @params tx_phys_mask Preferred TX PHY. Can be mask of following
+ * constants:
+ * - BLE_GAP_LE_PHY_1M_MASK
+ * - BLE_GAP_LE_PHY_2M_MASK
+ * - BLE_GAP_LE_PHY_CODED_MASK
+ * - BLE_GAP_LE_PHY_ANY_MASK
+ * @params rx_phys_mask Preferred RX PHY. Can be mask of following
+ * constants:
+ * - BLE_GAP_LE_PHY_1M_MASK
+ * - BLE_GAP_LE_PHY_2M_MASK
+ * - BLE_GAP_LE_PHY_CODED_MASK
+ * - BLE_GAP_LE_PHY_ANY_MASK
+ * @param phy_opts Additional PHY options. Valid values are:
+ * - BLE_GAP_LE_PHY_CODED_ANY
+ * - BLE_GAP_LE_PHY_CODED_S2
+ * - BLE_GAP_LE_PHY_CODED_S8
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gap_set_prefered_le_phy(uint16_t conn_handle, uint8_t tx_phys_mask,
+ uint8_t rx_phys_mask, uint16_t phy_opts);
+
+/**
+ * Event listener structure
+ *
+ * This should be used as an opaque structure and not modified manually.
+ */
+struct ble_gap_event_listener {
+ ble_gap_event_fn *fn;
+ void *arg;
+ SLIST_ENTRY(ble_gap_event_listener) link;
+};
+
+/**
+ * Registers listener for GAP events
+ *
+ * On success listener structure will be initialized automatically and does not
+ * need to be initialized prior to calling this function. To change callback
+ * and/or argument unregister listener first and register it again.
+ *
+ * @param listener Listener structure
+ * @param fn Callback function
+ * @param arg Callback argument
+ *
+ * @return 0 on success
+ * BLE_HS_EINVAL if no callback is specified
+ * BLE_HS_EALREADY if listener is already registered
+ */
+int ble_gap_event_listener_register(struct ble_gap_event_listener *listener,
+ ble_gap_event_fn *fn, void *arg);
+
+/**
+ * Unregisters listener for GAP events
+ *
+ * @param listener Listener structure
+ *
+ * @return 0 on success
+ * BLE_HS_ENOENT if listener was not registered
+ */
+int ble_gap_event_listener_unregister(struct ble_gap_event_listener *listener);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_gatt.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_gatt.h
new file mode 100644
index 00000000..b06344fc
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_gatt.h
@@ -0,0 +1,896 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_GATT_
+#define H_BLE_GATT_
+
+/**
+ * @brief Bluetooth Generic Attribute Profile (GATT)
+ * @defgroup bt_gatt Bluetooth Generic Attribute Profile (GATT)
+ * @ingroup bt_host
+ * @{
+ */
+
+#include <inttypes.h>
+#include "host/ble_att.h"
+#include "host/ble_uuid.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct ble_hs_conn;
+struct ble_att_error_rsp;
+struct ble_hs_cfg;
+
+#define BLE_GATT_REGISTER_OP_SVC 1
+#define BLE_GATT_REGISTER_OP_CHR 2
+#define BLE_GATT_REGISTER_OP_DSC 3
+
+#define BLE_GATT_SVC_UUID16 0x1801
+#define BLE_GATT_DSC_CLT_CFG_UUID16 0x2902
+
+#define BLE_GATT_CHR_PROP_BROADCAST 0x01
+#define BLE_GATT_CHR_PROP_READ 0x02
+#define BLE_GATT_CHR_PROP_WRITE_NO_RSP 0x04
+#define BLE_GATT_CHR_PROP_WRITE 0x08
+#define BLE_GATT_CHR_PROP_NOTIFY 0x10
+#define BLE_GATT_CHR_PROP_INDICATE 0x20
+#define BLE_GATT_CHR_PROP_AUTH_SIGN_WRITE 0x40
+#define BLE_GATT_CHR_PROP_EXTENDED 0x80
+
+#define BLE_GATT_ACCESS_OP_READ_CHR 0
+#define BLE_GATT_ACCESS_OP_WRITE_CHR 1
+#define BLE_GATT_ACCESS_OP_READ_DSC 2
+#define BLE_GATT_ACCESS_OP_WRITE_DSC 3
+
+#define BLE_GATT_CHR_F_BROADCAST 0x0001
+#define BLE_GATT_CHR_F_READ 0x0002
+#define BLE_GATT_CHR_F_WRITE_NO_RSP 0x0004
+#define BLE_GATT_CHR_F_WRITE 0x0008
+#define BLE_GATT_CHR_F_NOTIFY 0x0010
+#define BLE_GATT_CHR_F_INDICATE 0x0020
+#define BLE_GATT_CHR_F_AUTH_SIGN_WRITE 0x0040
+#define BLE_GATT_CHR_F_RELIABLE_WRITE 0x0080
+#define BLE_GATT_CHR_F_AUX_WRITE 0x0100
+#define BLE_GATT_CHR_F_READ_ENC 0x0200
+#define BLE_GATT_CHR_F_READ_AUTHEN 0x0400
+#define BLE_GATT_CHR_F_READ_AUTHOR 0x0800
+#define BLE_GATT_CHR_F_WRITE_ENC 0x1000
+#define BLE_GATT_CHR_F_WRITE_AUTHEN 0x2000
+#define BLE_GATT_CHR_F_WRITE_AUTHOR 0x4000
+
+#define BLE_GATT_SVC_TYPE_END 0
+#define BLE_GATT_SVC_TYPE_PRIMARY 1
+#define BLE_GATT_SVC_TYPE_SECONDARY 2
+
+/*** @client. */
+struct ble_gatt_error {
+ uint16_t status;
+ uint16_t att_handle;
+};
+
+struct ble_gatt_svc {
+ uint16_t start_handle;
+ uint16_t end_handle;
+ ble_uuid_any_t uuid;
+};
+
+struct ble_gatt_attr {
+ uint16_t handle;
+ uint16_t offset;
+ struct os_mbuf *om;
+};
+
+struct ble_gatt_chr {
+ uint16_t def_handle;
+ uint16_t val_handle;
+ uint8_t properties;
+ ble_uuid_any_t uuid;
+};
+
+struct ble_gatt_dsc {
+ uint16_t handle;
+ ble_uuid_any_t uuid;
+};
+
+typedef int ble_gatt_mtu_fn(uint16_t conn_handle,
+ const struct ble_gatt_error *error,
+ uint16_t mtu, void *arg);
+typedef int ble_gatt_disc_svc_fn(uint16_t conn_handle,
+ const struct ble_gatt_error *error,
+ const struct ble_gatt_svc *service,
+ void *arg);
+
+/**
+ * The host will free the attribute mbuf automatically after the callback is
+ * executed. The application can take ownership of the mbuf and prevent it
+ * from being freed by assigning NULL to attr->om.
+ */
+typedef int ble_gatt_attr_fn(uint16_t conn_handle,
+ const struct ble_gatt_error *error,
+ struct ble_gatt_attr *attr,
+ void *arg);
+
+/**
+ * The host will free the attribute mbufs automatically after the callback is
+ * executed. The application can take ownership of the mbufs and prevent them
+ * from being freed by assigning NULL to each attribute's om field.
+ */
+typedef int ble_gatt_reliable_attr_fn(uint16_t conn_handle,
+ const struct ble_gatt_error *error,
+ struct ble_gatt_attr *attrs,
+ uint8_t num_attrs, void *arg);
+
+typedef int ble_gatt_chr_fn(uint16_t conn_handle,
+ const struct ble_gatt_error *error,
+ const struct ble_gatt_chr *chr, void *arg);
+
+typedef int ble_gatt_dsc_fn(uint16_t conn_handle,
+ const struct ble_gatt_error *error,
+ uint16_t chr_val_handle,
+ const struct ble_gatt_dsc *dsc,
+ void *arg);
+
+/**
+ * Initiates GATT procedure: Exchange MTU.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_exchange_mtu(uint16_t conn_handle,
+ ble_gatt_mtu_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Discover All Primary Services.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ */
+int ble_gattc_disc_all_svcs(uint16_t conn_handle,
+ ble_gatt_disc_svc_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Discover Primary Service by Service UUID.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param service_uuid128 The 128-bit UUID of the service to discover.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_disc_svc_by_uuid(uint16_t conn_handle, const ble_uuid_t *uuid,
+ ble_gatt_disc_svc_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Find Included Services.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param start_handle The handle to begin the search at (generally
+ * the service definition handle).
+ * @param end_handle The handle to end the search at (generally the
+ * last handle in the service).
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_find_inc_svcs(uint16_t conn_handle, uint16_t start_handle,
+ uint16_t end_handle,
+ ble_gatt_disc_svc_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Discover All Characteristics of a Service.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param start_handle The handle to begin the search at (generally
+ * the service definition handle).
+ * @param end_handle The handle to end the search at (generally the
+ * last handle in the service).
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_disc_all_chrs(uint16_t conn_handle, uint16_t start_handle,
+ uint16_t end_handle, ble_gatt_chr_fn *cb,
+ void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Discover Characteristics by UUID.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param start_handle The handle to begin the search at (generally
+ * the service definition handle).
+ * @param end_handle The handle to end the search at (generally the
+ * last handle in the service).
+ * @param chr_uuid128 The 128-bit UUID of the characteristic to
+ * discover.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_disc_chrs_by_uuid(uint16_t conn_handle, uint16_t start_handle,
+ uint16_t end_handle, const ble_uuid_t *uuid,
+ ble_gatt_chr_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Discover All Characteristic Descriptors.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param chr_val_handle The handle of the characteristic value
+ * attribute.
+ * @param chr_end_handle The last handle in the characteristic
+ * definition.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_disc_all_dscs(uint16_t conn_handle, uint16_t start_handle,
+ uint16_t end_handle,
+ ble_gatt_dsc_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Read Characteristic Value.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param attr_handle The handle of the characteristic value to read.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_read(uint16_t conn_handle, uint16_t attr_handle,
+ ble_gatt_attr_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Read Using Characteristic UUID.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param start_handle The first handle to search (generally the
+ * handle of the service definition).
+ * @param end_handle The last handle to search (generally the
+ * last handle in the service definition).
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_read_by_uuid(uint16_t conn_handle, uint16_t start_handle,
+ uint16_t end_handle, const ble_uuid_t *uuid,
+ ble_gatt_attr_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Read Long Characteristic Values.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param handle The handle of the characteristic value to read.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_read_long(uint16_t conn_handle, uint16_t handle, uint16_t offset,
+ ble_gatt_attr_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Read Multiple Characteristic Values.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param handles An array of 16-bit attribute handles to read.
+ * @param num_handles The number of entries in the "handles" array.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_read_mult(uint16_t conn_handle, const uint16_t *handles,
+ uint8_t num_handles, ble_gatt_attr_fn *cb,
+ void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Write Without Response. This function consumes
+ * the supplied mbuf regardless of the outcome.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param attr_handle The handle of the characteristic value to write
+ * to.
+ * @param txom The value to write to the characteristic.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_write_no_rsp(uint16_t conn_handle, uint16_t attr_handle,
+ struct os_mbuf *om);
+
+/**
+ * Initiates GATT procedure: Write Without Response. This function consumes
+ * the supplied mbuf regardless of the outcome.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param attr_handle The handle of the characteristic value to write
+ * to.
+ * @param value The value to write to the characteristic.
+ * @param value_len The number of bytes to write.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_write_no_rsp_flat(uint16_t conn_handle, uint16_t attr_handle,
+ const void *data, uint16_t data_len);
+
+/**
+ * Initiates GATT procedure: Write Characteristic Value. This function
+ * consumes the supplied mbuf regardless of the outcome.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param attr_handle The handle of the characteristic value to write
+ * to.
+ * @param txom The value to write to the characteristic.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_write(uint16_t conn_handle, uint16_t attr_handle,
+ struct os_mbuf *om,
+ ble_gatt_attr_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Write Characteristic Value (flat buffer version).
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param attr_handle The handle of the characteristic value to write
+ * to.
+ * @param value The value to write to the characteristic.
+ * @param value_len The number of bytes to write.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_write_flat(uint16_t conn_handle, uint16_t attr_handle,
+ const void *data, uint16_t data_len,
+ ble_gatt_attr_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Write Long Characteristic Values. This function
+ * consumes the supplied mbuf regardless of the outcome.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param attr_handle The handle of the characteristic value to write
+ * to.
+ * @param txom The value to write to the characteristic.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_write_long(uint16_t conn_handle, uint16_t attr_handle,
+ uint16_t offset, struct os_mbuf *om,
+ ble_gatt_attr_fn *cb, void *cb_arg);
+
+/**
+ * Initiates GATT procedure: Reliable Writes. This function consumes the
+ * supplied mbufs regardless of the outcome.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param attrs An array of attribute descriptors; specifies
+ * which characteristics to write to and what
+ * data to write to them. The mbuf pointer in
+ * each attribute is set to NULL by this
+ * function.
+ * @param num_attrs The number of characteristics to write; equal
+ * to the number of elements in the 'attrs'
+ * array.
+ * @param cb The function to call to report procedure status
+ * updates; null for no callback.
+ * @param cb_arg The optional argument to pass to the callback
+ * function.
+ */
+int ble_gattc_write_reliable(uint16_t conn_handle,
+ struct ble_gatt_attr *attrs,
+ int num_attrs, ble_gatt_reliable_attr_fn *cb,
+ void *cb_arg);
+
+/**
+ * Sends a "free-form" characteristic notification. This function consumes the
+ * supplied mbuf regardless of the outcome.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param chr_val_handle The attribute handle to indicate in the
+ * outgoing notification.
+ * @param txom The value to write to the characteristic.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_notify_custom(uint16_t conn_handle, uint16_t att_handle,
+ struct os_mbuf *om);
+
+/**
+ * Sends a characteristic notification. The content of the message is read
+ * from the specified characteristic.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param chr_val_handle The value attribute handle of the
+ * characteristic to include in the outgoing
+ * notification.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_notify(uint16_t conn_handle, uint16_t chr_val_handle);
+
+/**
+ * Sends a "free-form" characteristic indication. The provided mbuf contains
+ * the indication payload. This function consumes the supplied mbuf regardless
+ * of the outcome.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param chr_val_handle The value attribute handle of the
+ * characteristic to include in the outgoing
+ * indication.
+ * @param txom The data to include in the indication.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_indicate_custom(uint16_t conn_handle, uint16_t chr_val_handle,
+ struct os_mbuf *txom);
+
+/**
+ * Sends a characteristic indication. The content of the message is read from
+ * the specified characteristic.
+ *
+ * @param conn_handle The connection over which to execute the
+ * procedure.
+ * @param chr_val_handle The value attribute handle of the
+ * characteristic to include in the outgoing
+ * indication.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_gattc_indicate(uint16_t conn_handle, uint16_t chr_val_handle);
+
+int ble_gattc_init(void);
+
+/*** @server. */
+
+struct ble_gatt_access_ctxt;
+typedef int ble_gatt_access_fn(uint16_t conn_handle, uint16_t attr_handle,
+ struct ble_gatt_access_ctxt *ctxt, void *arg);
+
+typedef uint16_t ble_gatt_chr_flags;
+
+struct ble_gatt_chr_def {
+ /**
+ * Pointer to characteristic UUID; use BLE_UUIDxx_DECLARE macros to declare
+ * proper UUID; NULL if there are no more characteristics in the service.
+ */
+ const ble_uuid_t *uuid;
+
+ /**
+ * Callback that gets executed when this characteristic is read or
+ * written.
+ */
+ ble_gatt_access_fn *access_cb;
+
+ /** Optional argument for callback. */
+ void *arg;
+
+ /**
+ * Array of this characteristic's descriptors. NULL if no descriptors.
+ * Do not include CCCD; it gets added automatically if this
+ * characteristic's notify or indicate flag is set.
+ */
+ struct ble_gatt_dsc_def *descriptors;
+
+ /** Specifies the set of permitted operations for this characteristic. */
+ ble_gatt_chr_flags flags;
+
+ /** Specifies minimum required key size to access this characteristic. */
+ uint8_t min_key_size;
+
+ /**
+ * At registration time, this is filled in with the characteristic's value
+ * attribute handle.
+ */
+ uint16_t *val_handle;
+};
+
+struct ble_gatt_svc_def {
+ /**
+ * One of the following:
+ * o BLE_GATT_SVC_TYPE_PRIMARY - primary service
+ * o BLE_GATT_SVC_TYPE_SECONDARY - secondary service
+ * o 0 - No more services in this array.
+ */
+ uint8_t type;
+
+ /**
+ * Pointer to service UUID; use BLE_UUIDxx_DECLARE macros to declare
+ * proper UUID; NULL if there are no more characteristics in the service.
+ */
+ const ble_uuid_t *uuid;
+
+ /**
+ * Array of pointers to other service definitions. These services are
+ * reported as "included services" during service discovery. Terminate the
+ * array with NULL.
+ */
+ const struct ble_gatt_svc_def **includes;
+
+ /**
+ * Array of characteristic definitions corresponding to characteristics
+ * belonging to this service.
+ */
+ const struct ble_gatt_chr_def *characteristics;
+};
+
+struct ble_gatt_dsc_def {
+ /**
+ * Pointer to descriptor UUID; use BLE_UUIDxx_DECLARE macros to declare
+ * proper UUID; NULL if there are no more characteristics in the service.
+ */
+ const ble_uuid_t *uuid;
+
+ /** Specifies the set of permitted operations for this descriptor. */
+ uint8_t att_flags;
+
+ /** Specifies minimum required key size to access this descriptor. */
+ uint8_t min_key_size;
+
+ /** Callback that gets executed when the descriptor is read or written. */
+ ble_gatt_access_fn *access_cb;
+
+ /** Optional argument for callback. */
+ void *arg;
+};
+
+/**
+ * Context for an access to a GATT characteristic or descriptor. When a client
+ * reads or writes a locally registered characteristic or descriptor, an
+ * instance of this struct gets passed to the application callback.
+ */
+struct ble_gatt_access_ctxt {
+ /**
+ * Indicates the gatt operation being performed. This is equal to one of
+ * the following values:
+ * o BLE_GATT_ACCESS_OP_READ_CHR
+ * o BLE_GATT_ACCESS_OP_WRITE_CHR
+ * o BLE_GATT_ACCESS_OP_READ_DSC
+ * o BLE_GATT_ACCESS_OP_WRITE_DSC
+ */
+ uint8_t op;
+
+ /**
+ * A container for the GATT access data.
+ * o For reads: The application populates this with the value of the
+ * characteristic or descriptor being read.
+ * o For writes: This is already populated with the value being written
+ * by the peer. If the application wishes to retain this mbuf for
+ * later use, the access callback must set this pointer to NULL to
+ * prevent the stack from freeing it.
+ */
+ struct os_mbuf *om;
+
+ /**
+ * The GATT operation being performed dictates which field in this union is
+ * valid. If a characteristic is being accessed, the chr field is valid.
+ * Otherwise a descriptor is being accessed, in which case the dsc field
+ * is valid.
+ */
+ union {
+ /**
+ * The characteristic definition corresponding to the characteristic
+ * being accessed. This is what the app registered at startup.
+ */
+ const struct ble_gatt_chr_def *chr;
+
+ /**
+ * The descriptor definition corresponding to the descriptor being
+ * accessed. This is what the app registered at startup.
+ */
+ const struct ble_gatt_dsc_def *dsc;
+ };
+};
+
+/**
+ * Context passed to the registration callback; represents the GATT service,
+ * characteristic, or descriptor being registered.
+ */
+struct ble_gatt_register_ctxt {
+ /**
+ * Indicates the gatt registration operation just performed. This is
+ * equal to one of the following values:
+ * o BLE_GATT_REGISTER_OP_SVC
+ * o BLE_GATT_REGISTER_OP_CHR
+ * o BLE_GATT_REGISTER_OP_DSC
+ */
+ uint8_t op;
+
+ /**
+ * The value of the op field determines which field in this union is valid.
+ */
+ union {
+ /** Service; valid if op == BLE_GATT_REGISTER_OP_SVC. */
+ struct {
+ /** The ATT handle of the service definition attribute. */
+ uint16_t handle;
+
+ /**
+ * The service definition representing the service being
+ * registered.
+ */
+ const struct ble_gatt_svc_def *svc_def;
+ } svc;
+
+ /** Characteristic; valid if op == BLE_GATT_REGISTER_OP_CHR. */
+ struct {
+ /** The ATT handle of the characteristic definition attribute. */
+ uint16_t def_handle;
+
+ /** The ATT handle of the characteristic value attribute. */
+ uint16_t val_handle;
+
+ /**
+ * The characteristic definition representing the characteristic
+ * being registered.
+ */
+ const struct ble_gatt_chr_def *chr_def;
+
+ /**
+ * The service definition corresponding to the characteristic's
+ * parent service.
+ */
+ const struct ble_gatt_svc_def *svc_def;
+ } chr;
+
+ /** Descriptor; valid if op == BLE_GATT_REGISTER_OP_DSC. */
+ struct {
+ /** The ATT handle of the descriptor definition attribute. */
+ uint16_t handle;
+
+ /**
+ * The descriptor definition corresponding to the descriptor being
+ * registered.
+ */
+ const struct ble_gatt_dsc_def *dsc_def;
+
+ /**
+ * The characteristic definition corresponding to the descriptor's
+ * parent characteristic.
+ */
+ const struct ble_gatt_chr_def *chr_def;
+
+ /**
+ * The service definition corresponding to the descriptor's
+ * grandparent service
+ */
+ const struct ble_gatt_svc_def *svc_def;
+ } dsc;
+ };
+};
+
+typedef void ble_gatt_register_fn(struct ble_gatt_register_ctxt *ctxt,
+ void *arg);
+
+/**
+ * Queues a set of service definitions for registration. All services queued
+ * in this manner get registered when ble_gatts_start() is called.
+ *
+ * @param svcs An array of service definitions to queue for
+ * registration. This array must be
+ * terminated with an entry whose 'type'
+ * equals 0.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOMEM on heap exhaustion.
+ */
+int ble_gatts_add_svcs(const struct ble_gatt_svc_def *svcs);
+
+/**
+ * Set visibility of local GATT service. Invisible services are not removed
+ * from database but are not discoverable by peer devices. Service Changed
+ * should be handled by application when needed by calling
+ * ble_svc_gatt_changed().
+ *
+ * @param handle Handle of service
+ * @param visible non-zero if service should be visible
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOENT if service wasn't found.
+ */
+int ble_gatts_svc_set_visibility(uint16_t handle, int visible);
+
+/**
+ * Adjusts a host configuration object's settings to accommodate the specified
+ * service definition array. This function adds the counts to the appropriate
+ * fields in the supplied configuration object without clearing them first, so
+ * it can be called repeatedly with different inputs to calculate totals. Be
+ * sure to zero the GATT server settings prior to the first call to this
+ * function.
+ *
+ * @param defs The service array containing the resource
+ * definitions to be counted.
+ *
+ * @return 0 on success;
+ * BLE_HS_EINVAL if the svcs array contains an
+ * invalid resource definition.
+ */
+int ble_gatts_count_cfg(const struct ble_gatt_svc_def *defs);
+
+/**
+ * Send notification (or indication) to any connected devices that have
+ * subscribed for notification (or indication) for specified characteristic.
+ *
+ * @param chr_val_handle Characteristic value handle
+ */
+void ble_gatts_chr_updated(uint16_t chr_val_handle);
+
+/**
+ * Retrieves the attribute handle associated with a local GATT service.
+ *
+ * @param uuid The UUID of the service to look up.
+ * @param out_handle On success, populated with the handle of the
+ * service attribute. Pass null if you don't
+ * need this value.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOENT if the specified service could
+ * not be found.
+ */
+int ble_gatts_find_svc(const ble_uuid_t *uuid, uint16_t *out_handle);
+
+/**
+ * Retrieves the pair of attribute handles associated with a local GATT
+ * characteristic.
+ *
+ * @param svc_uuid The UUID of the parent service.
+ * @param chr_uuid The UUID of the characteristic to look up.
+ * @param out_def_handle On success, populated with the handle
+ * of the characteristic definition attribute.
+ * Pass null if you don't need this value.
+ * @param out_val_handle On success, populated with the handle
+ * of the characteristic value attribute.
+ * Pass null if you don't need this value.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOENT if the specified service or
+ * characteristic could not be found.
+ */
+int ble_gatts_find_chr(const ble_uuid_t *svc_uuid, const ble_uuid_t *chr_uuid,
+ uint16_t *out_def_handle, uint16_t *out_val_handle);
+
+/**
+ * Retrieves the attribute handle associated with a local GATT descriptor.
+ *
+ * @param svc_uuid The UUID of the grandparent service.
+ * @param chr_uuid The UUID of the parent characteristic.
+ * @param dsc_uuid The UUID of the descriptor ro look up.
+ * @param out_handle On success, populated with the handle
+ * of the descriptor attribute. Pass null if
+ * you don't need this value.
+ *
+ * @return 0 on success;
+ * BLE_HS_ENOENT if the specified service,
+ * characteristic, or descriptor could not be
+ * found.
+ */
+int ble_gatts_find_dsc(const ble_uuid_t *svc_uuid, const ble_uuid_t *chr_uuid,
+ const ble_uuid_t *dsc_uuid, uint16_t *out_dsc_handle);
+
+typedef void (*ble_gatt_svc_foreach_fn)(const struct ble_gatt_svc_def *svc,
+ uint16_t handle,
+ uint16_t end_group_handle,
+ void *arg);
+
+/**
+ * Prints dump of local GATT database. This is useful to log local state of
+ * database in human readable form.
+ */
+void ble_gatts_show_local(void);
+
+/**
+ * Resets the GATT server to its initial state. On success, this function
+ * removes all supported services, characteristics, and descriptors. This
+ * function requires that:
+ * o No peers are connected, and
+ * o No GAP operations are active (advertise, discover, or connect).
+ *
+ * @return 0 on success;
+ * BLE_HS_EBUSY if the GATT server could not be
+ * reset due to existing connections or active
+ * GAP procedures.
+ */
+int ble_gatts_reset(void);
+
+/**
+ * Makes all registered services available to peers. This function gets called
+ * automatically by the NimBLE host on startup; manual calls are only necessary
+ * for replacing the set of supported services with a new one. This function
+ * requires that:
+ * o No peers are connected, and
+ * o No GAP operations are active (advertise, discover, or connect).
+ *
+ * @return 0 on success;
+ * A BLE host core return code on unexpected
+ * error.
+ */
+int ble_gatts_start(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs.h
new file mode 100644
index 00000000..6c2acfd4
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs.h
@@ -0,0 +1,386 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_HS_
+#define H_BLE_HS_
+
+/**
+ * @brief Bluetooth Host
+ * @defgroup bt_host Bluetooth Host
+ * @{
+ */
+
+#include <inttypes.h>
+#include "nimble/hci_common.h"
+#include "host/ble_att.h"
+#include "host/ble_eddystone.h"
+#include "host/ble_gap.h"
+#include "host/ble_gatt.h"
+#include "host/ble_hs_adv.h"
+#include "host/ble_hs_id.h"
+#include "host/ble_hs_hci.h"
+#include "host/ble_hs_log.h"
+#include "host/ble_hs_mbuf.h"
+#include "host/ble_hs_stop.h"
+#include "host/ble_ibeacon.h"
+#include "host/ble_l2cap.h"
+#include "host/ble_sm.h"
+#include "host/ble_store.h"
+#include "host/ble_uuid.h"
+#include "nimble/nimble_npl.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BLE_HS_FOREVER INT32_MAX
+
+/** Connection handle not present */
+#define BLE_HS_CONN_HANDLE_NONE 0xffff
+
+/**
+ * @brief Bluetooth Host Error Code
+ * @defgroup bt_host_err Bluetooth Host Error Code
+ *
+ * Defines error codes returned by Bluetooth host. If error comes from specific
+ * component (eg L2CAP or Security Manager) it is shifted by base allowing to
+ * identify component.
+ * @{
+ */
+
+#define BLE_HS_EAGAIN 1
+#define BLE_HS_EALREADY 2
+#define BLE_HS_EINVAL 3
+#define BLE_HS_EMSGSIZE 4
+#define BLE_HS_ENOENT 5
+#define BLE_HS_ENOMEM 6
+#define BLE_HS_ENOTCONN 7
+#define BLE_HS_ENOTSUP 8
+#define BLE_HS_EAPP 9
+#define BLE_HS_EBADDATA 10
+#define BLE_HS_EOS 11
+#define BLE_HS_ECONTROLLER 12
+#define BLE_HS_ETIMEOUT 13
+#define BLE_HS_EDONE 14
+#define BLE_HS_EBUSY 15
+#define BLE_HS_EREJECT 16
+#define BLE_HS_EUNKNOWN 17
+#define BLE_HS_EROLE 18
+#define BLE_HS_ETIMEOUT_HCI 19
+#define BLE_HS_ENOMEM_EVT 20
+#define BLE_HS_ENOADDR 21
+#define BLE_HS_ENOTSYNCED 22
+#define BLE_HS_EAUTHEN 23
+#define BLE_HS_EAUTHOR 24
+#define BLE_HS_EENCRYPT 25
+#define BLE_HS_EENCRYPT_KEY_SZ 26
+#define BLE_HS_ESTORE_CAP 27
+#define BLE_HS_ESTORE_FAIL 28
+#define BLE_HS_EPREEMPTED 29
+#define BLE_HS_EDISABLED 30
+#define BLE_HS_ESTALLED 31
+
+/** Error base for ATT errors */
+#define BLE_HS_ERR_ATT_BASE 0x100
+
+/** Converts error to ATT base */
+#define BLE_HS_ATT_ERR(x) ((x) ? BLE_HS_ERR_ATT_BASE + (x) : 0)
+
+/** Error base for HCI errors */
+#define BLE_HS_ERR_HCI_BASE 0x200
+
+/** Converts error to HCI base */
+#define BLE_HS_HCI_ERR(x) ((x) ? BLE_HS_ERR_HCI_BASE + (x) : 0)
+
+/** Error base for L2CAP errors */
+#define BLE_HS_ERR_L2C_BASE 0x300
+
+/** Converts error to L2CAP base */
+#define BLE_HS_L2C_ERR(x) ((x) ? BLE_HS_ERR_L2C_BASE + (x) : 0)
+
+/** Error base for local Security Manager errors */
+#define BLE_HS_ERR_SM_US_BASE 0x400
+
+/** Converts error to local Security Manager base */
+#define BLE_HS_SM_US_ERR(x) ((x) ? BLE_HS_ERR_SM_US_BASE + (x) : 0)
+
+/** Error base for remote (peer) Security Manager errors */
+#define BLE_HS_ERR_SM_PEER_BASE 0x500
+
+/** Converts error to remote (peer) Security Manager base */
+#define BLE_HS_SM_PEER_ERR(x) ((x) ? BLE_HS_ERR_SM_PEER_BASE + (x) : 0)
+
+/** Error base for hardware errors */
+#define BLE_HS_ERR_HW_BASE 0x600
+
+/** Converts error to hardware error base */
+#define BLE_HS_HW_ERR(x) (BLE_HS_ERR_HW_BASE + (x))
+
+/**
+ * @}
+ */
+
+/**
+ * @brief Bluetooth Host Configuration
+ * @defgroup bt_host_conf Bluetooth Host Configuration
+ *
+ * @{
+ */
+
+/**
+ * @brief Local Input-Output capabilities of device
+ * @defgroup bt_host_io_local Local Input-Output capabilities of device
+ *
+ * @{
+ */
+
+/** DisplayOnly IO capability */
+#define BLE_HS_IO_DISPLAY_ONLY 0x00
+
+/** DisplayYesNo IO capability */
+#define BLE_HS_IO_DISPLAY_YESNO 0x01
+
+/** KeyboardOnly IO capability */
+#define BLE_HS_IO_KEYBOARD_ONLY 0x02
+
+/** NoInputNoOutput IO capability */
+#define BLE_HS_IO_NO_INPUT_OUTPUT 0x03
+
+/** KeyboardDisplay Only IO capability */
+#define BLE_HS_IO_KEYBOARD_DISPLAY 0x04
+
+/**
+ * @}
+ */
+
+/** @brief Stack reset callback
+ *
+ * @param reason Reason code for reset
+ */
+typedef void ble_hs_reset_fn(int reason);
+
+
+/** @brief Stack sync callback */
+typedef void ble_hs_sync_fn(void);
+
+/** @brief Bluetooth Host main configuration structure
+ *
+ * Those can be used by application to configure stack.
+ *
+ * The only reason Security Manager (sm_ members) is configurable at runtime is
+ * to simplify security testing. Defaults for those are configured by selecting
+ * proper options in application's syscfg.
+ */
+struct ble_hs_cfg {
+ /**
+ * An optional callback that gets executed upon registration of each GATT
+ * resource (service, characteristic, or descriptor).
+ */
+ ble_gatt_register_fn *gatts_register_cb;
+
+ /**
+ * An optional argument that gets passed to the GATT registration
+ * callback.
+ */
+ void *gatts_register_arg;
+
+ /** Security Manager Local Input Output Capabilities */
+ uint8_t sm_io_cap;
+
+ /** @brief Security Manager OOB flag
+ *
+ * If set proper flag in Pairing Request/Response will be set.
+ */
+ unsigned sm_oob_data_flag:1;
+
+ /** @brief Security Manager Bond flag
+ *
+ * If set proper flag in Pairing Request/Response will be set. This results
+ * in storing keys distributed during bonding.
+ */
+ unsigned sm_bonding:1;
+
+ /** @brief Security Manager MITM flag
+ *
+ * If set proper flag in Pairing Request/Response will be set. This results
+ * in requiring Man-In-The-Middle protection when pairing.
+ */
+ unsigned sm_mitm:1;
+
+ /** @brief Security Manager Secure Connections flag
+ *
+ * If set proper flag in Pairing Request/Response will be set. This results
+ * in using LE Secure Connections for pairing if also supported by remote
+ * device. Fallback to legacy pairing if not supported by remote.
+ */
+ unsigned sm_sc:1;
+
+ /** @brief Security Manager Key Press Notification flag
+ *
+ * Currently unsupported and should not be set.
+ */
+ unsigned sm_keypress:1;
+
+ /** @brief Security Manager Local Key Distribution Mask */
+ uint8_t sm_our_key_dist;
+
+ /** @brief Security Manager Remote Key Distribution Mask */
+ uint8_t sm_their_key_dist;
+
+ /** @brief Stack reset callback
+ *
+ * This callback is executed when the host resets itself and the controller
+ * due to fatal error.
+ */
+ ble_hs_reset_fn *reset_cb;
+
+ /** @brief Stack sync callback
+ *
+ * This callback is executed when the host and controller become synced.
+ * This happens at startup and after a reset.
+ */
+ ble_hs_sync_fn *sync_cb;
+
+ /* XXX: These need to go away. Instead, the nimble host package should
+ * require the host-store API (not yet implemented)..
+ */
+ /** Storage Read callback handles read of security material */
+ ble_store_read_fn *store_read_cb;
+
+ /** Storage Write callback handles write of security material */
+ ble_store_write_fn *store_write_cb;
+
+ /** Storage Delete callback handles deletion of security material */
+ ble_store_delete_fn *store_delete_cb;
+
+ /** @brief Storage Status callback.
+ *
+ * This callback gets executed when a persistence operation cannot be
+ * performed or a persistence failure is imminent. For example, if is
+ * insufficient storage capacity for a record to be persisted, this
+ * function gets called to give the application the opportunity to make
+ * room.
+ */
+ ble_store_status_fn *store_status_cb;
+
+ /** An optional argument that gets passed to the storage status callback. */
+ void *store_status_arg;
+};
+
+extern struct ble_hs_cfg ble_hs_cfg;
+
+/**
+ * @}
+ */
+
+/**
+ * @brief Indicates whether the host is enabled. The host is enabled if it is
+ * starting or fully started. It is disabled if it is stopping or stopped.
+ *
+ * @return 1 if the host is enabled;
+ * 0 if the host is disabled.
+ */
+int ble_hs_is_enabled(void);
+
+/**
+ * Indicates whether the host has synchronized with the controller.
+ * Synchronization must occur before any host procedures can be performed.
+ *
+ * @return 1 if the host and controller are in sync;
+ * 0 if the host and controller are out of sync.
+ */
+int ble_hs_synced(void);
+
+/**
+ * Synchronizes the host with the controller by sending a sequence of HCI
+ * commands. This function must be called before any other host functionality
+ * is used, but it must be called after both the host and controller are
+ * initialized. Typically, the host-parent-task calls this function at the top
+ * of its task routine. This function must only be called in the host parent
+ * task. A safe alternative for starting the stack from any task is to call
+ * `ble_hs_sched_start()`.
+ *
+ * If the host fails to synchronize with the controller (if the controller is
+ * not fully booted, for example), the host will attempt to resynchronize every
+ * 100 ms. For this reason, an error return code is not necessarily fatal.
+ *
+ * @return 0 on success; nonzero on error.
+ */
+int ble_hs_start(void);
+
+/**
+ * Enqueues a host start event to the default event queue. The actual host
+ * startup is performed in the host parent task, but using the default queue
+ * here ensures the event won't run until the end of main() when this is
+ * called during system initialization. This allows the application to
+ * configure the host package in the meantime.
+ *
+ * If auto-start is disabled, the application should use this function to start
+ * the BLE stack. This function can be called at any time as long as the host
+ * is stopped. When the host successfully starts, the application is notified
+ * via the ble_hs_cfg.sync_cb callback.
+ */
+void ble_hs_sched_start(void);
+
+/**
+ * Causes the host to reset the NimBLE stack as soon as possible. The
+ * application is notified when the reset occurs via the host reset callback.
+ *
+ * @param reason The host error code that gets passed to the reset callback.
+ */
+void ble_hs_sched_reset(int reason);
+
+/**
+ * Designates the specified event queue for NimBLE host work. By default, the
+ * host uses the default event queue and runs in the main task. This function
+ * is useful if you want the host to run in a different task.
+ *
+ * @param evq The event queue to use for host work.
+ */
+void ble_hs_evq_set(struct ble_npl_eventq *evq);
+
+/**
+ * Initializes the NimBLE host. This function must be called before the OS is
+ * started. The NimBLE stack requires an application task to function. One
+ * application task in particular is designated as the "host parent task". In
+ * addition to application-specific work, the host parent task does work for
+ * NimBLE by processing events generated by the host.
+ */
+void ble_hs_init(void);
+
+/**
+ * @brief Called when the system is shutting down. Stops the BLE host.
+ *
+ * @param reason The reason for the shutdown. One of the
+ * HAL_RESET_[...] codes or an
+ * implementation-defined value.
+ *
+ * @return SYSDOWN_IN_PROGRESS.
+ */
+int ble_hs_shutdown(int reason);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_adv.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_adv.h
new file mode 100644
index 00000000..e3b6ea70
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_adv.h
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_HS_ADV_
+#define H_BLE_HS_ADV_
+
+#include <inttypes.h>
+#include "host/ble_uuid.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BLE_HS_ADV_MAX_SZ BLE_HCI_MAX_ADV_DATA_LEN
+
+/** Max field payload size (account for 2-byte header). */
+#define BLE_HS_ADV_MAX_FIELD_SZ (BLE_HS_ADV_MAX_SZ - 2)
+
+struct ble_hs_adv_field {
+ uint8_t length;
+ uint8_t type;
+ uint8_t value[0];
+};
+
+typedef int (* ble_hs_adv_parse_func_t) (const struct ble_hs_adv_field *,
+ void *);
+
+struct ble_hs_adv_fields {
+ /*** 0x01 - Flags. */
+ uint8_t flags;
+
+ /*** 0x02,0x03 - 16-bit service class UUIDs. */
+ const ble_uuid16_t *uuids16;
+ uint8_t num_uuids16;
+ unsigned uuids16_is_complete:1;
+
+ /*** 0x04,0x05 - 32-bit service class UUIDs. */
+ const ble_uuid32_t *uuids32;
+ uint8_t num_uuids32;
+ unsigned uuids32_is_complete:1;
+
+ /*** 0x06,0x07 - 128-bit service class UUIDs. */
+ const ble_uuid128_t *uuids128;
+ uint8_t num_uuids128;
+ unsigned uuids128_is_complete:1;
+
+ /*** 0x08,0x09 - Local name. */
+ const uint8_t *name;
+ uint8_t name_len;
+ unsigned name_is_complete:1;
+
+ /*** 0x0a - Tx power level. */
+ int8_t tx_pwr_lvl;
+ unsigned tx_pwr_lvl_is_present:1;
+
+ /*** 0x0d - Slave connection interval range. */
+ const uint8_t *slave_itvl_range;
+
+ /*** 0x16 - Service data - 16-bit UUID. */
+ const uint8_t *svc_data_uuid16;
+ uint8_t svc_data_uuid16_len;
+
+ /*** 0x17 - Public target address. */
+ const uint8_t *public_tgt_addr;
+ uint8_t num_public_tgt_addrs;
+
+ /*** 0x19 - Appearance. */
+ uint16_t appearance;
+ unsigned appearance_is_present:1;
+
+ /*** 0x1a - Advertising interval. */
+ uint16_t adv_itvl;
+ unsigned adv_itvl_is_present:1;
+
+ /*** 0x20 - Service data - 32-bit UUID. */
+ const uint8_t *svc_data_uuid32;
+ uint8_t svc_data_uuid32_len;
+
+ /*** 0x21 - Service data - 128-bit UUID. */
+ const uint8_t *svc_data_uuid128;
+ uint8_t svc_data_uuid128_len;
+
+ /*** 0x24 - URI. */
+ const uint8_t *uri;
+ uint8_t uri_len;
+
+ /*** 0xff - Manufacturer specific data. */
+ const uint8_t *mfg_data;
+ uint8_t mfg_data_len;
+};
+
+#define BLE_HS_ADV_TYPE_FLAGS 0x01
+#define BLE_HS_ADV_TYPE_INCOMP_UUIDS16 0x02
+#define BLE_HS_ADV_TYPE_COMP_UUIDS16 0x03
+#define BLE_HS_ADV_TYPE_INCOMP_UUIDS32 0x04
+#define BLE_HS_ADV_TYPE_COMP_UUIDS32 0x05
+#define BLE_HS_ADV_TYPE_INCOMP_UUIDS128 0x06
+#define BLE_HS_ADV_TYPE_COMP_UUIDS128 0x07
+#define BLE_HS_ADV_TYPE_INCOMP_NAME 0x08
+#define BLE_HS_ADV_TYPE_COMP_NAME 0x09
+#define BLE_HS_ADV_TYPE_TX_PWR_LVL 0x0a
+#define BLE_HS_ADV_TYPE_SLAVE_ITVL_RANGE 0x12
+#define BLE_HS_ADV_TYPE_SOL_UUIDS16 0x14
+#define BLE_HS_ADV_TYPE_SOL_UUIDS128 0x15
+#define BLE_HS_ADV_TYPE_SVC_DATA_UUID16 0x16
+#define BLE_HS_ADV_TYPE_PUBLIC_TGT_ADDR 0x17
+#define BLE_HS_ADV_TYPE_RANDOM_TGT_ADDR 0x18
+#define BLE_HS_ADV_TYPE_APPEARANCE 0x19
+#define BLE_HS_ADV_TYPE_ADV_ITVL 0x1a
+#define BLE_HS_ADV_TYPE_SVC_DATA_UUID32 0x20
+#define BLE_HS_ADV_TYPE_SVC_DATA_UUID128 0x21
+#define BLE_HS_ADV_TYPE_URI 0x24
+#define BLE_HS_ADV_TYPE_MESH_PROV 0x29
+#define BLE_HS_ADV_TYPE_MESH_MESSAGE 0x2a
+#define BLE_HS_ADV_TYPE_MESH_BEACON 0x2b
+#define BLE_HS_ADV_TYPE_MFG_DATA 0xff
+
+#define BLE_HS_ADV_FLAGS_LEN 1
+#define BLE_HS_ADV_F_DISC_LTD 0x01
+#define BLE_HS_ADV_F_DISC_GEN 0x02
+#define BLE_HS_ADV_F_BREDR_UNSUP 0x04
+
+#define BLE_HS_ADV_TX_PWR_LVL_LEN 1
+
+/**
+ * Set the tx_pwr_lvl field to this if you want the stack to fill in the tx
+ * power level field.
+ */
+#define BLE_HS_ADV_TX_PWR_LVL_AUTO (-128)
+
+#define BLE_HS_ADV_SLAVE_ITVL_RANGE_LEN 4
+
+#define BLE_HS_ADV_SVC_DATA_UUID16_MIN_LEN 2
+
+#define BLE_HS_ADV_PUBLIC_TGT_ADDR_ENTRY_LEN 6
+
+#define BLE_HS_ADV_APPEARANCE_LEN 2
+
+#define BLE_HS_ADV_ADV_ITVL_LEN 2
+
+#define BLE_HS_ADV_SVC_DATA_UUID32_MIN_LEN 4
+
+#define BLE_HS_ADV_SVC_DATA_UUID128_MIN_LEN 16
+
+int ble_hs_adv_set_fields_mbuf(const struct ble_hs_adv_fields *adv_fields,
+ struct os_mbuf *om);
+
+int ble_hs_adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
+ uint8_t *dst, uint8_t *dst_len, uint8_t max_len);
+
+int ble_hs_adv_parse_fields(struct ble_hs_adv_fields *adv_fields,
+ const uint8_t *src, uint8_t src_len);
+
+int ble_hs_adv_parse(const uint8_t *data, uint8_t length,
+ ble_hs_adv_parse_func_t func, void *user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_hci.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_hci.h
new file mode 100644
index 00000000..e10b8e62
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_hci.h
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_HS_HCI_
+#define H_BLE_HS_HCI_
+
+/**
+ * @brief Bluetooth Host HCI utils
+ * @defgroup bt_host_hci Bluetooth Host HCI utils
+ * @ingroup bt_host
+ * @{
+ */
+
+#include <inttypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Queries the controller for the channel map used with the specified
+ * connection. The channel map is represented as an array of five bytes, with
+ * each bit corresponding to an individual channel. The array is interpreted
+ * as little-endian, such that:
+ * map[0] & 0x01 --> Channel 0.
+ * map[0] & 0x02 --> Channel 1.
+ * ...
+ * map[1] & 0x01 --> Channel 8.
+ *
+ * As there are 37 channels, only the first 37 bits get written.
+ *
+ * If a bit is 1, the corresponding channel is used. Otherwise, the channel is
+ * unused.
+ *
+ * @param conn_handle The handle of the connection whose channel map
+ * is being read.
+ * @param out_chan_map On success, the retrieved channel map gets
+ * written here. This buffer must have a size
+ * >= 5 bytes.
+ *
+ * @return 0 on success;
+ * A BLE host HCI return code if the controller
+ * rejected the request;
+ * A BLE host core return code on unexpected
+ * error.
+ */
+int ble_hs_hci_read_chan_map(uint16_t conn_handle, uint8_t *out_chan_map);
+
+/**
+ * Instructs the controller to use the specified channel map. The channel map
+ * is represented as an array of five bytes, with each bit corresponding to an
+ * individual channel. The array is interpreted as little-endian, such that:
+ * map[0] & 0x01 --> Channel 0.
+ * map[0] & 0x02 --> Channel 1.
+ * ...
+ * map[1] & 0x01 --> Channel 8.
+ *
+ * As there are 37 channels, only the first 37 bits should be written are used.
+ *
+ * If a bit is 1, the corresponding channel can be used. Otherwise, the
+ * channel should not be used.
+ *
+ * @param chan_map The channel map to configure. This buffer
+ * should have a size of 5 bytes.
+ *
+ * @return 0 on success;
+ * A BLE host HCI return code if the controller
+ * rejected the request;
+ * A BLE host core return code on unexpected
+ * error.
+ */
+int ble_hs_hci_set_chan_class(const uint8_t *chan_map);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_id.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_id.h
new file mode 100644
index 00000000..c96bd20f
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_id.h
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_HS_ID_
+#define H_BLE_HS_ID_
+
+/**
+ * @brief Bluetooth Host Identity
+ * @defgroup bt_host_id Bluetooth Host Identity
+ * @ingroup bt_host
+ * @{
+ */
+
+#include <inttypes.h>
+#include "nimble/ble.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Generates a new random address. This function does not configure the device
+ * with the new address; the caller can use the address in subsequent
+ * operations.
+ *
+ * @param nrpa The type of random address to generate:
+ * 0: static
+ * 1: non-resolvable private
+ * @param out_addr On success, the generated address gets written
+ * here.
+ *
+ * @return 0 on success; nonzero on failure.
+ */
+int ble_hs_id_gen_rnd(int nrpa, ble_addr_t *out_addr);
+
+/**
+ * Sets the device's random address. The address type (static vs.
+ * non-resolvable private) is inferred from the most-significant byte of the
+ * address. The address is specified in host byte order (little-endian!).
+ *
+ * @param rnd_addr The random address to set.
+ *
+ * @return 0 on success;
+ * BLE_HS_EINVAL if the specified address is not a
+ * valid static random or non-resolvable
+ * private address.
+ * Other nonzero on error.
+ */
+int ble_hs_id_set_rnd(const uint8_t *rnd_addr);
+
+/**
+ * Retrieves one of the device's identity addresses. The device can have two
+ * identity addresses: one public and one random. The id_addr_type argument
+ * specifies which of these two addresses to retrieve.
+ *
+ * @param id_addr_type The type of identity address to retrieve.
+ * Valid values are:
+ * o BLE_ADDR_PUBLIC
+ * o BLE_ADDR_RANDOM
+ * @param out_id_addr On success, the requested identity address is
+ * copied into this buffer. The buffer must
+ * be at least six bytes in size. Pass NULL
+ * if you do not require this information.
+ * @param out_is_nrpa On success, the pointed-to value indicates
+ * whether the retrieved address is a
+ * non-resolvable private address. Pass NULL
+ * if you do not require this information.
+ *
+ * @return 0 on success;
+ * BLE_HS_EINVAL if an invalid address type was
+ * specified;
+ * BLE_HS_ENOADDR if the device does not have an
+ * identity address of the requested type;
+ * Other BLE host core code on error.
+ */
+int ble_hs_id_copy_addr(uint8_t id_addr_type, uint8_t *out_id_addr,
+ int *out_is_nrpa);
+
+/**
+ * Determines the best address type to use for automatic address type
+ * resolution. Calculation of the best address type is done as follows:
+ *
+ * if privacy requested:
+ * if we have a random static address:
+ * --> RPA with static random ID
+ * else
+ * --> RPA with public ID
+ * end
+ * else
+ * if we have a random static address:
+ * --> random static address
+ * else
+ * --> public address
+ * end
+ * end
+ *
+ * @param privacy (0/1) Whether to use a private address.
+ * @param out_addr_type On success, the "own addr type" code gets
+ * written here.
+ *
+ * @return 0 if an address type was successfully inferred.
+ * BLE_HS_ENOADDR if the device does not have a
+ * suitable address.
+ * Other BLE host core code on error.
+ */
+int ble_hs_id_infer_auto(int privacy, uint8_t *out_addr_type);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_log.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_log.h
new file mode 100644
index 00000000..8d0a4596
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_log.h
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_HS_LOG_
+#define H_BLE_HS_LOG_
+
+#include "modlog/modlog.h"
+
+/* Only include the logcfg header if this version of newt can generate it. */
+#if MYNEWT_VAL(NEWT_FEATURE_LOGCFG)
+#include "logcfg/logcfg.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct os_mbuf;
+
+#define BLE_HS_LOG(lvl, ...) \
+ BLE_HS_LOG_ ## lvl(__VA_ARGS__)
+
+#define BLE_HS_LOG_ADDR(lvl, addr) \
+ BLE_HS_LOG_ ## lvl("%02x:%02x:%02x:%02x:%02x:%02x", \
+ (addr)[5], (addr)[4], (addr)[3], \
+ (addr)[2], (addr)[1], (addr)[0])
+
+
+void ble_hs_log_mbuf(const struct os_mbuf *om);
+void ble_hs_log_flat_buf(const void *data, int len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_mbuf.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_mbuf.h
new file mode 100644
index 00000000..a3c2c029
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_mbuf.h
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_HS_MBUF_
+#define H_BLE_HS_MBUF_
+
+/**
+ * @brief Bluetooth Host chained memory buffer (mbuf)
+ * @defgroup bt_host_mbuf Bluetooth Host chained memory buffer (mbuf)
+ * @ingroup bt_host
+ * @{
+ */
+
+#include <inttypes.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct os_mbuf;
+
+/**
+ * Allocates an mbuf suitable for an ATT command packet. The resulting packet
+ * has sufficient leading space for:
+ * - ACL data header
+ * - L2CAP B-frame header
+ * - Largest ATT command base (prepare write request / response).
+ *
+ * @return An empty mbuf on success, NULL on error.
+ */
+struct os_mbuf *ble_hs_mbuf_att_pkt(void);
+
+/**
+ * Allocates an mbuf and fills it with the contents of the specified flat
+ * buffer.
+ *
+ * @param buf The flat buffer to copy from.
+ * @param len The length of the flat buffer.
+ *
+ * @return A newly-allocated mbuf on success, NULL on error.
+ */
+struct os_mbuf *ble_hs_mbuf_from_flat(const void *buf, uint16_t len);
+
+/**
+ * Copies the contents of an mbuf into the specified flat buffer. If the flat
+ * buffer is too small to contain the mbuf's contents, it is filled to capacity
+ * and BLE_HS_EMSGSIZE is returned.
+ *
+ * @param om The mbuf to copy from.
+ * @param flat The destination flat buffer.
+ * @param max_len The size of the flat buffer.
+ * @param out_copy_len The number of bytes actually copied gets written here.
+ *
+ * @return 0 on success or BLE host core return code on error.
+ */
+int ble_hs_mbuf_to_flat(const struct os_mbuf *om, void *flat, uint16_t max_len,
+ uint16_t *out_copy_len);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_stop.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_stop.h
new file mode 100644
index 00000000..d16c9c27
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_hs_stop.h
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_HS_STOP_
+#define H_BLE_HS_STOP_
+
+/** @typedef ble_hs_stop_fn
+ * @brief Callback function; reports the result of a host stop procedure.
+ *
+ * @param status The result of the host stop procedure. One of
+ * the HAL_RESET_[...] codes or an
+ * implementation-defined value.
+ * @param arg Optional argument specified when the stop
+ * procedure was initiated.
+ *
+ */
+typedef void ble_hs_stop_fn(int status, void *arg);
+
+/**
+ * @brief Used to report the result of a stop procedure.
+ *
+ * This should be used as an opaque structure and not modified manually.
+ */
+struct ble_hs_stop_listener {
+ ble_hs_stop_fn *fn;
+ void *arg;
+ SLIST_ENTRY(ble_hs_stop_listener) link;
+};
+
+/**
+ * @brief Stops the BLE host.
+ *
+ * Aborts all active GAP procedures and terminates all open connections.
+ * Connection termination is performed asynchronously, so this function's
+ * result is reported via the provided listener.
+ *
+ * @param listener A listener to populate. This object's initial
+ * value doesn't matter, but its lifetime must
+ * extend until the stop procedure completes.
+ * @param fn The callback to execute when the stop procedure
+ * completes.
+ * @param arg Optional argument to pass to the callback.
+ *
+ * @return 0: Stop procedure successfully initiated.
+ * BLE_HS_EBUSY: Stop procedure already in
+ * progress; the provided callback gets called
+ * when the procedure completes.
+ * BLE_HS_EALREADY: Host already stopped; the
+ * provided callback does *not* get called.
+ */
+int ble_hs_stop(struct ble_hs_stop_listener *listener,
+ ble_hs_stop_fn *fn, void *arg);
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_ibeacon.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_ibeacon.h
new file mode 100644
index 00000000..fff7c57a
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_ibeacon.h
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_IBEACON_
+#define H_BLE_IBEACON_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int ble_ibeacon_set_adv_data(void *uuid128, uint16_t major,
+ uint16_t minor, int8_t measured_power);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_l2cap.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_l2cap.h
new file mode 100644
index 00000000..aef9682c
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_l2cap.h
@@ -0,0 +1,266 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_L2CAP_
+#define H_BLE_L2CAP_
+
+#include "nimble/nimble_opt.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct ble_l2cap_sig_update_req;
+struct ble_hs_conn;
+
+#define BLE_L2CAP_CID_ATT 4
+#define BLE_L2CAP_CID_SIG 5
+#define BLE_L2CAP_CID_SM 6
+
+#define BLE_L2CAP_SIG_OP_REJECT 0x01
+#define BLE_L2CAP_SIG_OP_CONNECT_REQ 0x02
+#define BLE_L2CAP_SIG_OP_CONNECT_RSP 0x03
+#define BLE_L2CAP_SIG_OP_CONFIG_REQ 0x04
+#define BLE_L2CAP_SIG_OP_CONFIG_RSP 0x05
+#define BLE_L2CAP_SIG_OP_DISCONN_REQ 0x06
+#define BLE_L2CAP_SIG_OP_DISCONN_RSP 0x07
+#define BLE_L2CAP_SIG_OP_ECHO_REQ 0x08
+#define BLE_L2CAP_SIG_OP_ECHO_RSP 0x09
+#define BLE_L2CAP_SIG_OP_INFO_REQ 0x0a
+#define BLE_L2CAP_SIG_OP_INFO_RSP 0x0b
+#define BLE_L2CAP_SIG_OP_CREATE_CHAN_REQ 0x0c
+#define BLE_L2CAP_SIG_OP_CREATE_CHAN_RSP 0x0d
+#define BLE_L2CAP_SIG_OP_MOVE_CHAN_REQ 0x0e
+#define BLE_L2CAP_SIG_OP_MOVE_CHAN_RSP 0x0f
+#define BLE_L2CAP_SIG_OP_MOVE_CHAN_CONF_REQ 0x10
+#define BLE_L2CAP_SIG_OP_MOVE_CHAN_CONF_RSP 0x11
+#define BLE_L2CAP_SIG_OP_UPDATE_REQ 0x12
+#define BLE_L2CAP_SIG_OP_UPDATE_RSP 0x13
+#define BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_REQ 0x14
+#define BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_RSP 0x15
+#define BLE_L2CAP_SIG_OP_FLOW_CTRL_CREDIT 0x16
+#define BLE_L2CAP_SIG_OP_CREDIT_CONNECT_REQ 0x17
+#define BLE_L2CAP_SIG_OP_CREDIT_CONNECT_RSP 0x18
+#define BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_REQ 0x19
+#define BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_RSP 0x1A
+#define BLE_L2CAP_SIG_OP_MAX 0x1B
+
+#define BLE_L2CAP_SIG_ERR_CMD_NOT_UNDERSTOOD 0x0000
+#define BLE_L2CAP_SIG_ERR_MTU_EXCEEDED 0x0001
+#define BLE_L2CAP_SIG_ERR_INVALID_CID 0x0002
+
+#define BLE_L2CAP_COC_ERR_CONNECTION_SUCCESS 0x0000
+#define BLE_L2CAP_COC_ERR_UNKNOWN_LE_PSM 0x0002
+#define BLE_L2CAP_COC_ERR_NO_RESOURCES 0x0004
+#define BLE_L2CAP_COC_ERR_INSUFFICIENT_AUTHEN 0x0005
+#define BLE_L2CAP_COC_ERR_INSUFFICIENT_AUTHOR 0x0006
+#define BLE_L2CAP_COC_ERR_INSUFFICIENT_KEY_SZ 0x0007
+#define BLE_L2CAP_COC_ERR_INSUFFICIENT_ENC 0x0008
+#define BLE_L2CAP_COC_ERR_INVALID_SOURCE_CID 0x0009
+#define BLE_L2CAP_COC_ERR_SOURCE_CID_ALREADY_USED 0x000A
+#define BLE_L2CAP_COC_ERR_UNACCEPTABLE_PARAMETERS 0x000B
+#define BLE_L2CAP_COC_ERR_INVALID_PARAMETERS 0x000C
+
+#define BLE_L2CAP_ERR_RECONFIG_SUCCEED 0x0000
+#define BLE_L2CAP_ERR_RECONFIG_REDUCTION_MTU_NOT_ALLOWED 0x0001
+#define BLE_L2CAP_ERR_RECONFIG_REDUCTION_MPS_NOT_ALLOWED 0x0002
+#define BLE_L2CAP_ERR_RECONFIG_INVALID_DCID 0x0003
+#define BLE_L2CAP_ERR_RECONFIG_UNACCAPTED_PARAM 0x0004
+
+#define BLE_L2CAP_EVENT_COC_CONNECTED 0
+#define BLE_L2CAP_EVENT_COC_DISCONNECTED 1
+#define BLE_L2CAP_EVENT_COC_ACCEPT 2
+#define BLE_L2CAP_EVENT_COC_DATA_RECEIVED 3
+#define BLE_L2CAP_EVENT_COC_TX_UNSTALLED 4
+#define BLE_L2CAP_EVENT_COC_RECONFIG_COMPLETED 5
+#define BLE_L2CAP_EVENT_COC_PEER_RECONFIGURED 6
+
+typedef void ble_l2cap_sig_update_fn(uint16_t conn_handle, int status,
+ void *arg);
+
+struct ble_l2cap_sig_update_params {
+ uint16_t itvl_min;
+ uint16_t itvl_max;
+ uint16_t slave_latency;
+ uint16_t timeout_multiplier;
+};
+
+int ble_l2cap_sig_update(uint16_t conn_handle,
+ struct ble_l2cap_sig_update_params *params,
+ ble_l2cap_sig_update_fn *cb, void *cb_arg);
+
+struct ble_l2cap_chan;
+
+/**
+ * Represents a L2CAP-related event.
+ * When such an event occurs, the host notifies the application by passing an
+ * instance of this structure to an application-specified callback.
+ */
+struct ble_l2cap_event {
+ /**
+ * Indicates the type of L2CAP event that occurred. This is one of the
+ * BLE_L2CAP_EVENT codes.
+ */
+ uint8_t type;
+
+ /**
+ * A discriminated union containing additional details concerning the L2CAP
+ * event. The 'type' field indicates which member of the union is valid.
+ */
+ union {
+ /**
+ * Represents a connection attempt. Valid for the following event
+ * types:
+ * o BLE_L2CAP_EVENT_COC_CONNECTED */
+ struct {
+ /**
+ * The status of the connection attempt;
+ * o 0: the connection was successfully established.
+ * o BLE host error code: the connection attempt failed for
+ * the specified reason.
+ */
+ int status;
+
+ /** Connection handle of the relevant connection */
+ uint16_t conn_handle;
+
+ /** The L2CAP channel of the relevant L2CAP connection. */
+ struct ble_l2cap_chan *chan;
+ } connect;
+
+ /**
+ * Represents a terminated connection. Valid for the following event
+ * types:
+ * o BLE_L2CAP_EVENT_COC_DISCONNECTED
+ */
+ struct {
+ /** Connection handle of the relevant connection */
+ uint16_t conn_handle;
+
+ /** Information about the L2CAP connection prior to termination. */
+ struct ble_l2cap_chan *chan;
+ } disconnect;
+
+ /**
+ * Represents connection accept. Valid for the following event
+ * types:
+ * o BLE_L2CAP_EVENT_COC_ACCEPT
+ */
+ struct {
+ /** Connection handle of the relevant connection */
+ uint16_t conn_handle;
+
+ /** MTU supported by peer device on the channel */
+ uint16_t peer_sdu_size;
+
+ /** The L2CAP channel of the relevant L2CAP connection. */
+ struct ble_l2cap_chan *chan;
+ } accept;
+
+ /**
+ * Represents received data. Valid for the following event
+ * types:
+ * o BLE_L2CAP_EVENT_COC_DATA_RECEIVED
+ */
+ struct {
+ /** Connection handle of the relevant connection */
+ uint16_t conn_handle;
+
+ /** The L2CAP channel of the relevant L2CAP connection. */
+ struct ble_l2cap_chan *chan;
+
+ /** The mbuf with received SDU. */
+ struct os_mbuf *sdu_rx;
+ } receive;
+
+ /**
+ * Represents tx_unstalled data. Valid for the following event
+ * types:
+ * o BLE_L2CAP_EVENT_COC_TX_UNSTALLED
+ */
+ struct {
+ /** Connection handle of the relevant connection */
+ uint16_t conn_handle;
+
+ /** The L2CAP channel of the relevant L2CAP connection. */
+ struct ble_l2cap_chan *chan;
+
+ /**
+ * The status of the send attempt which was stalled due to
+ * lack of credits; This can be non zero only if there
+ * is an issue with memory allocation for following SDU fragments.
+ * In such a case last SDU has been partially sent to peer device
+ * and it is up to application to decide how to handle it.
+ */
+ int status;
+ } tx_unstalled;
+
+ /**
+ * Represents reconfiguration done. Valid for the following event
+ * types:
+ * o BLE_L2CAP_EVENT_COC_RECONFIG_COMPLETED
+ * o BLE_L2CAP_EVENT_COC_PEER_RECONFIGURED
+ */
+ struct {
+ /**
+ * The status of the reconfiguration attempt;
+ * o 0: the reconfiguration was successfully done.
+ * o BLE host error code: the reconfiguration attempt failed for
+ * the specified reason.
+ */
+ int status;
+
+ /** Connection handle of the relevant connection */
+ uint16_t conn_handle;
+
+ /** The L2CAP channel of the relevant L2CAP connection. */
+ struct ble_l2cap_chan *chan;
+ } reconfigured;
+ };
+};
+
+struct ble_l2cap_chan_info {
+ uint16_t scid;
+ uint16_t dcid;
+ uint16_t our_l2cap_mtu;
+ uint16_t peer_l2cap_mtu;
+ uint16_t psm;
+ uint16_t our_coc_mtu;
+ uint16_t peer_coc_mtu;
+};
+
+typedef int ble_l2cap_event_fn(struct ble_l2cap_event *event, void *arg);
+
+
+uint16_t ble_l2cap_get_conn_handle(struct ble_l2cap_chan *chan);
+int ble_l2cap_create_server(uint16_t psm, uint16_t mtu,
+ ble_l2cap_event_fn *cb, void *cb_arg);
+
+int ble_l2cap_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu,
+ struct os_mbuf *sdu_rx,
+ ble_l2cap_event_fn *cb, void *cb_arg);
+int ble_l2cap_disconnect(struct ble_l2cap_chan *chan);
+int ble_l2cap_send(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_tx);
+int ble_l2cap_recv_ready(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_rx);
+int ble_l2cap_get_chan_info(struct ble_l2cap_chan *chan, struct ble_l2cap_chan_info *chan_info);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_monitor.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_monitor.h
new file mode 100644
index 00000000..61722f7d
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_monitor.h
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_MONITOR_
+#define H_BLE_MONITOR_
+
+#include <syscfg/syscfg.h>
+
+#undef BLE_MONITOR
+#define BLE_MONITOR (MYNEWT_VAL(BLE_MONITOR_UART) || MYNEWT_VAL(BLE_MONITOR_RTT))
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int ble_monitor_log(int level, const char *fmt, ...);
+
+int ble_monitor_out(int c);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_sm.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_sm.h
new file mode 100644
index 00000000..ceebb856
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_sm.h
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_SM_
+#define H_BLE_SM_
+
+#include <inttypes.h>
+#include "syscfg/syscfg.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BLE_SM_ERR_PASSKEY 0x01
+#define BLE_SM_ERR_OOB 0x02
+#define BLE_SM_ERR_AUTHREQ 0x03
+#define BLE_SM_ERR_CONFIRM_MISMATCH 0x04
+#define BLE_SM_ERR_PAIR_NOT_SUPP 0x05
+#define BLE_SM_ERR_ENC_KEY_SZ 0x06
+#define BLE_SM_ERR_CMD_NOT_SUPP 0x07
+#define BLE_SM_ERR_UNSPECIFIED 0x08
+#define BLE_SM_ERR_REPEATED 0x09
+#define BLE_SM_ERR_INVAL 0x0a
+#define BLE_SM_ERR_DHKEY 0x0b
+#define BLE_SM_ERR_NUMCMP 0x0c
+#define BLE_SM_ERR_ALREADY 0x0d
+#define BLE_SM_ERR_CROSS_TRANS 0x0e
+#define BLE_SM_ERR_MAX_PLUS_1 0x0f
+
+#define BLE_SM_PAIR_ALG_JW 0
+#define BLE_SM_PAIR_ALG_PASSKEY 1
+#define BLE_SM_PAIR_ALG_OOB 2
+#define BLE_SM_PAIR_ALG_NUMCMP 3
+
+#define BLE_SM_PAIR_KEY_DIST_ENC 0x01
+#define BLE_SM_PAIR_KEY_DIST_ID 0x02
+#define BLE_SM_PAIR_KEY_DIST_SIGN 0x04
+#define BLE_SM_PAIR_KEY_DIST_LINK 0x08
+#define BLE_SM_PAIR_KEY_DIST_RESERVED 0xf0
+
+#define BLE_SM_IO_CAP_DISP_ONLY 0x00
+#define BLE_SM_IO_CAP_DISP_YES_NO 0x01
+#define BLE_SM_IO_CAP_KEYBOARD_ONLY 0x02
+#define BLE_SM_IO_CAP_NO_IO 0x03
+#define BLE_SM_IO_CAP_KEYBOARD_DISP 0x04
+#define BLE_SM_IO_CAP_RESERVED 0x05
+
+#define BLE_SM_PAIR_OOB_NO 0x00
+#define BLE_SM_PAIR_OOB_YES 0x01
+#define BLE_SM_PAIR_OOB_RESERVED 0x02
+
+#define BLE_SM_PAIR_AUTHREQ_BOND 0x01
+#define BLE_SM_PAIR_AUTHREQ_MITM 0x04
+#define BLE_SM_PAIR_AUTHREQ_SC 0x08
+#define BLE_SM_PAIR_AUTHREQ_KEYPRESS 0x10
+#define BLE_SM_PAIR_AUTHREQ_RESERVED 0xe2
+
+#define BLE_SM_PAIR_KEY_SZ_MIN 7
+#define BLE_SM_PAIR_KEY_SZ_MAX 16
+
+/*
+ * The security manager asks the application to perform a key generation
+ * action. The application passes the passkey back to SM via
+ * ble_sm_inject_io().
+ */
+#define BLE_SM_IOACT_NONE 0
+#define BLE_SM_IOACT_OOB 1
+#define BLE_SM_IOACT_INPUT 2
+#define BLE_SM_IOACT_DISP 3
+#define BLE_SM_IOACT_NUMCMP 4
+#define BLE_SM_IOACT_OOB_SC 5
+#define BLE_SM_IOACT_MAX_PLUS_ONE 6
+
+struct ble_sm_sc_oob_data {
+ /** Random Number. */
+ uint8_t r[16];
+
+ /** Confirm Value. */
+ uint8_t c[16];
+};
+
+struct ble_sm_io {
+ uint8_t action;
+ union {
+ uint32_t passkey;
+ uint8_t oob[16];
+ uint8_t numcmp_accept;
+ struct {
+ struct ble_sm_sc_oob_data *local;
+ struct ble_sm_sc_oob_data *remote;
+ } oob_sc_data;
+ };
+};
+
+int ble_sm_sc_oob_generate_data(struct ble_sm_sc_oob_data *oob_data);
+
+#if NIMBLE_BLE_SM
+int ble_sm_inject_io(uint16_t conn_handle, struct ble_sm_io *pkey);
+#else
+#define ble_sm_inject_io(conn_handle, pkey) \
+ ((void)(conn_handle), BLE_HS_ENOTSUP)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_store.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_store.h
new file mode 100644
index 00000000..30a5666c
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_store.h
@@ -0,0 +1,303 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_STORE_
+#define H_BLE_STORE_
+
+#include <inttypes.h>
+#include "nimble/ble.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BLE_STORE_OBJ_TYPE_OUR_SEC 1
+#define BLE_STORE_OBJ_TYPE_PEER_SEC 2
+#define BLE_STORE_OBJ_TYPE_CCCD 3
+
+/** Failed to persist record; insufficient storage capacity. */
+#define BLE_STORE_EVENT_OVERFLOW 1
+
+/** About to execute a procedure that may fail due to overflow. */
+#define BLE_STORE_EVENT_FULL 2
+
+/**
+ * Used as a key for lookups of security material. This struct corresponds to
+ * the following store object types:
+ * o BLE_STORE_OBJ_TYPE_OUR_SEC
+ * o BLE_STORE_OBJ_TYPE_PEER_SEC
+ */
+struct ble_store_key_sec {
+ /**
+ * Key by peer identity address;
+ * peer_addr=BLE_ADDR_NONE means don't key off peer.
+ */
+ ble_addr_t peer_addr;
+
+ /** Key by ediv; ediv_rand_present=0 means don't key off ediv. */
+ uint16_t ediv;
+
+ /** Key by rand_num; ediv_rand_present=0 means don't key off rand_num. */
+ uint64_t rand_num;
+
+ unsigned ediv_rand_present:1;
+
+ /** Number of results to skip; 0 means retrieve the first match. */
+ uint8_t idx;
+};
+
+/**
+ * Represents stored security material. This struct corresponds to the
+ * following store object types:
+ * o BLE_STORE_OBJ_TYPE_OUR_SEC
+ * o BLE_STORE_OBJ_TYPE_PEER_SEC
+ */
+struct ble_store_value_sec {
+ ble_addr_t peer_addr;
+
+ uint8_t key_size;
+ uint16_t ediv;
+ uint64_t rand_num;
+ uint8_t ltk[16];
+ uint8_t ltk_present:1;
+
+ uint8_t irk[16];
+ uint8_t irk_present:1;
+
+ uint8_t csrk[16];
+ uint8_t csrk_present:1;
+
+ unsigned authenticated:1;
+ uint8_t sc:1;
+};
+
+/**
+ * Used as a key for lookups of stored client characteristic configuration
+ * descriptors (CCCDs). This struct corresponds to the BLE_STORE_OBJ_TYPE_CCCD
+ * store object type.
+ */
+struct ble_store_key_cccd {
+ /**
+ * Key by peer identity address;
+ * peer_addr=BLE_ADDR_NONE means don't key off peer.
+ */
+ ble_addr_t peer_addr;
+
+ /**
+ * Key by characteristic value handle;
+ * chr_val_handle=0 means don't key off characteristic handle.
+ */
+ uint16_t chr_val_handle;
+
+ /** Number of results to skip; 0 means retrieve the first match. */
+ uint8_t idx;
+};
+
+/**
+ * Represents a stored client characteristic configuration descriptor (CCCD).
+ * This struct corresponds to the BLE_STORE_OBJ_TYPE_CCCD store object type.
+ */
+struct ble_store_value_cccd {
+ ble_addr_t peer_addr;
+ uint16_t chr_val_handle;
+ uint16_t flags;
+ unsigned value_changed:1;
+};
+
+/**
+ * Used as a key for store lookups. This union must be accompanied by an
+ * object type code to indicate which field is valid.
+ */
+union ble_store_key {
+ struct ble_store_key_sec sec;
+ struct ble_store_key_cccd cccd;
+};
+
+/**
+ * Represents stored data. This union must be accompanied by an object type
+ * code to indicate which field is valid.
+ */
+union ble_store_value {
+ struct ble_store_value_sec sec;
+ struct ble_store_value_cccd cccd;
+};
+
+struct ble_store_status_event {
+ /**
+ * The type of event being reported; one of the BLE_STORE_EVENT_TYPE_[...]
+ * codes.
+ */
+ int event_code;
+
+ /**
+ * Additional data related to the event; the valid field is inferred from
+ * the obj_type,event_code pair.
+ */
+ union {
+ /**
+ * Represents a write that failed due to storage exhaustion. Valid for
+ * the following event types:
+ * o BLE_STORE_EVENT_OVERFLOW
+ */
+ struct {
+ /** The type of object that failed to be written. */
+ int obj_type;
+
+ /** The object that failed to be written. */
+ const union ble_store_value *value;
+ } overflow;
+
+ /**
+ * Represents the possibility that a scheduled write will fail due to
+ * storage exhaustion. Valid for the following event types:
+ * o BLE_STORE_EVENT_FULL
+ */
+ struct {
+ /** The type of object that may fail to be written. */
+ int obj_type;
+
+ /** The handle of the connection which prompted the write. */
+ uint16_t conn_handle;
+ } full;
+ };
+};
+
+/**
+ * Searches the store for an object matching the specified criteria. If a
+ * match is found, it is read from the store and the dst parameter is populated
+ * with the retrieved object.
+ *
+ * @param obj_type The type of object to search for; one of the
+ * BLE_STORE_OBJ_TYPE_[...] codes.
+ * @param key Specifies properties of the object to search
+ * for. An object is retrieved if it matches
+ * these criteria.
+ * @param dst On success, this is populated with the
+ * retrieved object.
+ *
+ * @return 0 if an object was successfully retreived;
+ * BLE_HS_ENOENT if no matching object was found;
+ * Other nonzero on error.
+ */
+typedef int ble_store_read_fn(int obj_type, const union ble_store_key *key,
+ union ble_store_value *dst);
+
+/**
+ * Writes the specified object to the store. If an object with the same
+ * identity is already in the store, it is replaced. If the store lacks
+ * sufficient capacity to write the object, this function may remove previously
+ * stored values to make room.
+ *
+ * @param obj_type The type of object being written; one of the
+ * BLE_STORE_OBJ_TYPE_[...] codes.
+ * @param val The object to persist.
+ *
+ * @return 0 if the object was successfully written;
+ * Other nonzero on error.
+ */
+typedef int ble_store_write_fn(int obj_type, const union ble_store_value *val);
+
+/**
+ * Searches the store for the first object matching the specified criteria. If
+ * a match is found, it is deleted from the store.
+ *
+ * @param obj_type The type of object to delete; one of the
+ * BLE_STORE_OBJ_TYPE_[...] codes.
+ * @param key Specifies properties of the object to search
+ * for. An object is deleted if it matches
+ * these criteria.
+ * @return 0 if an object was successfully retrieved;
+ * BLE_HS_ENOENT if no matching object was found;
+ * Other nonzero on error.
+ */
+typedef int ble_store_delete_fn(int obj_type, const union ble_store_key *key);
+
+/**
+ * Indicates an inability to perform a store operation. This callback should
+ * do one of two things:
+ * o Address the problem and return 0, indicating that the store operation
+ * should proceed.
+ * o Return nonzero to indicate that the store operation should be aborted.
+ *
+ * @param event Describes the store event being reported.
+ * @param arg Optional user argument.
+ *
+ * @return 0 if the store operation should proceed;
+ * nonzero if the store operation should be
+ * aborted.
+ */
+typedef int ble_store_status_fn(struct ble_store_status_event *event,
+ void *arg);
+
+int ble_store_read(int obj_type, const union ble_store_key *key,
+ union ble_store_value *val);
+int ble_store_write(int obj_type, const union ble_store_value *val);
+int ble_store_delete(int obj_type, const union ble_store_key *key);
+int ble_store_overflow_event(int obj_type, const union ble_store_value *value);
+int ble_store_full_event(int obj_type, uint16_t conn_handle);
+
+int ble_store_read_our_sec(const struct ble_store_key_sec *key_sec,
+ struct ble_store_value_sec *value_sec);
+int ble_store_write_our_sec(const struct ble_store_value_sec *value_sec);
+int ble_store_delete_our_sec(const struct ble_store_key_sec *key_sec);
+int ble_store_read_peer_sec(const struct ble_store_key_sec *key_sec,
+ struct ble_store_value_sec *value_sec);
+int ble_store_write_peer_sec(const struct ble_store_value_sec *value_sec);
+int ble_store_delete_peer_sec(const struct ble_store_key_sec *key_sec);
+
+int ble_store_read_cccd(const struct ble_store_key_cccd *key,
+ struct ble_store_value_cccd *out_value);
+int ble_store_write_cccd(const struct ble_store_value_cccd *value);
+int ble_store_delete_cccd(const struct ble_store_key_cccd *key);
+
+void ble_store_key_from_value_sec(struct ble_store_key_sec *out_key,
+ const struct ble_store_value_sec *value);
+void ble_store_key_from_value_cccd(struct ble_store_key_cccd *out_key,
+ const struct ble_store_value_cccd *value);
+
+void ble_store_key_from_value(int obj_type,
+ union ble_store_key *out_key,
+ const union ble_store_value *value);
+
+typedef int ble_store_iterator_fn(int obj_type,
+ union ble_store_value *val,
+ void *cookie);
+
+int ble_store_iterate(int obj_type,
+ ble_store_iterator_fn *callback,
+ void *cookie);
+
+int ble_store_clear(void);
+
+/*** Utility functions. */
+
+int ble_store_util_bonded_peers(ble_addr_t *out_peer_id_addrs,
+ int *out_num_peers,
+ int max_peers);
+int ble_store_util_delete_all(int type, const union ble_store_key *key);
+int ble_store_util_delete_peer(const ble_addr_t *peer_id_addr);
+int ble_store_util_delete_oldest_peer(void);
+int ble_store_util_count(int type, int *out_count);
+int ble_store_util_status_rr(struct ble_store_status_event *event, void *arg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h
new file mode 100644
index 00000000..d3576c59
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef H_BLE_UUID_
+#define H_BLE_UUID_
+
+/**
+ * @brief Bluetooth UUID
+ * @defgroup bt_uuid Bluetooth UUID
+ * @ingroup bt_host
+ * @{
+ */
+
+#include <inttypes.h>
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct os_mbuf;
+
+/** Type of UUID */
+enum {
+ /** 16-bit UUID (BT SIG assigned) */
+ BLE_UUID_TYPE_16 = 16,
+
+ /** 32-bit UUID (BT SIG assigned) */
+ BLE_UUID_TYPE_32 = 32,
+
+ /** 128-bit UUID */
+ BLE_UUID_TYPE_128 = 128,
+};
+
+/** Generic UUID type, to be used only as a pointer */
+typedef struct {
+ /** Type of the UUID */
+ uint8_t type;
+} ble_uuid_t;
+
+/** 16-bit UUID */
+typedef struct {
+ ble_uuid_t u;
+ uint16_t value;
+} ble_uuid16_t;
+
+/** 32-bit UUID */
+typedef struct {
+ ble_uuid_t u;
+ uint32_t value;
+} ble_uuid32_t;
+
+/** 128-bit UUID */
+typedef struct {
+ ble_uuid_t u;
+ uint8_t value[16];
+} ble_uuid128_t;
+
+/** Universal UUID type, to be used for any-UUID static allocation */
+typedef union {
+ ble_uuid_t u;
+ ble_uuid16_t u16;
+ ble_uuid32_t u32;
+ ble_uuid128_t u128;
+} ble_uuid_any_t;
+
+#define BLE_UUID16_INIT(uuid16) \
+ { \
+ .u.type = BLE_UUID_TYPE_16, \
+ .value = (uuid16), \
+ }
+
+#define BLE_UUID32_INIT(uuid32) \
+ { \
+ .u.type = BLE_UUID_TYPE_32, \
+ .value = (uuid32), \
+ }
+
+#define BLE_UUID128_INIT(uuid128...) \
+ { \
+ .u.type = BLE_UUID_TYPE_128, \
+ .value = { uuid128 }, \
+ }
+
+#define BLE_UUID16_DECLARE(uuid16) \
+ ((ble_uuid_t *) (&(ble_uuid16_t) BLE_UUID16_INIT(uuid16)))
+
+#define BLE_UUID32_DECLARE(uuid32) \
+ ((ble_uuid_t *) (&(ble_uuid32_t) BLE_UUID32_INIT(uuid32)))
+
+#define BLE_UUID128_DECLARE(uuid128...) \
+ ((ble_uuid_t *) (&(ble_uuid128_t) BLE_UUID128_INIT(uuid128)))
+
+#define BLE_UUID16(u) \
+ ((ble_uuid16_t *) (u))
+
+#define BLE_UUID32(u) \
+ ((ble_uuid32_t *) (u))
+
+#define BLE_UUID128(u) \
+ ((ble_uuid128_t *) (u))
+
+/** Size of buffer needed to store UUID as a string.
+ * Includes trailing \0.
+ */
+#define BLE_UUID_STR_LEN (37)
+
+/** @brief Constructs a UUID object from a byte array.
+ *
+ * @param uuid On success, this gets populated with the constructed UUID.
+ * @param buf The source buffer to parse.
+ * @param len The size of the buffer, in bytes.
+ *
+ * @return 0 on success, BLE_HS_EINVAL if the source buffer does not contain
+ * a valid UUID.
+ */
+int ble_uuid_init_from_buf(ble_uuid_any_t *uuid, const void *buf, size_t len);
+
+/** @brief Compares two Bluetooth UUIDs.
+ *
+ * @param uuid1 The first UUID to compare.
+ * @param uuid2 The second UUID to compare.
+ *
+ * @return 0 if the two UUIDs are equal, nonzero if the UUIDs differ.
+ */
+int ble_uuid_cmp(const ble_uuid_t *uuid1, const ble_uuid_t *uuid2);
+
+/** @brief Copy Bluetooth UUID
+ *
+ * @param dst Destination UUID.
+ * @param src Source UUID.
+ */
+void ble_uuid_copy(ble_uuid_any_t *dst, const ble_uuid_t *src);
+
+/** @brief Converts the specified UUID to its string representation.
+ *
+ * Example string representations:
+ * o 16-bit: 0x1234
+ * o 32-bit: 0x12345678
+ * o 128-bit: 12345678-1234-1234-1234-123456789abc
+ *
+ * @param uuid The source UUID to convert.
+ * @param dst The destination buffer.
+ *
+ * @return A pointer to the supplied destination buffer.
+ */
+char *ble_uuid_to_str(const ble_uuid_t *uuid, char *dst);
+
+/** @brief Converts the specified 16-bit UUID to a uint16_t.
+ *
+ * @param uuid The source UUID to convert.
+ *
+ * @return The converted integer on success, NULL if the specified UUID is
+ * not 16 bits.
+ */
+uint16_t ble_uuid_u16(const ble_uuid_t *uuid);
+
+#ifdef __cplusplus
+}
+#endif
+
+/**
+ * @}
+ */
+
+#endif /* _BLE_HOST_UUID_H */