mynewt-nimble icon indicating copy to clipboard operation
mynewt-nimble copied to clipboard

BTtester accomodated to EATT testing

Open KKopyscinski opened this issue 4 years ago • 2 comments

KKopyscinski avatar Jul 20 '20 10:07 KKopyscinski

Style check summary

Our coding style is here!

apps/bttester/src/bttester.h

@@ -657,53 +647,63 @@
     u8_t data[0];
 } __packed;
 
-#define GATT_CFG_NOTIFY			0x1a
-#define GATT_CFG_INDICATE		0x1b
+#define GATT_RELIABLE_WRITE     0x19
+struct gatt_reliable_write_cmd {
+    u8_t address_type;
+    u8_t address[6];
+    u16_t handle;
+    u16_t offset;
+    u16_t data_length;
+    u8_t data[0];
+} __packed;
+
+#define GATT_CFG_NOTIFY         0x1a
+#define GATT_CFG_INDICATE       0x1b
 struct gatt_cfg_notify_cmd {
-	u8_t address_type;
-	u8_t address[6];
-	u8_t enable;
-	u16_t ccc_handle;
-} __packed;
-
-#define GATT_GET_ATTRIBUTES		0x1c
+    u8_t address_type;
+    u8_t address[6];
+    u8_t enable;
+    u16_t ccc_handle;
+} __packed;
+
+#define GATT_GET_ATTRIBUTES     0x1c
 struct gatt_get_attributes_cmd {
-	u16_t start_handle;
-	u16_t end_handle;
-	u8_t type_length;
-	u8_t type[0];
+    u16_t start_handle;
+    u16_t end_handle;
+    u8_t type_length;
+    u8_t type[0];
 } __packed;
 struct gatt_get_attributes_rp {
-	u8_t attrs_count;
-	u8_t attrs[0];
+    u8_t attrs_count;
+    u8_t attrs[0];
 } __packed;
 struct gatt_attr {
-	u16_t handle;
-	u8_t permission;
-	u8_t type_length;
-	u8_t type[0];
-} __packed;
-
-#define GATT_GET_ATTRIBUTE_VALUE	0x1d
+    u16_t handle;
+    u8_t permission;
+    u8_t type_length;
+    u8_t type[0];
+} __packed;
+
+#define GATT_GET_ATTRIBUTE_VALUE    0x1d
 struct gatt_get_attribute_value_cmd {
-	u8_t address_type;
-	u8_t address[6];
-	u16_t handle;
+    u8_t address_type;
+    u8_t address[6];
+    u16_t handle;
 } __packed;
 struct gatt_get_attribute_value_rp {
-	u8_t att_response;
-	u16_t value_length;
-	u8_t value[0];
-} __packed;
-
-#define GATT_CHANGE_DATABASE		0x1e
+    u8_t att_response;
+    u16_t value_length;
+    u8_t value[0];
+} __packed;
+
+#define GATT_CHANGE_DATABASE        0x1e
 struct gatt_change_database {
     u16_t start_handle;
     u16_t end_handle;
     u8_t visibility;
 } __packed;
 
-#define GATT_READ_MULTIPLE_VAR		0x20
+#define GATT_READ_MULTIPLE_VAR      0x20
 struct gatt_read_multiple_var_cmd {
     u8_t address_type;
     u8_t address[6];
@@ -712,88 +712,90 @@
 } __packed;
 
 /* GATT events */
-#define GATT_EV_NOTIFICATION		0x80
+#define GATT_EV_NOTIFICATION        0x80
 struct gatt_notification_ev {
-	u8_t address_type;
-	u8_t address[6];
-	u8_t type;
-	u16_t handle;
-	u16_t data_length;
-	u8_t data[0];
-} __packed;
-
-#define GATT_EV_ATTR_VALUE_CHANGED	0x81
+    u8_t address_type;
+    u8_t address[6];
+    u8_t type;
+    u16_t handle;
+    u16_t data_length;
+    u8_t data[0];
+} __packed;
+
+#define GATT_EV_ATTR_VALUE_CHANGED  0x81
 struct gatt_attr_value_changed_ev {
-	u16_t handle;
-	u16_t data_length;
-	u8_t data[0];
-} __packed;
-
-static inline void tester_set_bit(u8_t *addr, unsigned int bit)
+    u16_t handle;
+    u16_t data_length;
+    u8_t data[0];
+} __packed;
+
+static inline void
+tester_set_bit(u8_t *addr, unsigned int bit)
 {
-	u8_t *p = addr + (bit / 8);
-
-	*p |= BIT(bit % 8);
+    u8_t *p = addr + (bit / 8);
+
+    *p |= BIT(bit % 8);
 }
 
-static inline u8_t tester_test_bit(const u8_t *addr, unsigned int bit)
+static inline u8_t
+tester_test_bit(const u8_t *addr, unsigned int bit)
 {
-	const u8_t *p = addr + (bit / 8);
-
-	return *p & BIT(bit % 8);
+    const u8_t *p = addr + (bit / 8);
+
+    return *p & BIT(bit % 8);
 }
 
 /* L2CAP Service */
 /* commands */
-#define L2CAP_READ_SUPPORTED_COMMANDS	0x01
+#define L2CAP_READ_SUPPORTED_COMMANDS   0x01
 struct l2cap_read_supported_commands_rp {
-	u8_t data[0];
-} __packed;
-
-#define L2CAP_CONNECT			0x02
+    u8_t data[0];
+} __packed;
+
+#define L2CAP_CONNECT           0x02
 struct l2cap_connect_cmd {
-	u8_t address_type;
-	u8_t address[6];
-	u16_t psm;
-	u16_t mtu;
-	u8_t num;
+    u8_t address_type;
+    u8_t address[6];
+    u16_t psm;
+    u16_t mtu;
+    u8_t num;
 } __packed;
 
 struct l2cap_connect_rp {
-	u8_t num;
-	u8_t chan_ids[0];
-} __packed;
-
-#define L2CAP_DISCONNECT		0x03
+    u8_t num;
+    u8_t chan_ids[0];
+} __packed;
+
+#define L2CAP_DISCONNECT        0x03
 struct l2cap_disconnect_cmd {
-	u8_t chan_id;
-} __packed;
-
-#define L2CAP_SEND_DATA			0x04
+    u8_t chan_id;
+} __packed;
+
+#define L2CAP_SEND_DATA         0x04
 struct l2cap_send_data_cmd {
-	u8_t chan_id;
-	u16_t data_len;
-	u8_t data[];
-} __packed;
-
-#define L2CAP_TRANSPORT_BREDR		0x00
-#define L2CAP_TRANSPORT_LE		0x01
-
-#define L2CAP_LISTEN			0x05
+    u8_t chan_id;
+    u16_t data_len;
+    u8_t data[];
+} __packed;
+
+#define L2CAP_TRANSPORT_BREDR       0x00
+#define L2CAP_TRANSPORT_LE      0x01
+
+#define L2CAP_LISTEN            0x05
 struct l2cap_listen_cmd {
-	u16_t psm;
-	u8_t transport;
-	u16_t mtu;
-	u16_t response;
-} __packed;
-
-#define L2CAP_ACCEPT_CONNECTION		0x06
+    u16_t psm;
+    u8_t transport;
+    u16_t mtu;
+    u16_t response;
+} __packed;
+
+#define L2CAP_ACCEPT_CONNECTION     0x06
 struct l2cap_accept_connection_cmd {
-	u8_t chan_id;
-	u16_t result;
-} __packed;
-
-#define L2CAP_RECONFIGURE		0x07
+    u8_t chan_id;
+    u16_t result;
+} __packed;
+
+#define L2CAP_RECONFIGURE       0x07
 struct l2cap_reconfigure_cmd {
     u8_t address_type;
     u8_t address[6];

apps/bttester/src/gatt.c

@@ -614,233 +643,244 @@
  * It is not intended to be used by client and server at the same time.
  */
 static struct {
-	u16_t len;
-	u8_t buf[MAX_BUFFER_SIZE];
+    u16_t len;
+    u8_t buf[MAX_BUFFER_SIZE];
 } gatt_buf;
 
-static void *gatt_buf_add(const void *data, size_t len)
-{
-	void *ptr = gatt_buf.buf + gatt_buf.len;
-
-	if ((len + gatt_buf.len) > MAX_BUFFER_SIZE) {
-		return NULL;
-	}
-
-	if (data) {
-		memcpy(ptr, data, len);
-	} else {
-		(void)memset(ptr, 0, len);
-	}
-
-	gatt_buf.len += len;
-
-	SYS_LOG_DBG("%d/%d used", gatt_buf.len, MAX_BUFFER_SIZE);
-
-	return ptr;
-}
-
-static void *gatt_buf_reserve(size_t len)
-{
-	return gatt_buf_add(NULL, len);
-}
-
-static void gatt_buf_clear(void)
-{
-	(void)memset(&gatt_buf, 0, sizeof(gatt_buf));
-}
-
-static void discover_destroy(void)
-{
-	gatt_buf_clear();
-}
-
-static void read_destroy()
-{
-	gatt_buf_clear();
-}
-
-static int read_cb(uint16_t conn_handle,
-		   const struct ble_gatt_error *error,
-		   struct ble_gatt_attr *attr,
-		   void *arg)
-{
-	struct gatt_read_rp *rp = (void *) gatt_buf.buf;
-	u8_t btp_opcode = (uint8_t) (int) arg;
-
-	SYS_LOG_DBG("status=%d", error->status);
-
-	if (error->status != 0 && error->status != BLE_HS_EDONE) {
-		rp->att_response = (uint8_t) BLE_HS_ATT_ERR(error->status);
-		tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
-			    CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
-		read_destroy();
-		return 0;
-	}
-
-	if (!gatt_buf_add(attr->om->om_data, attr->om->om_len)) {
-		tester_rsp(BTP_SERVICE_ID_GATT, btp_opcode,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		read_destroy();
-		return 0;
-	}
-
-	rp->data_length += attr->om->om_len;
-	tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
-		    CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
-	read_destroy();
-
-	return 0;
-}
-
-static void read(u8_t *data, u16_t len)
-{
-	const struct gatt_read_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	/* Clear buffer */
-	read_destroy();
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
-		goto fail;
-	}
-
-	if (ble_gattc_read(conn.conn_handle, sys_le16_to_cpu(cmd->handle),
-			   read_cb, (void *)GATT_READ)) {
-		read_destroy();
-		goto fail;
-	}
-
-	return;
+static void *
+gatt_buf_add(const void *data, size_t len)
+{
+    void *ptr = gatt_buf.buf + gatt_buf.len;
+
+    if ((len + gatt_buf.len) > MAX_BUFFER_SIZE) {
+        return NULL;
+    }
+
+    if (data) {
+        memcpy(ptr, data, len);
+    } else {
+        (void)memset(ptr, 0, len);
+    }
+
+    gatt_buf.len += len;
+
+    SYS_LOG_DBG("%d/%d used", gatt_buf.len, MAX_BUFFER_SIZE);
+
+    return ptr;
+}
+
+static void *
+gatt_buf_reserve(size_t len)
+{
+    return gatt_buf_add(NULL, len);
+}
+
+static void
+gatt_buf_clear(void)
+{
+    (void)memset(&gatt_buf, 0, sizeof(gatt_buf));
+}
+
+static void
+discover_destroy(void)
+{
+    gatt_buf_clear();
+}
+
+static void
+read_destroy()
+{
+    gatt_buf_clear();
+}
+
+static int
+read_cb(uint16_t conn_handle,
+        const struct ble_gatt_error *error,
+        struct ble_gatt_attr *attr,
+        void *arg)
+{
+    struct gatt_read_rp *rp = (void *) gatt_buf.buf;
+    u8_t btp_opcode = (uint8_t) (int) arg;
+
+    SYS_LOG_DBG("status=%d", error->status);
+
+    if (error->status != 0 && error->status != BLE_HS_EDONE) {
+        rp->att_response = (uint8_t) BLE_HS_ATT_ERR(error->status);
+        tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
+                CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
+        read_destroy();
+        return 0;
+    }
+
+    if (!gatt_buf_add(attr->om->om_data, attr->om->om_len)) {
+        tester_rsp(BTP_SERVICE_ID_GATT, btp_opcode,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        read_destroy();
+        return 0;
+    }
+
+    rp->data_length += attr->om->om_len;
+    tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
+            CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
+    read_destroy();
+
+    return 0;
+}
+
+static void
+read(u8_t *data, u16_t len)
+{
+    const struct gatt_read_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    /* Clear buffer */
+    read_destroy();
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
+        goto fail;
+    }
+
+    if (ble_gattc_read(conn.conn_handle, sys_le16_to_cpu(cmd->handle),
+               read_cb, (void *)GATT_READ)) {
+        read_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_READ, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static int read_long_cb(uint16_t conn_handle,
-			const struct ble_gatt_error *error,
-			struct ble_gatt_attr *attr,
-			void *arg)
-{
-	struct gatt_read_rp *rp = (void *) gatt_buf.buf;
-	u8_t btp_opcode = (uint8_t) (int) arg;
-
-	SYS_LOG_DBG("status=%d", error->status);
-
-	if (error->status != 0 && error->status != BLE_HS_EDONE) {
-		rp->att_response = (uint8_t) BLE_HS_ATT_ERR(error->status);
-		tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
-			    CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
-		read_destroy();
-		return 0;
-	}
-
-	if (error->status == BLE_HS_EDONE) {
-		tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
-			    CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
-		read_destroy();
-		return 0;
-	}
-
-	if (gatt_buf_add(attr->om->om_data, attr->om->om_len) == NULL) {
-		tester_rsp(BTP_SERVICE_ID_GATT, btp_opcode,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		read_destroy();
-		return BLE_HS_ENOMEM;
-	}
-
-	rp->data_length += attr->om->om_len;
-
-	return 0;
-}
-
-static void read_long(u8_t *data, u16_t len)
-{
-	const struct gatt_read_long_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	/* Clear buffer */
-	read_destroy();
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
-		goto fail;
-	}
-
-	if (ble_gattc_read_long(conn.conn_handle,
-				sys_le16_to_cpu(cmd->handle),
-				sys_le16_to_cpu(cmd->offset),
-				read_long_cb, (void *)GATT_READ_LONG)) {
-		read_destroy();
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_READ, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static int
+read_long_cb(uint16_t conn_handle,
+             const struct ble_gatt_error *error,
+             struct ble_gatt_attr *attr,
+             void *arg)
+{
+    struct gatt_read_rp *rp = (void *) gatt_buf.buf;
+    u8_t btp_opcode = (uint8_t) (int) arg;
+
+    SYS_LOG_DBG("status=%d", error->status);
+
+    if (error->status != 0 && error->status != BLE_HS_EDONE) {
+        rp->att_response = (uint8_t) BLE_HS_ATT_ERR(error->status);
+        tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
+                CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
+        read_destroy();
+        return 0;
+    }
+
+    if (error->status == BLE_HS_EDONE) {
+        tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
+                CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
+        read_destroy();
+        return 0;
+    }
+
+    if (gatt_buf_add(attr->om->om_data, attr->om->om_len) == NULL) {
+        tester_rsp(BTP_SERVICE_ID_GATT, btp_opcode,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        read_destroy();
+        return BLE_HS_ENOMEM;
+    }
+
+    rp->data_length += attr->om->om_len;
+
+    return 0;
+}
+
+static void
+read_long(u8_t *data, u16_t len)
+{
+    const struct gatt_read_long_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    /* Clear buffer */
+    read_destroy();
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
+        goto fail;
+    }
+
+    if (ble_gattc_read_long(conn.conn_handle,
+                sys_le16_to_cpu(cmd->handle),
+                sys_le16_to_cpu(cmd->offset),
+                read_long_cb, (void *)GATT_READ_LONG)) {
+        read_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_READ_LONG, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static void read_multiple(u8_t *data, u16_t len)
-{
-	const struct gatt_read_multiple_cmd *cmd = (void *) data;
-	u16_t handles[cmd->handles_count];
-	struct ble_gap_conn_desc conn;
-	int rc, i;
-
-	SYS_LOG_DBG("");
-
-	for (i = 0; i < ARRAY_SIZE(handles); i++) {
-		handles[i] = sys_le16_to_cpu(cmd->handles[i]);
-	}
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	/* Clear buffer */
-	read_destroy();
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
-		goto fail;
-	}
-
-	if (ble_gattc_read_mult(conn.conn_handle, handles,
-				cmd->handles_count, read_cb,
-				(void *)GATT_READ_MULTIPLE)) {
-		read_destroy();
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_READ_LONG, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static void
+read_multiple(u8_t *data, u16_t len)
+{
+    const struct gatt_read_multiple_cmd *cmd = (void *) data;
+    u16_t handles[cmd->handles_count];
+    struct ble_gap_conn_desc conn;
+    int rc, i;
+
+    SYS_LOG_DBG("");
+
+    for (i = 0; i < ARRAY_SIZE(handles); i++) {
+        handles[i] = sys_le16_to_cpu(cmd->handles[i]);
+    }
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    /* Clear buffer */
+    read_destroy();
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
+        goto fail;
+    }
+
+    if (ble_gattc_read_mult(conn.conn_handle, handles,
+                cmd->handles_count, read_cb,
+                            (void *)GATT_READ_MULTIPLE)) {
+        read_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_READ_MULTIPLE, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static int read_var_cb(uint16_t conn_handle,
-           const struct ble_gatt_error *error,
-           struct ble_gatt_attr *attr,
-           uint8_t num_attrs,
-           void *arg)
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_READ_MULTIPLE, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static int
+read_var_cb(uint16_t conn_handle,
+            const struct ble_gatt_error *error,
+            struct ble_gatt_attr *attr,
+            uint8_t num_attrs,
+            void *arg)
 {
     struct gatt_read_rp *rp = (void *) gatt_buf.buf;
     u8_t btp_opcode = (uint8_t) (int) arg;
@@ -874,7 +914,8 @@
     return 0;
 }
 
-static void read_multiple_var(u8_t *data, u16_t len)
+static void
+read_multiple_var(u8_t *data, u16_t len)
 {
     const struct gatt_read_multiple_var_cmd *cmd = (void *) data;
     u16_t handles[cmd->handles_count];
@@ -885,23 +926,23 @@
 
     for (i = 0; i < ARRAY_SIZE(handles); i++) {
         handles[i] = sys_le16_to_cpu(cmd->handles[i]);
-	}
+    }
 
     rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
     if (rc) {
         goto fail;
-	}
-
-	/* Clear buffer */
+    }
+
+    /* Clear buffer */
     read_destroy();
 
     if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
         goto fail;
-	}
+    }
 
     if (ble_gattc_read_mult_var(conn.conn_handle, handles,
                                 cmd->handles_count, read_var_cb,
-				                (void *)GATT_READ_MULTIPLE_VAR)) {
+                                (void *)GATT_READ_MULTIPLE_VAR)) {
         read_destroy();
         goto fail;
     }
@@ -913,773 +954,795 @@
                BTP_STATUS_FAILED);
 }
 
-static void write_without_rsp(u8_t *data, u16_t len, u8_t op, bool sign)
-{
-	const struct gatt_write_without_rsp_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	u8_t status = BTP_STATUS_SUCCESS;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		status = BTP_STATUS_FAILED;
-		goto rsp;
-	}
-
-	if (ble_gattc_write_no_rsp_flat(conn.conn_handle,
-					sys_le16_to_cpu(cmd->handle), cmd->data,
-					sys_le16_to_cpu(cmd->data_length))) {
-		status = BTP_STATUS_FAILED;
-	}
+static void
+write_without_rsp(u8_t *data, u16_t len, u8_t op, bool sign)
+{
+    const struct gatt_write_without_rsp_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    u8_t status = BTP_STATUS_SUCCESS;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        status = BTP_STATUS_FAILED;
+        goto rsp;
+    }
+
+    if (ble_gattc_write_no_rsp_flat(conn.conn_handle,
+                    sys_le16_to_cpu(cmd->handle), cmd->data,
+                    sys_le16_to_cpu(cmd->data_length))) {
+        status = BTP_STATUS_FAILED;
+    }
 
 rsp:
-	tester_rsp(BTP_SERVICE_ID_GATT, op, CONTROLLER_INDEX, status);
-}
-
-static int write_rsp(uint16_t conn_handle, const struct ble_gatt_error *error,
-		     struct ble_gatt_attr *attr,
-		     void *arg)
-{
-	uint8_t err = (uint8_t) error->status;
-	u8_t btp_opcode = (uint8_t) (int) arg;
-
-	SYS_LOG_DBG("");
-
-	tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
-		    CONTROLLER_INDEX, &err, sizeof(err));
-	return 0;
-}
-
-static void write(u8_t *data, u16_t len)
-{
-	const struct gatt_write_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	if (ble_gattc_write_flat(conn.conn_handle, sys_le16_to_cpu(cmd->handle),
-				 cmd->data, sys_le16_to_cpu(cmd->data_length),
-				 write_rsp, (void *) GATT_WRITE)) {
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, op, CONTROLLER_INDEX, status);
+}
+
+static int
+write_rsp(uint16_t conn_handle, const struct ble_gatt_error *error,
+          struct ble_gatt_attr *attr,
+          void *arg)
+{
+    uint8_t err = (uint8_t) error->status;
+    u8_t btp_opcode = (uint8_t) (int) arg;
+
+    SYS_LOG_DBG("");
+
+    tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
+            CONTROLLER_INDEX, &err, sizeof(err));
+    return 0;
+}
+
+static void
+write(u8_t *data, u16_t len)
+{
+    const struct gatt_write_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    if (ble_gattc_write_flat(conn.conn_handle, sys_le16_to_cpu(cmd->handle),
+                 cmd->data, sys_le16_to_cpu(cmd->data_length),
+                 write_rsp, (void *) GATT_WRITE)) {
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_WRITE, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static void write_long(u8_t *data, u16_t len)
-{
-	const struct gatt_write_long_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	struct os_mbuf *om = NULL;
-	int rc = 0;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	om = ble_hs_mbuf_from_flat(cmd->data, sys_le16_to_cpu(cmd->data_length));
-	if (!om) {
-		SYS_LOG_ERR("Insufficient resources");
-		goto fail;
-	}
-
-	rc = ble_gattc_write_long(conn.conn_handle,
-				  sys_le16_to_cpu(cmd->handle),
-				  sys_le16_to_cpu(cmd->offset),
-				  om, write_rsp,
-				  (void *) GATT_WRITE_LONG);
-	if (!rc) {
-		return;
-	}
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_WRITE, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static void
+write_long(u8_t *data, u16_t len)
+{
+    const struct gatt_write_long_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    struct os_mbuf *om = NULL;
+    int rc = 0;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    om = ble_hs_mbuf_from_flat(cmd->data, sys_le16_to_cpu(cmd->data_length));
+    if (!om) {
+        SYS_LOG_ERR("Insufficient resources");
+        goto fail;
+    }
+
+    rc = ble_gattc_write_long(conn.conn_handle,
+                  sys_le16_to_cpu(cmd->handle),
+                  sys_le16_to_cpu(cmd->offset),
+                  om, write_rsp,
+                              (void *) GATT_WRITE_LONG);
+    if (!rc) {
+        return;
+    }
 
 fail:
-	SYS_LOG_ERR("Failed to send Write Long request, rc=%d", rc);
-	os_mbuf_free_chain(om);
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_WRITE_LONG, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static int reliable_write_rsp(uint16_t conn_handle,
-			      const struct ble_gatt_error *error,
-			      struct ble_gatt_attr *attrs,
-			      uint8_t num_attrs,
-			      void *arg)
-{
-	uint8_t err = (uint8_t) error->status;
-
-	SYS_LOG_DBG("Reliable write status %d", err);
-
-	tester_send(BTP_SERVICE_ID_GATT, GATT_RELIABLE_WRITE,
-		    CONTROLLER_INDEX, &err, sizeof(err));
-	return 0;
-}
-
-static void reliable_write(u8_t *data, u16_t len)
-{
-	const struct gatt_reliable_write_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	struct ble_gatt_attr attr;
-	struct os_mbuf *om = NULL;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	om = ble_hs_mbuf_from_flat(cmd->data, sys_le16_to_cpu(cmd->data_length));
-	/* This is required, because Nimble checks if
-	* the data is longer than offset
-	*/
-	if (os_mbuf_extend(om, sys_le16_to_cpu(cmd->offset) + 1) == NULL) {
-		goto fail;
-	}
-
-	attr.handle = sys_le16_to_cpu(cmd->handle);
-	attr.offset = sys_le16_to_cpu(cmd->offset);
-	attr.om = om;
-
-	if (ble_gattc_write_reliable(conn.conn_handle, &attr, 1,
-				     reliable_write_rsp, NULL)) {
-		goto fail;
-	}
-
-	return;
+    SYS_LOG_ERR("Failed to send Write Long request, rc=%d", rc);
+    os_mbuf_free_chain(om);
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_WRITE_LONG, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static int
+reliable_write_rsp(uint16_t conn_handle,
+                   const struct ble_gatt_error *error,
+                   struct ble_gatt_attr *attrs,
+                   uint8_t num_attrs,
+                   void *arg)
+{
+    uint8_t err = (uint8_t) error->status;
+
+    SYS_LOG_DBG("Reliable write status %d", err);
+
+    tester_send(BTP_SERVICE_ID_GATT, GATT_RELIABLE_WRITE,
+            CONTROLLER_INDEX, &err, sizeof(err));
+    return 0;
+}
+
+static void
+reliable_write(u8_t *data, u16_t len)
+{
+    const struct gatt_reliable_write_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    struct ble_gatt_attr attr;
+    struct os_mbuf *om = NULL;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    om = ble_hs_mbuf_from_flat(cmd->data, sys_le16_to_cpu(cmd->data_length));
+    /* This is required, because Nimble checks if
+     * the data is longer than offset
+     */
+    if (os_mbuf_extend(om, sys_le16_to_cpu(cmd->offset) + 1) == NULL) {
+        goto fail;
+    }
+
+    attr.handle = sys_le16_to_cpu(cmd->handle);
+    attr.offset = sys_le16_to_cpu(cmd->offset);
+    attr.om = om;
+
+    if (ble_gattc_write_reliable(conn.conn_handle, &attr, 1,
+                     reliable_write_rsp, NULL)) {
+        goto fail;
+    }
+
+    return;
 
 fail:
-	os_mbuf_free_chain(om);
-
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_WRITE_LONG, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
+    os_mbuf_free_chain(om);
+
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_WRITE_LONG, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
 }
 
 static struct bt_gatt_subscribe_params {
-	u16_t ccc_handle;
-	u16_t value;
-	u16_t value_handle;
+    u16_t ccc_handle;
+    u16_t value;
+    u16_t value_handle;
 } subscribe_params;
 
-static void read_uuid(u8_t *data, u16_t len)
-{
-	const struct gatt_read_uuid_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	ble_uuid_any_t uuid;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	if (btp2bt_uuid(cmd->uuid, cmd->uuid_length, &uuid)) {
-		goto fail;
-	}
-
-	/* Clear buffer */
-	read_destroy();
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
-		goto fail;
-	}
-
-	if (ble_gattc_read_by_uuid(conn.conn_handle,
-				   sys_le16_to_cpu(cmd->start_handle),
-				   sys_le16_to_cpu(cmd->end_handle), &uuid.u,
-				   read_long_cb, (void *)GATT_READ_UUID)) {
-		read_destroy();
-		goto fail;
-	}
-
-	return;
+static void
+read_uuid(u8_t *data, u16_t len)
+{
+    const struct gatt_read_uuid_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    ble_uuid_any_t uuid;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    if (btp2bt_uuid(cmd->uuid, cmd->uuid_length, &uuid)) {
+        goto fail;
+    }
+
+    /* Clear buffer */
+    read_destroy();
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_read_rp))) {
+        goto fail;
+    }
+
+    if (ble_gattc_read_by_uuid(conn.conn_handle,
+                   sys_le16_to_cpu(cmd->start_handle),
+                   sys_le16_to_cpu(cmd->end_handle), &uuid.u,
+                   read_long_cb, (void *)GATT_READ_UUID)) {
+        read_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_READ, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static int disc_prim_uuid_cb(uint16_t conn_handle,
-			     const struct ble_gatt_error *error,
-			     const struct ble_gatt_svc *gatt_svc, void *arg)
-{
-	struct gatt_disc_prim_uuid_rp *rp = (void *) gatt_buf.buf;
-	struct gatt_service *service;
-	const ble_uuid_any_t *uuid;
-	u8_t uuid_length;
-	u8_t opcode = (u8_t) (int) arg;
-
-	SYS_LOG_DBG("");
-
-	if (error->status != 0 && error->status != BLE_HS_EDONE) {
-		tester_rsp(BTP_SERVICE_ID_GATT, opcode,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		discover_destroy();
-		return 0;
-	}
-
-	if (error->status == BLE_HS_EDONE) {
-		tester_send(BTP_SERVICE_ID_GATT, opcode,
-			    CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
-		discover_destroy();
-		return 0;
-	}
-
-	uuid = &gatt_svc->uuid;
-	uuid_length = (uint8_t) (uuid->u.type == BLE_UUID_TYPE_16 ? 2 : 16);
-
-	service = gatt_buf_reserve(sizeof(*service) + uuid_length);
-	if (!service) {
-		tester_rsp(BTP_SERVICE_ID_GATT, opcode,
-		CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		discover_destroy();
-		return BLE_HS_ENOMEM;
-	}
-
-	service->start_handle = sys_cpu_to_le16(gatt_svc->start_handle);
-	service->end_handle = sys_cpu_to_le16(gatt_svc->end_handle);
-	service->uuid_length = uuid_length;
-
-	if (uuid->u.type == BLE_UUID_TYPE_16) {
-		u16_t u16 = sys_cpu_to_le16(BLE_UUID16(uuid)->value);
-		memcpy(service->uuid, &u16, uuid_length);
-	} else {
-		memcpy(service->uuid, BLE_UUID128(uuid)->value,
-		uuid_length);
-	}
-
-	rp->services_count++;
-
-	return 0;
-}
-
-static int disc_all_desc_cb(uint16_t conn_handle,
-			    const struct ble_gatt_error *error,
-			    uint16_t chr_val_handle,
-			    const struct ble_gatt_dsc *gatt_dsc,
-			    void *arg)
-{
-	struct gatt_disc_all_desc_rp *rp = (void *) gatt_buf.buf;
-	struct gatt_descriptor *dsc;
-	const ble_uuid_any_t *uuid;
-	u8_t uuid_length;
-
-	SYS_LOG_DBG("");
-
-	if (error->status != 0 && error->status != BLE_HS_EDONE) {
-		tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_DESC,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		discover_destroy();
-		return 0;
-	}
-
-	if (error->status == BLE_HS_EDONE) {
-		tester_send(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_DESC,
-			    CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
-		discover_destroy();
-		return 0;
-	}
-
-	uuid = &gatt_dsc->uuid;
-	uuid_length = (uint8_t) (uuid->u.type == BLE_UUID_TYPE_16 ? 2 : 16);
-
-	dsc = gatt_buf_reserve(sizeof(*dsc) + uuid_length);
-	if (!dsc) {
-		tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_DESC,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		discover_destroy();
-		return BLE_HS_ENOMEM;
-	}
-
-	dsc->descriptor_handle = sys_cpu_to_le16(gatt_dsc->handle);
-	dsc->uuid_length = uuid_length;
-
-	if (uuid->u.type == BLE_UUID_TYPE_16) {
-		u16_t u16 = sys_cpu_to_le16(BLE_UUID16(uuid)->value);
-		memcpy(dsc->uuid, &u16, uuid_length);
-	} else {
-		memcpy(dsc->uuid, BLE_UUID128(uuid)->value, uuid_length);
-	}
-
-	rp->descriptors_count++;
-
-	return 0;
-}
-
-static void disc_all_prim_svcs(u8_t *data, u16_t len)
-{
-	struct ble_gap_conn_desc conn;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_disc_all_prim_svcs_rp))) {
-		goto fail;
-	}
-
-	if (ble_gattc_disc_all_svcs(conn.conn_handle, disc_prim_uuid_cb,
-				    (void *) GATT_DISC_ALL_PRIM_SVCS)) {
-		discover_destroy();
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_READ, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static int
+disc_prim_uuid_cb(uint16_t conn_handle,
+                  const struct ble_gatt_error *error,
+                  const struct ble_gatt_svc *gatt_svc, void *arg)
+{
+    struct gatt_disc_prim_uuid_rp *rp = (void *) gatt_buf.buf;
+    struct gatt_service *service;
+    const ble_uuid_any_t *uuid;
+    u8_t uuid_length;
+    u8_t opcode = (u8_t) (int) arg;
+
+    SYS_LOG_DBG("");
+
+    if (error->status != 0 && error->status != BLE_HS_EDONE) {
+        tester_rsp(BTP_SERVICE_ID_GATT, opcode,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        discover_destroy();
+        return 0;
+    }
+
+    if (error->status == BLE_HS_EDONE) {
+        tester_send(BTP_SERVICE_ID_GATT, opcode,
+                CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
+        discover_destroy();
+        return 0;
+    }
+
+    uuid = &gatt_svc->uuid;
+    uuid_length = (uint8_t) (uuid->u.type == BLE_UUID_TYPE_16 ? 2 : 16);
+
+    service = gatt_buf_reserve(sizeof(*service) + uuid_length);
+    if (!service) {
+        tester_rsp(BTP_SERVICE_ID_GATT, opcode,
+        CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        discover_destroy();
+        return BLE_HS_ENOMEM;
+    }
+
+    service->start_handle = sys_cpu_to_le16(gatt_svc->start_handle);
+    service->end_handle = sys_cpu_to_le16(gatt_svc->end_handle);
+    service->uuid_length = uuid_length;
+
+    if (uuid->u.type == BLE_UUID_TYPE_16) {
+        u16_t u16 = sys_cpu_to_le16(BLE_UUID16(uuid)->value);
+        memcpy(service->uuid, &u16, uuid_length);
+    } else {
+        memcpy(service->uuid, BLE_UUID128(uuid)->value,
+        uuid_length);
+    }
+
+    rp->services_count++;
+
+    return 0;
+}
+
+static int
+disc_all_desc_cb(uint16_t conn_handle,
+                 const struct ble_gatt_error *error,
+                 uint16_t chr_val_handle,
+                 const struct ble_gatt_dsc *gatt_dsc,
+                 void *arg)
+{
+    struct gatt_disc_all_desc_rp *rp = (void *) gatt_buf.buf;
+    struct gatt_descriptor *dsc;
+    const ble_uuid_any_t *uuid;
+    u8_t uuid_length;
+
+    SYS_LOG_DBG("");
+
+    if (error->status != 0 && error->status != BLE_HS_EDONE) {
+        tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_DESC,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        discover_destroy();
+        return 0;
+    }
+
+    if (error->status == BLE_HS_EDONE) {
+        tester_send(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_DESC,
+                CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
+        discover_destroy();
+        return 0;
+    }
+
+    uuid = &gatt_dsc->uuid;
+    uuid_length = (uint8_t) (uuid->u.type == BLE_UUID_TYPE_16 ? 2 : 16);
+
+    dsc = gatt_buf_reserve(sizeof(*dsc) + uuid_length);
+    if (!dsc) {
+        tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_DESC,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        discover_destroy();
+        return BLE_HS_ENOMEM;
+    }
+
+    dsc->descriptor_handle = sys_cpu_to_le16(gatt_dsc->handle);
+    dsc->uuid_length = uuid_length;
+
+    if (uuid->u.type == BLE_UUID_TYPE_16) {
+        u16_t u16 = sys_cpu_to_le16(BLE_UUID16(uuid)->value);
+        memcpy(dsc->uuid, &u16, uuid_length);
+    } else {
+        memcpy(dsc->uuid, BLE_UUID128(uuid)->value, uuid_length);
+    }
+
+    rp->descriptors_count++;
+
+    return 0;
+}
+
+static void
+disc_all_prim_svcs(u8_t *data, u16_t len)
+{
+    struct ble_gap_conn_desc conn;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_disc_all_prim_svcs_rp))) {
+        goto fail;
+    }
+
+    if (ble_gattc_disc_all_svcs(conn.conn_handle, disc_prim_uuid_cb,
+                                (void *) GATT_DISC_ALL_PRIM_SVCS)) {
+        discover_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_PRIM_SVCS,
-		   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-}
-
-static void disc_all_desc(u8_t *data, u16_t len)
-{
-	const struct gatt_disc_all_desc_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	uint16_t start_handle, end_handle;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_disc_all_desc_rp))) {
-		goto fail;
-	}
-
-	start_handle = sys_le16_to_cpu(cmd->start_handle) - 1;
-	end_handle = sys_le16_to_cpu(cmd->end_handle);
-
-	rc = ble_gattc_disc_all_dscs(conn.conn_handle, start_handle, end_handle,
-	disc_all_desc_cb, NULL);
-
-	SYS_LOG_DBG("rc=%d", rc);
-
-	if (rc) {
-		discover_destroy();
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_PRIM_SVCS,
+           CONTROLLER_INDEX, BTP_STATUS_FAILED);
+}
+
+static void
+disc_all_desc(u8_t *data, u16_t len)
+{
+    const struct gatt_disc_all_desc_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    uint16_t start_handle, end_handle;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_disc_all_desc_rp))) {
+        goto fail;
+    }
+
+    start_handle = sys_le16_to_cpu(cmd->start_handle) - 1;
+    end_handle = sys_le16_to_cpu(cmd->end_handle);
+
+    rc = ble_gattc_disc_all_dscs(conn.conn_handle, start_handle, end_handle,
+    disc_all_desc_cb, NULL);
+
+    SYS_LOG_DBG("rc=%d", rc);
+
+    if (rc) {
+        discover_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_DESC, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static int find_included_cb(uint16_t conn_handle,
-			    const struct ble_gatt_error *error,
-			    const struct ble_gatt_svc *gatt_svc, void *arg)
-{
-	struct gatt_find_included_rp *rp = (void *) gatt_buf.buf;
-	struct gatt_included *included;
-	const ble_uuid_any_t *uuid;
-	int service_handle = (int) arg;
-	u8_t uuid_length;
-
-	SYS_LOG_DBG("");
-
-	if (error->status != 0 && error->status != BLE_HS_EDONE) {
-		tester_rsp(BTP_SERVICE_ID_GATT, GATT_FIND_INCLUDED,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		discover_destroy();
-		return 0;
-	}
-
-	if (error->status == BLE_HS_EDONE) {
-		tester_send(BTP_SERVICE_ID_GATT, GATT_FIND_INCLUDED,
-			    CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
-		discover_destroy();
-		return 0;
-	}
-
-	uuid = &gatt_svc->uuid;
-	uuid_length = (uint8_t) (uuid->u.type == BLE_UUID_TYPE_16 ? 2 : 16);
-
-
-	included = gatt_buf_reserve(sizeof(*included) + uuid_length);
-	if (!included) {
-		tester_rsp(BTP_SERVICE_ID_GATT, GATT_FIND_INCLUDED,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		discover_destroy();
-		return BLE_HS_ENOMEM;
-	}
-
-	/* FIXME */
-	included->included_handle = sys_cpu_to_le16(service_handle + 1 +
-	rp->services_count);
-	included->service.start_handle = sys_cpu_to_le16(gatt_svc->start_handle);
-	included->service.end_handle = sys_cpu_to_le16(gatt_svc->end_handle);
-	included->service.uuid_length = uuid_length;
-
-	if (uuid->u.type == BLE_UUID_TYPE_16) {
-		u16_t u16 = sys_cpu_to_le16(BLE_UUID16(uuid)->value);
-		memcpy(included->service.uuid, &u16, uuid_length);
-	} else {
-		memcpy(included->service.uuid, BLE_UUID128(uuid)->value,
-		       uuid_length);
-	}
-
-	rp->services_count++;
-
-	return 0;
-}
-
-static int disc_chrc_cb(uint16_t conn_handle,
-			const struct ble_gatt_error *error,
-			const struct ble_gatt_chr *gatt_chr, void *arg)
-{
-	struct gatt_disc_chrc_rp *rp = (void *) gatt_buf.buf;
-	struct gatt_characteristic *chrc;
-	const ble_uuid_any_t *uuid;
-	u8_t btp_opcode = (uint8_t) (int) arg;
-	u8_t uuid_length;
-
-	SYS_LOG_DBG("");
-
-	if (error->status != 0 && error->status != BLE_HS_EDONE) {
-		tester_rsp(BTP_SERVICE_ID_GATT, btp_opcode,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		discover_destroy();
-		return 0;
-	}
-
-	if (error->status == BLE_HS_EDONE) {
-		tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
-			    CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
-		discover_destroy();
-		return 0;
-	}
-
-	uuid = &gatt_chr->uuid;
-	uuid_length = (uint8_t) (uuid->u.type == BLE_UUID_TYPE_16 ? 2 : 16);
-
-	chrc = gatt_buf_reserve(sizeof(*chrc) + uuid_length);
-	if (!chrc) {
-		tester_rsp(BTP_SERVICE_ID_GATT, btp_opcode,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-		discover_destroy();
-		return BLE_HS_ENOMEM;
-	}
-
-	chrc->characteristic_handle = sys_cpu_to_le16(gatt_chr->def_handle);
-	chrc->properties = gatt_chr->properties;
-	chrc->value_handle = sys_cpu_to_le16(gatt_chr->val_handle);
-	chrc->uuid_length = uuid_length;
-
-	if (uuid->u.type == BLE_UUID_TYPE_16) {
-		u16_t u16 = sys_cpu_to_le16(BLE_UUID16(uuid)->value);
-		memcpy(chrc->uuid, &u16, uuid_length);
-	} else {
-		memcpy(chrc->uuid, BLE_UUID128(uuid)->value,
-		uuid_length);
-	}
-
-	rp->characteristics_count++;
-
-	return 0;
-}
-
-static void disc_chrc_uuid(u8_t *data, u16_t len)
-{
-	const struct gatt_disc_chrc_uuid_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	uint16_t start_handle, end_handle;
-	ble_uuid_any_t uuid;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	if (btp2bt_uuid(cmd->uuid, cmd->uuid_length, &uuid)) {
-		goto fail;
-	}
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_disc_chrc_rp))) {
-		goto fail;
-	}
-
-	start_handle = sys_le16_to_cpu(cmd->start_handle);
-	end_handle = sys_le16_to_cpu(cmd->end_handle);
-
-	if (ble_gattc_disc_chrs_by_uuid(conn.conn_handle, start_handle,
-					end_handle, &uuid.u, disc_chrc_cb,
-					(void *)GATT_DISC_CHRC_UUID)) {
-		discover_destroy();
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_DESC, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static int
+find_included_cb(uint16_t conn_handle,
+                 const struct ble_gatt_error *error,
+                 const struct ble_gatt_svc *gatt_svc, void *arg)
+{
+    struct gatt_find_included_rp *rp = (void *) gatt_buf.buf;
+    struct gatt_included *included;
+    const ble_uuid_any_t *uuid;
+    int service_handle = (int) arg;
+    u8_t uuid_length;
+
+    SYS_LOG_DBG("");
+
+    if (error->status != 0 && error->status != BLE_HS_EDONE) {
+        tester_rsp(BTP_SERVICE_ID_GATT, GATT_FIND_INCLUDED,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        discover_destroy();
+        return 0;
+    }
+
+    if (error->status == BLE_HS_EDONE) {
+        tester_send(BTP_SERVICE_ID_GATT, GATT_FIND_INCLUDED,
+                CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
+        discover_destroy();
+        return 0;
+    }
+
+    uuid = &gatt_svc->uuid;
+    uuid_length = (uint8_t) (uuid->u.type == BLE_UUID_TYPE_16 ? 2 : 16);
+
+
+    included = gatt_buf_reserve(sizeof(*included) + uuid_length);
+    if (!included) {
+        tester_rsp(BTP_SERVICE_ID_GATT, GATT_FIND_INCLUDED,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        discover_destroy();
+        return BLE_HS_ENOMEM;
+    }
+
+    /* FIXME */
+    included->included_handle = sys_cpu_to_le16(service_handle + 1 +
+    rp->services_count);
+    included->service.start_handle = sys_cpu_to_le16(gatt_svc->start_handle);
+    included->service.end_handle = sys_cpu_to_le16(gatt_svc->end_handle);
+    included->service.uuid_length = uuid_length;
+
+    if (uuid->u.type == BLE_UUID_TYPE_16) {
+        u16_t u16 = sys_cpu_to_le16(BLE_UUID16(uuid)->value);
+        memcpy(included->service.uuid, &u16, uuid_length);
+    } else {
+        memcpy(included->service.uuid, BLE_UUID128(uuid)->value,
+               uuid_length);
+    }
+
+    rp->services_count++;
+
+    return 0;
+}
+
+static int
+disc_chrc_cb(uint16_t conn_handle,
+             const struct ble_gatt_error *error,
+             const struct ble_gatt_chr *gatt_chr, void *arg)
+{
+    struct gatt_disc_chrc_rp *rp = (void *) gatt_buf.buf;
+    struct gatt_characteristic *chrc;
+    const ble_uuid_any_t *uuid;
+    u8_t btp_opcode = (uint8_t) (int) arg;
+    u8_t uuid_length;
+
+    SYS_LOG_DBG("");
+
+    if (error->status != 0 && error->status != BLE_HS_EDONE) {
+        tester_rsp(BTP_SERVICE_ID_GATT, btp_opcode,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        discover_destroy();
+        return 0;
+    }
+
+    if (error->status == BLE_HS_EDONE) {
+        tester_send(BTP_SERVICE_ID_GATT, btp_opcode,
+                CONTROLLER_INDEX, gatt_buf.buf, gatt_buf.len);
+        discover_destroy();
+        return 0;
+    }
+
+    uuid = &gatt_chr->uuid;
+    uuid_length = (uint8_t) (uuid->u.type == BLE_UUID_TYPE_16 ? 2 : 16);
+
+    chrc = gatt_buf_reserve(sizeof(*chrc) + uuid_length);
+    if (!chrc) {
+        tester_rsp(BTP_SERVICE_ID_GATT, btp_opcode,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+        discover_destroy();
+        return BLE_HS_ENOMEM;
+    }
+
+    chrc->characteristic_handle = sys_cpu_to_le16(gatt_chr->def_handle);
+    chrc->properties = gatt_chr->properties;
+    chrc->value_handle = sys_cpu_to_le16(gatt_chr->val_handle);
+    chrc->uuid_length = uuid_length;
+
+    if (uuid->u.type == BLE_UUID_TYPE_16) {
+        u16_t u16 = sys_cpu_to_le16(BLE_UUID16(uuid)->value);
+        memcpy(chrc->uuid, &u16, uuid_length);
+    } else {
+        memcpy(chrc->uuid, BLE_UUID128(uuid)->value,
+        uuid_length);
+    }
+
+    rp->characteristics_count++;
+
+    return 0;
+}
+
+static void
+disc_chrc_uuid(u8_t *data, u16_t len)
+{
+    const struct gatt_disc_chrc_uuid_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    uint16_t start_handle, end_handle;
+    ble_uuid_any_t uuid;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    if (btp2bt_uuid(cmd->uuid, cmd->uuid_length, &uuid)) {
+        goto fail;
+    }
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_disc_chrc_rp))) {
+        goto fail;
+    }
+
+    start_handle = sys_le16_to_cpu(cmd->start_handle);
+    end_handle = sys_le16_to_cpu(cmd->end_handle);
+
+    if (ble_gattc_disc_chrs_by_uuid(conn.conn_handle, start_handle,
+                    end_handle, &uuid.u, disc_chrc_cb,
+                                    (void *)GATT_DISC_CHRC_UUID)) {
+        discover_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_CHRC_UUID, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static void disc_prim_uuid(u8_t *data, u16_t len)
-{
-	const struct gatt_disc_prim_uuid_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	ble_uuid_any_t uuid;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	if (btp2bt_uuid(cmd->uuid, cmd->uuid_length, &uuid)) {
-		goto fail;
-	}
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_disc_prim_uuid_rp))) {
-		goto fail;
-	}
-
-	if (ble_gattc_disc_svc_by_uuid(conn.conn_handle,
-				       &uuid.u, disc_prim_uuid_cb,
-				       (void *) GATT_DISC_PRIM_UUID)) {
-		discover_destroy();
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_CHRC_UUID, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static void
+disc_prim_uuid(u8_t *data, u16_t len)
+{
+    const struct gatt_disc_prim_uuid_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    ble_uuid_any_t uuid;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    if (btp2bt_uuid(cmd->uuid, cmd->uuid_length, &uuid)) {
+        goto fail;
+    }
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_disc_prim_uuid_rp))) {
+        goto fail;
+    }
+
+    if (ble_gattc_disc_svc_by_uuid(conn.conn_handle,
+                       &uuid.u, disc_prim_uuid_cb,
+                                   (void *) GATT_DISC_PRIM_UUID)) {
+        discover_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_PRIM_UUID, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static void disc_all_chrc(u8_t *data, u16_t len)
-{
-	const struct gatt_disc_all_chrc_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	uint16_t start_handle, end_handle;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		SYS_LOG_DBG("Conn find failed");
-		goto fail;
-	}
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_disc_chrc_rp))) {
-		SYS_LOG_DBG("Buf reserve failed");
-		goto fail;
-	}
-
-	start_handle = sys_le16_to_cpu(cmd->start_handle);
-	end_handle = sys_le16_to_cpu(cmd->end_handle);
-
-	rc = ble_gattc_disc_all_chrs(conn.conn_handle, start_handle, end_handle,
-	disc_chrc_cb, (void *)GATT_DISC_ALL_CHRC);
-	if (rc) {
-		discover_destroy();
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_PRIM_UUID, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static void
+disc_all_chrc(u8_t *data, u16_t len)
+{
+    const struct gatt_disc_all_chrc_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    uint16_t start_handle, end_handle;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        SYS_LOG_DBG("Conn find failed");
+        goto fail;
+    }
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_disc_chrc_rp))) {
+        SYS_LOG_DBG("Buf reserve failed");
+        goto fail;
+    }
+
+    start_handle = sys_le16_to_cpu(cmd->start_handle);
+    end_handle = sys_le16_to_cpu(cmd->end_handle);
+
+    rc = ble_gattc_disc_all_chrs(conn.conn_handle, start_handle, end_handle,
+    disc_chrc_cb, (void *)GATT_DISC_ALL_CHRC);
+    if (rc) {
+        discover_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_CHRC, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static void find_included(u8_t *data, u16_t len)
-{
-	const struct gatt_find_included_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	uint16_t start_handle, end_handle;
-	int service_handle_arg;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	if (!gatt_buf_reserve(sizeof(struct gatt_find_included_rp))) {
-		goto fail;
-	}
-
-	start_handle = sys_le16_to_cpu(cmd->start_handle);
-	end_handle = sys_le16_to_cpu(cmd->end_handle);
-	service_handle_arg = start_handle;
-
-	if (ble_gattc_find_inc_svcs(conn.conn_handle, start_handle, end_handle,
-				    find_included_cb,
-				    (void *)service_handle_arg)) {
-		discover_destroy();
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_DISC_ALL_CHRC, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static void
+find_included(u8_t *data, u16_t len)
+{
+    const struct gatt_find_included_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    uint16_t start_handle, end_handle;
+    int service_handle_arg;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    if (!gatt_buf_reserve(sizeof(struct gatt_find_included_rp))) {
+        goto fail;
+    }
+
+    start_handle = sys_le16_to_cpu(cmd->start_handle);
+    end_handle = sys_le16_to_cpu(cmd->end_handle);
+    service_handle_arg = start_handle;
+
+    if (ble_gattc_find_inc_svcs(conn.conn_handle, start_handle, end_handle,
+                    find_included_cb,
+                                (void *)service_handle_arg)) {
+        discover_destroy();
+        goto fail;
+    }
+
+    return;
 
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_FIND_INCLUDED, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
-}
-
-static int exchange_func(uint16_t conn_handle,
-			 const struct ble_gatt_error *error,
-			 uint16_t mtu, void *arg)
-{
-	SYS_LOG_DBG("");
-
-	if (error->status) {
-		tester_rsp(BTP_SERVICE_ID_GATT, GATT_EXCHANGE_MTU,
-			   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-
-	return 0;
-}
-
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_EXCHANGE_MTU, CONTROLLER_INDEX,
-		   BTP_STATUS_SUCCESS);
-
-	return 0;
-}
-
-static void exchange_mtu(u8_t *data, u16_t len)
-{
-	struct ble_gap_conn_desc conn;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		goto fail;
-	}
-
-	if (ble_gattc_exchange_mtu(conn.conn_handle, exchange_func, NULL)) {
-		goto fail;
-	}
-
-	return;
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_FIND_INCLUDED, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
+}
+
+static int
+exchange_func(uint16_t conn_handle,
+              const struct ble_gatt_error *error,
+              uint16_t mtu, void *arg)
+{
+    SYS_LOG_DBG("");
+
+    if (error->status) {
+        tester_rsp(BTP_SERVICE_ID_GATT, GATT_EXCHANGE_MTU,
+               CONTROLLER_INDEX, BTP_STATUS_FAILED);
+
+        return 0;
+    }
+
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_EXCHANGE_MTU, CONTROLLER_INDEX,
+           BTP_STATUS_SUCCESS);
+
+    return 0;
+}
+
+static void
+exchange_mtu(u8_t *data, u16_t len)
+{
+    struct ble_gap_conn_desc conn;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        goto fail;
+    }
+
+    if (ble_gattc_exchange_mtu(conn.conn_handle, exchange_func, NULL)) {
+        goto fail;
+    }
+
+    return;
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_EXCHANGE_MTU,
-		   CONTROLLER_INDEX, BTP_STATUS_FAILED);
-}
-
-static int enable_subscription(u16_t conn_handle, u16_t ccc_handle,
-			       u16_t value)
-{
-	u8_t op;
-
-	SYS_LOG_DBG("");
-
-	op = (uint8_t) (value == 0x0001 ? GATT_CFG_NOTIFY : GATT_CFG_INDICATE);
-
-	if (ble_gattc_write_flat(conn_handle, ccc_handle,
-				 &value, sizeof(value), NULL, NULL)) {
-		return -EINVAL;
-	}
-
-	subscribe_params.ccc_handle = value;
-
-	tester_rsp(BTP_SERVICE_ID_GATT, op, CONTROLLER_INDEX,
-		   BTP_STATUS_SUCCESS);
-	return 0;
-}
-
-static int disable_subscription(u16_t conn_handle, u16_t ccc_handle)
-{
-	u16_t value = 0x00;
-
-	SYS_LOG_DBG("");
-
-	/* Fail if CCC handle doesn't match */
-	if (ccc_handle != subscribe_params.ccc_handle) {
-		SYS_LOG_ERR("CCC handle doesn't match");
-		return -EINVAL;
-	}
-
-	if (ble_gattc_write_no_rsp_flat(conn_handle, ccc_handle,
-					&value, sizeof(value))) {
-		return -EINVAL;
-	}
-
-	subscribe_params.ccc_handle = 0;
-	return 0;
-}
-
-static void config_subscription(u8_t *data, u16_t len, u8_t op)
-{
-	const struct gatt_cfg_notify_cmd *cmd = (void *) data;
-	struct ble_gap_conn_desc conn;
-	u16_t ccc_handle = sys_le16_to_cpu(cmd->ccc_handle);
-	u8_t status;
-	int rc;
-
-	SYS_LOG_DBG("");
-
-	rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-	if (rc) {
-		tester_rsp(BTP_SERVICE_ID_GATT, op, CONTROLLER_INDEX,
-			   BTP_STATUS_FAILED);
-		return;
-	}
-
-	if (cmd->enable) {
-		u16_t value;
-
-		if (op == GATT_CFG_NOTIFY) {
-			value = 0x0001;
-		} else {
-			value = 0x0002;
-		}
-
-		/* on success response will be sent from callback */
-		if (enable_subscription(conn.conn_handle,
-					ccc_handle, value) == 0) {
-			return;
-		}
-
-		status = BTP_STATUS_FAILED;
-	} else {
-		if (disable_subscription(conn.conn_handle, ccc_handle) < 0) {
-			status = BTP_STATUS_FAILED;
-		} else {
-			status = BTP_STATUS_SUCCESS;
-		}
-	}
-
-	SYS_LOG_DBG("Config subscription (op %u) status %u", op, status);
-
-	tester_rsp(BTP_SERVICE_ID_GATT, op, CONTROLLER_INDEX, status);
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_EXCHANGE_MTU,
+           CONTROLLER_INDEX, BTP_STATUS_FAILED);
+}
+
+static int
+enable_subscription(u16_t conn_handle, u16_t ccc_handle,
+                    u16_t value)
+{
+    u8_t op;
+
+    SYS_LOG_DBG("");
+
+    op = (uint8_t) (value == 0x0001 ? GATT_CFG_NOTIFY : GATT_CFG_INDICATE);
+
+    if (ble_gattc_write_flat(conn_handle, ccc_handle,
+                 &value, sizeof(value), NULL, NULL)) {
+        return -EINVAL;
+    }
+
+    subscribe_params.ccc_handle = value;
+
+    tester_rsp(BTP_SERVICE_ID_GATT, op, CONTROLLER_INDEX,
+           BTP_STATUS_SUCCESS);
+    return 0;
+}
+
+static int
+disable_subscription(u16_t conn_handle, u16_t ccc_handle)
+{
+    u16_t value = 0x00;
+
+    SYS_LOG_DBG("");
+
+    /* Fail if CCC handle doesn't match */
+    if (ccc_handle != subscribe_params.ccc_handle) {
+        SYS_LOG_ERR("CCC handle doesn't match");
+        return -EINVAL;
+    }
+
+    if (ble_gattc_write_no_rsp_flat(conn_handle, ccc_handle,
+                    &value, sizeof(value))) {
+        return -EINVAL;
+    }
+
+    subscribe_params.ccc_handle = 0;
+    return 0;
+}
+
+static void
+config_subscription(u8_t *data, u16_t len, u8_t op)
+{
+    const struct gatt_cfg_notify_cmd *cmd = (void *) data;
+    struct ble_gap_conn_desc conn;
+    u16_t ccc_handle = sys_le16_to_cpu(cmd->ccc_handle);
+    u8_t status;
+    int rc;
+
+    SYS_LOG_DBG("");
+
+    rc = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+    if (rc) {
+        tester_rsp(BTP_SERVICE_ID_GATT, op, CONTROLLER_INDEX,
+               BTP_STATUS_FAILED);
+        return;
+    }
+
+    if (cmd->enable) {
+        u16_t value;
+
+        if (op == GATT_CFG_NOTIFY) {
+            value = 0x0001;
+        } else {
+            value = 0x0002;
+        }
+
+        /* on success response will be sent from callback */
+        if (enable_subscription(conn.conn_handle,
+                    ccc_handle, value) == 0) {
+            return;
+        }
+
+        status = BTP_STATUS_FAILED;
+    } else {
+        if (disable_subscription(conn.conn_handle, ccc_handle) < 0) {
+            status = BTP_STATUS_FAILED;
+        } else {
+            status = BTP_STATUS_SUCCESS;
+        }
+    }
+
+    SYS_LOG_DBG("Config subscription (op %u) status %u", op, status);
+
+    tester_rsp(BTP_SERVICE_ID_GATT, op, CONTROLLER_INDEX, status);
 }
 
 #define BTP_PERM_F_READ                      0x01
@@ -1692,488 +1755,502 @@
 #define BTP_PERM_F_WRITE_AUTHOR              0x80
 
 static int flags_hs2btp_map[] = {
-	BTP_PERM_F_READ,
-	BTP_PERM_F_WRITE,
-	BTP_PERM_F_READ_ENC,
-	BTP_PERM_F_READ_AUTHEN,
-	BTP_PERM_F_READ_AUTHOR,
-	BTP_PERM_F_WRITE_ENC,
-	BTP_PERM_F_WRITE_AUTHEN,
-	BTP_PERM_F_WRITE_AUTHOR,
+    BTP_PERM_F_READ,
+    BTP_PERM_F_WRITE,
+    BTP_PERM_F_READ_ENC,
+    BTP_PERM_F_READ_AUTHEN,
+    BTP_PERM_F_READ_AUTHOR,
+    BTP_PERM_F_WRITE_ENC,
+    BTP_PERM_F_WRITE_AUTHEN,
+    BTP_PERM_F_WRITE_AUTHOR,
 };
 
-static u8_t flags_hs2btp(u8_t flags)
-{
-	int i;
-	u8_t ret = 0;
-
-	for (i = 0; i < 8; ++i) {
-		if (flags & BIT(i)) {
-			ret |= flags_hs2btp_map[i];
-		}
-	}
-
-	return ret;
-}
-
-static void get_attrs(u8_t *data, u16_t len)
-{
-	const struct gatt_get_attributes_cmd *cmd = (void *) data;
-	struct gatt_get_attributes_rp *rp;
-	struct gatt_attr *gatt_attr;
-	struct os_mbuf *buf = os_msys_get(0, 0);
-	u16_t start_handle, end_handle;
-	struct ble_att_svr_entry *entry = NULL;
-	ble_uuid_any_t uuid;
-	ble_uuid_t *uuid_ptr = NULL;
-	u8_t count = 0;
-	char str[BLE_UUID_STR_LEN];
-
-	SYS_LOG_DBG("");
-
-	memset(str, 0, sizeof(str));
-	memset(&uuid, 0, sizeof(uuid));
-	start_handle = sys_le16_to_cpu(cmd->start_handle);
-	end_handle = sys_le16_to_cpu(cmd->end_handle);
-
-	if (cmd->type_length) {
-		if (btp2bt_uuid(cmd->type, cmd->type_length, &uuid)) {
-			goto fail;
-		}
-
-		ble_uuid_to_str(&uuid.u, str);
-		SYS_LOG_DBG("start 0x%04x end 0x%04x, uuid %s", start_handle,
-			    end_handle, str);
-
-		uuid_ptr = &uuid.u;
-	} else {
-		SYS_LOG_DBG("start 0x%04x end 0x%04x", start_handle, end_handle);
-	}
-
-	net_buf_simple_init(buf, 0);
-	rp = net_buf_simple_add(buf, sizeof(*rp));
-
-	entry = ble_att_svr_find_by_uuid(entry, uuid_ptr, end_handle);
-	while (entry) {
-
-		if (entry->ha_handle_id < start_handle) {
-			entry = ble_att_svr_find_by_uuid(entry,
-			uuid_ptr, end_handle);
-			continue;
-		}
-
-		gatt_attr = net_buf_simple_add(buf, sizeof(*gatt_attr));
-		gatt_attr->handle = sys_cpu_to_le16(entry->ha_handle_id);
-		gatt_attr->permission = flags_hs2btp(entry->ha_flags);
-
-		if (entry->ha_uuid->type == BLE_UUID_TYPE_16) {
-			gatt_attr->type_length = 2;
-			net_buf_simple_add_le16(buf,
-			BLE_UUID16(entry->ha_uuid)->value);
-		} else {
-			gatt_attr->type_length = 16;
-			net_buf_simple_add_mem(buf,
-			BLE_UUID128(entry->ha_uuid)->value,
-			gatt_attr->type_length);
-		}
-
-		count++;
-
-		entry = ble_att_svr_find_by_uuid(entry, uuid_ptr, end_handle);
-	}
-
-	rp->attrs_count = count;
-
-	tester_send_buf(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTES,
-			CONTROLLER_INDEX, buf);
-
-	goto free;
+static u8_t
+flags_hs2btp(u8_t flags)
+{
+    int i;
+    u8_t ret = 0;
+
+    for (i = 0; i < 8; ++i) {
+        if (flags & BIT(i)) {
+            ret |= flags_hs2btp_map[i];
+        }
+    }
+
+    return ret;
+}
+
+static void
+get_attrs(u8_t *data, u16_t len)
+{
+    const struct gatt_get_attributes_cmd *cmd = (void *) data;
+    struct gatt_get_attributes_rp *rp;
+    struct gatt_attr *gatt_attr;
+    struct os_mbuf *buf = os_msys_get(0, 0);
+    u16_t start_handle, end_handle;
+    struct ble_att_svr_entry *entry = NULL;
+    ble_uuid_any_t uuid;
+    ble_uuid_t *uuid_ptr = NULL;
+    u8_t count = 0;
+    char str[BLE_UUID_STR_LEN];
+
+    SYS_LOG_DBG("");
+
+    memset(str, 0, sizeof(str));
+    memset(&uuid, 0, sizeof(uuid));
+    start_handle = sys_le16_to_cpu(cmd->start_handle);
+    end_handle = sys_le16_to_cpu(cmd->end_handle);
+
+    if (cmd->type_length) {
+        if (btp2bt_uuid(cmd->type, cmd->type_length, &uuid)) {
+            goto fail;
+        }
+
+        ble_uuid_to_str(&uuid.u, str);
+        SYS_LOG_DBG("start 0x%04x end 0x%04x, uuid %s", start_handle,
+                end_handle, str);
+
+        uuid_ptr = &uuid.u;
+    } else {
+        SYS_LOG_DBG("start 0x%04x end 0x%04x", start_handle, end_handle);
+    }
+
+    net_buf_simple_init(buf, 0);
+    rp = net_buf_simple_add(buf, sizeof(*rp));
+
+    entry = ble_att_svr_find_by_uuid(entry, uuid_ptr, end_handle);
+    while (entry) {
+
+        if (entry->ha_handle_id < start_handle) {
+            entry = ble_att_svr_find_by_uuid(entry,
+            uuid_ptr, end_handle);
+            continue;
+        }
+
+        gatt_attr = net_buf_simple_add(buf, sizeof(*gatt_attr));
+        gatt_attr->handle = sys_cpu_to_le16(entry->ha_handle_id);
+        gatt_attr->permission = flags_hs2btp(entry->ha_flags);
+
+        if (entry->ha_uuid->type == BLE_UUID_TYPE_16) {
+            gatt_attr->type_length = 2;
+            net_buf_simple_add_le16(buf,
+            BLE_UUID16(entry->ha_uuid)->value);
+        } else {
+            gatt_attr->type_length = 16;
+            net_buf_simple_add_mem(buf,
+            BLE_UUID128(entry->ha_uuid)->value,
+            gatt_attr->type_length);
+        }
+
+        count++;
+
+        entry = ble_att_svr_find_by_uuid(entry, uuid_ptr, end_handle);
+    }
+
+    rp->attrs_count = count;
+
+    tester_send_buf(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTES,
+            CONTROLLER_INDEX, buf);
+
+    goto free;
 fail:
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTES, CONTROLLER_INDEX,
-		   BTP_STATUS_FAILED);
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTES, CONTROLLER_INDEX,
+           BTP_STATUS_FAILED);
 free:
-	os_mbuf_free_chain(buf);
-}
-
-static void get_attr_val(u8_t *data, u16_t len)
-{
-	const struct gatt_get_attribute_value_cmd *cmd = (void *) data;
-	struct gatt_get_attribute_value_rp *rp;
-	struct ble_gap_conn_desc conn;
-	struct os_mbuf *buf = os_msys_get(0, 0);
-	u16_t handle = sys_cpu_to_le16(cmd->handle);
-	uint8_t out_att_err;
-	int conn_status;
-
-	conn_status = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
-
-	if (conn_status) {
-		net_buf_simple_init(buf, 0);
-		rp = net_buf_simple_add(buf, sizeof(*rp));
-
-		ble_att_svr_read_handle(BLE_HS_CONN_HANDLE_NONE,
-					handle, 0, buf,
-					&out_att_err);
-
-		rp->att_response = out_att_err;
-		rp->value_length = os_mbuf_len(buf) - sizeof(*rp);
-
-		tester_send_buf(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTE_VALUE,
-				CONTROLLER_INDEX, buf);
-
-		goto free;
-	} else {
-		net_buf_simple_init(buf, 0);
-		rp = net_buf_simple_add(buf, sizeof(*rp));
-
-		ble_att_svr_read_handle(conn.conn_handle,
-		handle, 0, buf,
-		&out_att_err);
-
-		rp->att_response = out_att_err;
-		rp->value_length = os_mbuf_len(buf) - sizeof(*rp);
-
-		tester_send_buf(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTE_VALUE,
-				CONTROLLER_INDEX, buf);
-
-		goto free;
-	}
+    os_mbuf_free_chain(buf);
+}
+
+static void
+get_attr_val(u8_t *data, u16_t len)
+{
+    const struct gatt_get_attribute_value_cmd *cmd = (void *) data;
+    struct gatt_get_attribute_value_rp *rp;
+    struct ble_gap_conn_desc conn;
+    struct os_mbuf *buf = os_msys_get(0, 0);
+    u16_t handle = sys_cpu_to_le16(cmd->handle);
+    uint8_t out_att_err;
+    int conn_status;
+
+    conn_status = ble_gap_conn_find_by_addr((ble_addr_t *)data, &conn);
+
+    if (conn_status) {
+        net_buf_simple_init(buf, 0);
+        rp = net_buf_simple_add(buf, sizeof(*rp));
+
+        ble_att_svr_read_handle(BLE_HS_CONN_HANDLE_NONE,
+                    handle, 0, buf,
+                    &out_att_err);
+
+        rp->att_response = out_att_err;
+        rp->value_length = os_mbuf_len(buf) - sizeof(*rp);
+
+        tester_send_buf(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTE_VALUE,
+                CONTROLLER_INDEX, buf);
+
+        goto free;
+    } else {
+        net_buf_simple_init(buf, 0);
+        rp = net_buf_simple_add(buf, sizeof(*rp));
+
+        ble_att_svr_read_handle(conn.conn_handle,
+        handle, 0, buf,
+        &out_att_err);
+
+        rp->att_response = out_att_err;
+        rp->value_length = os_mbuf_len(buf) - sizeof(*rp);
+
+        tester_send_buf(BTP_SERVICE_ID_GATT, GATT_GET_ATTRIBUTE_VALUE,
+                CONTROLLER_INDEX, buf);
+
+        goto free;
+    }
 
 free:
-	os_mbuf_free_chain(buf);
-}
-
-static void change_database(u8_t *data, u16_t len)
-{
-	const struct gatt_change_database *cmd = (void *) data;
-
-	SYS_LOG_DBG("")
-
-	ble_gatts_show_local();
-
-	ble_svc_gatt_changed(cmd->start_handle, cmd->end_handle);
-
-	tester_rsp(BTP_SERVICE_ID_GATT, GATT_CHANGE_DATABASE, CONTROLLER_INDEX,
-		   BTP_STATUS_SUCCESS);
-
-	return;
-}
-
-static void supported_commands(u8_t *data, u16_t len)
-{
-	u8_t cmds[4];
-	struct gatt_read_supported_commands_rp *rp = (void *) cmds;
-
-	SYS_LOG_DBG("");
-
-	memset(cmds, 0, sizeof(cmds));
-
-	tester_set_bit(cmds, GATT_READ_SUPPORTED_COMMANDS);
-	tester_set_bit(cmds, GATT_START_SERVER);
-	tester_set_bit(cmds, GATT_EXCHANGE_MTU);
-	tester_set_bit(cmds, GATT_DISC_ALL_PRIM_SVCS);
-	tester_set_bit(cmds, GATT_DISC_PRIM_UUID);
-	tester_set_bit(cmds, GATT_FIND_INCLUDED);
-	tester_set_bit(cmds, GATT_DISC_ALL_CHRC);
-	tester_set_bit(cmds, GATT_DISC_CHRC_UUID);
-	tester_set_bit(cmds, GATT_DISC_ALL_DESC);
-	tester_set_bit(cmds, GATT_READ);
-	tester_set_bit(cmds, GATT_READ_LONG);
-	tester_set_bit(cmds, GATT_READ_MULTIPLE);
+    os_mbuf_free_chain(buf);
+}
+
+static void
+change_database(u8_t *data, u16_t len)
+{
+    const struct gatt_change_database *cmd = (void *) data;
+
+    SYS_LOG_DBG("")
+
+    ble_gatts_show_local();
+
+    ble_svc_gatt_changed(cmd->start_handle, cmd->end_handle);
+
+    tester_rsp(BTP_SERVICE_ID_GATT, GATT_CHANGE_DATABASE, CONTROLLER_INDEX,
+           BTP_STATUS_SUCCESS);
+
+    return;
+}
+
+static void
+supported_commands(u8_t *data, u16_t len)
+{
+    u8_t cmds[4];
+    struct gatt_read_supported_commands_rp *rp = (void *) cmds;
+
+    SYS_LOG_DBG("");
+
+    memset(cmds, 0, sizeof(cmds));
+
+    tester_set_bit(cmds, GATT_READ_SUPPORTED_COMMANDS);
+    tester_set_bit(cmds, GATT_START_SERVER);
+    tester_set_bit(cmds, GATT_EXCHANGE_MTU);
+    tester_set_bit(cmds, GATT_DISC_ALL_PRIM_SVCS);
+    tester_set_bit(cmds, GATT_DISC_PRIM_UUID);
+    tester_set_bit(cmds, GATT_FIND_INCLUDED);
+    tester_set_bit(cmds, GATT_DISC_ALL_CHRC);
+    tester_set_bit(cmds, GATT_DISC_CHRC_UUID);
+    tester_set_bit(cmds, GATT_DISC_ALL_DESC);
+    tester_set_bit(cmds, GATT_READ);
+    tester_set_bit(cmds, GATT_READ_LONG);
+    tester_set_bit(cmds, GATT_READ_MULTIPLE);
     tester_set_bit(cmds, GATT_READ_MULTIPLE_VAR);
-	tester_set_bit(cmds, GATT_WRITE_WITHOUT_RSP);
+    tester_set_bit(cmds, GATT_WRITE_WITHOUT_RSP);
 #if 0
-	tester_set_bit(cmds, GATT_SIGNED_WRITE_WITHOUT_RSP);
+    tester_set_bit(cmds, GATT_SIGNED_WRITE_WITHOUT_RSP);
 #endif
-	tester_set_bit(cmds, GATT_WRITE);
-	tester_set_bit(cmds, GATT_WRITE_LONG);
-	tester_set_bit(cmds, GATT_CFG_NOTIFY);
-	tester_set_bit(cmds, GATT_CFG_INDICATE);
-	tester_set_bit(cmds, GATT_GET_ATTRIBUTES);
-	tester_set_bit(cmds, GATT_GET_ATTRIBUTE_VALUE);
-	tester_set_bit(cmds, GATT_CHANGE_DATABASE);
-
-	tester_send(BTP_SERVICE_ID_GATT, GATT_READ_SUPPORTED_COMMANDS,
-	CONTROLLER_INDEX, (u8_t *) rp, sizeof(cmds));
+    tester_set_bit(cmds, GATT_WRITE);
+    tester_set_bit(cmds, GATT_WRITE_LONG);
+    tester_set_bit(cmds, GATT_CFG_NOTIFY);
+    tester_set_bit(cmds, GATT_CFG_INDICATE);
+    tester_set_bit(cmds, GATT_GET_ATTRIBUTES);
+    tester_set_bit(cmds, GATT_GET_ATTRIBUTE_VALUE);
+    tester_set_bit(cmds, GATT_CHANGE_DATABASE);
+
+    tester_send(BTP_SERVICE_ID_GATT, GATT_READ_SUPPORTED_COMMANDS,
+    CONTROLLER_INDEX, (u8_t *) rp, sizeof(cmds));
 }
 
 enum attr_type {
-	BLE_GATT_ATTR_SVC = 0,
-	BLE_GATT_ATTR_CHR,
-	BLE_GATT_ATTR_DSC,
+    BLE_GATT_ATTR_SVC = 0,
+    BLE_GATT_ATTR_CHR,
+    BLE_GATT_ATTR_DSC,
 };
 
-void tester_handle_gatt(u8_t opcode, u8_t index, u8_t *data,
-                                                u16_t len)
-{
-	switch (opcode) {
-	case GATT_READ_SUPPORTED_COMMANDS:
-		supported_commands(data, len);
-		return;
-	case GATT_START_SERVER:
-		start_server(data, len);
-		return;
-	case GATT_EXCHANGE_MTU:
-		exchange_mtu(data, len);
-		return;
-	case GATT_DISC_ALL_PRIM_SVCS:
-		disc_all_prim_svcs(data, len);
-		return;
-	case GATT_DISC_PRIM_UUID:
-		disc_prim_uuid(data, len);
-		return;
-	case GATT_FIND_INCLUDED:
-		find_included(data, len);
-		return;
-	case GATT_DISC_ALL_CHRC:
-		disc_all_chrc(data, len);
-		return;
-	case GATT_DISC_CHRC_UUID:
-		disc_chrc_uuid(data, len);
-		return;
-	case GATT_DISC_ALL_DESC:
-		disc_all_desc(data, len);
-		return;
-	case GATT_CHANGE_DATABASE:
-		change_database(data, len);
-		return;
-	case GATT_READ:
-		read(data, len);
-		return;
-	case GATT_READ_UUID:
-		read_uuid(data, len);
-		return;
-	case GATT_READ_LONG:
-		read_long(data, len);
-		return;
-	case GATT_READ_MULTIPLE:
-		read_multiple(data, len);
-		return;
-	case GATT_READ_MULTIPLE_VAR:
-		read_multiple_var(data, len);
-		return;
-	case GATT_WRITE_WITHOUT_RSP:
-		write_without_rsp(data, len, opcode, false);
-		return;
+void
+tester_handle_gatt(u8_t opcode, u8_t index, u8_t *data,
+                   u16_t len)
+{
+    switch (opcode) {
+    case GATT_READ_SUPPORTED_COMMANDS:
+        supported_commands(data, len);
+        return;
+    case GATT_START_SERVER:
+        start_server(data, len);
+        return;
+    case GATT_EXCHANGE_MTU:
+        exchange_mtu(data, len);
+        return;
+    case GATT_DISC_ALL_PRIM_SVCS:
+        disc_all_prim_svcs(data, len);
+        return;
+    case GATT_DISC_PRIM_UUID:
+        disc_prim_uuid(data, len);
+        return;
+    case GATT_FIND_INCLUDED:
+        find_included(data, len);
+        return;
+    case GATT_DISC_ALL_CHRC:
+        disc_all_chrc(data, len);
+        return;
+    case GATT_DISC_CHRC_UUID:
+        disc_chrc_uuid(data, len);
+        return;
+    case GATT_DISC_ALL_DESC:
+        disc_all_desc(data, len);
+        return;
+    case GATT_CHANGE_DATABASE:
+        change_database(data, len);
+        return;
+    case GATT_READ:
+        read(data, len);
+        return;
+    case GATT_READ_UUID:
+        read_uuid(data, len);
+        return;
+    case GATT_READ_LONG:
+        read_long(data, len);
+        return;
+    case GATT_READ_MULTIPLE:
+        read_multiple(data, len);
+        return;
+    case GATT_READ_MULTIPLE_VAR:
+        read_multiple_var(data, len);
+        return;
+    case GATT_WRITE_WITHOUT_RSP:
+        write_without_rsp(data, len, opcode, false);
+        return;
 #if 0
-	case GATT_SIGNED_WRITE_WITHOUT_RSP:
-		write_without_rsp(data, len, opcode, true);
-		return;
+    case GATT_SIGNED_WRITE_WITHOUT_RSP:
+        write_without_rsp(data, len, opcode, true);
+        return;
 #endif
-	case GATT_WRITE:
-		write(data, len);
-		return;
-	case GATT_WRITE_LONG:
-		write_long(data, len);
-		return;
-	case GATT_RELIABLE_WRITE:
-		reliable_write(data, len);
-		return;
-	case GATT_CFG_NOTIFY:
-	case GATT_CFG_INDICATE:
-		config_subscription(data, len, opcode);
-		return;
-	case GATT_GET_ATTRIBUTES:
-		get_attrs(data, len);
-		return;
-	case GATT_GET_ATTRIBUTE_VALUE:
-		get_attr_val(data, len);
-		return;
-	default:
-		tester_rsp(BTP_SERVICE_ID_GATT, opcode, index,
-			   BTP_STATUS_UNKNOWN_CMD);
-	return;
-	}
-}
-
-int tester_gatt_notify_rx_ev(u16_t conn_handle, u16_t attr_handle,
-			     u8_t indication, struct os_mbuf *om)
-{
-	struct gatt_notification_ev *ev;
-	struct ble_gap_conn_desc conn;
-	struct os_mbuf *buf = os_msys_get(0, 0);
-	const ble_addr_t *addr;
-
-	SYS_LOG_DBG("");
-
-	if (!subscribe_params.ccc_handle) {
-		goto fail;
-	}
-
-	if (ble_gap_conn_find(conn_handle, &conn)) {
-		goto fail;
-	}
-
-	net_buf_simple_init(buf, 0);
-	ev = net_buf_simple_add(buf, sizeof(*ev));
-
-	addr = &conn.peer_ota_addr;
-
-	ev->address_type = addr->type;
-	memcpy(ev->address, addr->val, sizeof(ev->address));
-	ev->type = (u8_t) (indication ? 0x02 : 0x01);
-	ev->handle = sys_cpu_to_le16(attr_handle);
-	ev->data_length = sys_cpu_to_le16(os_mbuf_len(om));
-	os_mbuf_appendfrom(buf, om, 0, os_mbuf_len(om));
-
-	tester_send_buf(BTP_SERVICE_ID_GATT, GATT_EV_NOTIFICATION,
-			CONTROLLER_INDEX, buf);
+    case GATT_WRITE:
+        write(data, len);
+        return;
+    case GATT_WRITE_LONG:
+        write_long(data, len);
+        return;
+    case GATT_RELIABLE_WRITE:
+        reliable_write(data, len);
+        return;
+    case GATT_CFG_NOTIFY:
+    case GATT_CFG_INDICATE:
+        config_subscription(data, len, opcode);
+        return;
+    case GATT_GET_ATTRIBUTES:
+        get_attrs(data, len);
+        return;
+    case GATT_GET_ATTRIBUTE_VALUE:
+        get_attr_val(data, len);
+        return;
+    default:
+        tester_rsp(BTP_SERVICE_ID_GATT, opcode, index,
+               BTP_STATUS_UNKNOWN_CMD);
+        return;
+    }
+}
+
+int
+tester_gatt_notify_rx_ev(u16_t conn_handle, u16_t attr_handle,
+                         u8_t indication, struct os_mbuf *om)
+{
+    struct gatt_notification_ev *ev;
+    struct ble_gap_conn_desc conn;
+    struct os_mbuf *buf = os_msys_get(0, 0);
+    const ble_addr_t *addr;
+
+    SYS_LOG_DBG("");
+
+    if (!subscribe_params.ccc_handle) {
+        goto fail;
+    }
+
+    if (ble_gap_conn_find(conn_handle, &conn)) {
+        goto fail;
+    }
+
+    net_buf_simple_init(buf, 0);
+    ev = net_buf_simple_add(buf, sizeof(*ev));
+
+    addr = &conn.peer_ota_addr;
+
+    ev->address_type = addr->type;
+    memcpy(ev->address, addr->val, sizeof(ev->address));
+    ev->type = (u8_t) (indication ? 0x02 : 0x01);
+    ev->handle = sys_cpu_to_le16(attr_handle);
+    ev->data_length = sys_cpu_to_le16(os_mbuf_len(om));
+    os_mbuf_appendfrom(buf, om, 0, os_mbuf_len(om));
+
+    tester_send_buf(BTP_SERVICE_ID_GATT, GATT_EV_NOTIFICATION,
+            CONTROLLER_INDEX, buf);
 
 fail:
-	os_mbuf_free_chain(buf);
-	return 0;
-}
-
-void notify_test_stop(void)
-{
-	os_callout_stop(&notify_tx_timer);
-}
-
-void notify_test_reset(void)
-{
-	int rc;
-
-	rc = os_callout_reset(&notify_tx_timer, OS_TICKS_PER_SEC);
-	assert(rc == 0);
-}
-
-void notify_test(struct os_event *ev)
-{
-	static uint8_t ntf[1];
-	struct os_mbuf *om;
-	int rc;
-
-	if (!notify_state && !indicate_state) {
-		notify_test_stop();
-		notify_value = 90;
-		return;
-	}
-
-	ntf[0] = notify_value;
-
-	notify_value++;
-	if (notify_value == 160) {
-		notify_value = 90;
-	}
-
-	om = ble_hs_mbuf_from_flat(ntf, sizeof(ntf));
-
-	if (notify_state) {
-		rc = ble_gattc_notify_custom(myconn_handle, notify_handle, om);
-		assert(rc == 0);
-	}
-
-	if (indicate_state) {
-		rc = ble_gattc_indicate_custom(myconn_handle, notify_handle, om);
-		assert(rc == 0);
-	}
-}
-
-int tester_gatt_subscribe_ev(u16_t conn_handle, u16_t attr_handle, u8_t reason,
-			     u8_t prev_notify, u8_t cur_notify,
-			     u8_t prev_indicate, u8_t cur_indicate)
-{
-	SYS_LOG_DBG("");
-	myconn_handle = conn_handle;
-
-	if (cur_notify == 0 && cur_indicate == 0) {
-		SYS_LOG_INF("Unsubscribed");
-		memset(&subscribe_params, 0, sizeof(subscribe_params));
-		return 0;
-	}
-
-	if (cur_notify) {
-		SYS_LOG_INF("Subscribed to notifications");
-		if (attr_handle == notify_handle) {
-			notify_state = cur_notify;
-		}
-	}
-
-	if (cur_indicate) {
-		SYS_LOG_INF("Subscribed to indications");
-		if (attr_handle == notify_handle) {
-			indicate_state = cur_indicate;
-		}
-	}
-
-
-	if (notify_state || indicate_state) {
-		notify_test_reset();
-	} else {
-		notify_test_stop();
-	}
-
-	return 0;
+    os_mbuf_free_chain(buf);
+    return 0;
+}
+
+void
+notify_test_stop(void)
+{
+    os_callout_stop(&notify_tx_timer);
+}
+
+void
+notify_test_reset(void)
+{
+    int rc;
+
+    rc = os_callout_reset(&notify_tx_timer, OS_TICKS_PER_SEC);
+    assert(rc == 0);
+}
+
+void
+notify_test(struct os_event *ev)
+{
+    static uint8_t ntf[1];
+    struct os_mbuf *om;
+    int rc;
+
+    if (!notify_state && !indicate_state) {
+        notify_test_stop();
+        notify_value = 90;
+        return;
+    }
+
+    ntf[0] = notify_value;
+
+    notify_value++;
+    if (notify_value == 160) {
+        notify_value = 90;
+    }
+
+    om = ble_hs_mbuf_from_flat(ntf, sizeof(ntf));
+
+    if (notify_state) {
+        rc = ble_gattc_notify_custom(myconn_handle, notify_handle, om);
+        assert(rc == 0);
+    }
+
+    if (indicate_state) {
+        rc = ble_gattc_indicate_custom(myconn_handle, notify_handle, om);
+        assert(rc == 0);
+    }
+}
+
+int
+tester_gatt_subscribe_ev(u16_t conn_handle, u16_t attr_handle, u8_t reason,
+                         u8_t prev_notify, u8_t cur_notify,
+                         u8_t prev_indicate, u8_t cur_indicate)
+{
+    SYS_LOG_DBG("");
+    myconn_handle = conn_handle;
+
+    if (cur_notify == 0 && cur_indicate == 0) {
+        SYS_LOG_INF("Unsubscribed");
+        memset(&subscribe_params, 0, sizeof(subscribe_params));
+        return 0;
+    }
+
+    if (cur_notify) {
+        SYS_LOG_INF("Subscribed to notifications");
+        if (attr_handle == notify_handle) {
+            notify_state = cur_notify;
+        }
+    }
+
+    if (cur_indicate) {
+        SYS_LOG_INF("Subscribed to indications");
+        if (attr_handle == notify_handle) {
+            indicate_state = cur_indicate;
+        }
+    }
+
+
+    if (notify_state || indicate_state) {
+        notify_test_reset();
+    } else {
+        notify_test_stop();
+    }
+
+    return 0;
 }
 
 void
 gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg)
 {
-	char buf[BLE_UUID_STR_LEN];
-
-	switch (ctxt->op) {
-	case BLE_GATT_REGISTER_OP_SVC:
-		MODLOG_DFLT(DEBUG, "registered service %s with handle=%d\n",
-		ble_uuid_to_str(ctxt->svc.svc_def->uuid, buf),
-				ctxt->svc.handle);
-		break;
-
-	case BLE_GATT_REGISTER_OP_CHR:
-		MODLOG_DFLT(DEBUG, "registering characteristic %s with "
-			    "def_handle=%d val_handle=%d\n",
-			    ble_uuid_to_str(ctxt->chr.chr_def->uuid, buf),
-			    ctxt->chr.def_handle,
-			    ctxt->chr.val_handle);
-	break;
-
-	case BLE_GATT_REGISTER_OP_DSC:
-		MODLOG_DFLT(DEBUG, "registering descriptor %s with handle=%d\n",
-			    ble_uuid_to_str(ctxt->dsc.dsc_def->uuid, buf),
-			    ctxt->dsc.handle);
-		break;
-
-	default:
-		assert(0);
-		break;
-	}
-}
-
-int gatt_svr_init(void)
-{
-	int rc;
-
-	rc = ble_gatts_count_cfg(gatt_svr_inc_svcs);
-	if (rc != 0) {
-		return rc;
-	}
-
-	rc = ble_gatts_add_svcs(gatt_svr_inc_svcs);
-	if (rc != 0) {
-		return rc;
-	}
-
-	rc = ble_gatts_count_cfg(gatt_svr_svcs);
-	if (rc != 0) {
-		return rc;
-	}
-
-	rc = ble_gatts_add_svcs(gatt_svr_svcs);
-	if (rc != 0) {
-		return rc;
-	}
-
-	return 0;
-}
-
-u8_t tester_init_gatt(void)
-{
-	os_callout_init(&notify_tx_timer, os_eventq_dflt_get(),
-			notify_test, NULL);
-
-	return BTP_STATUS_SUCCESS;
-}
-
-u8_t tester_unregister_gatt(void)
-{
-	return BTP_STATUS_SUCCESS;
-}
+    char buf[BLE_UUID_STR_LEN];
+
+    switch (ctxt->op) {
+    case BLE_GATT_REGISTER_OP_SVC:
+        MODLOG_DFLT(DEBUG, "registered service %s with handle=%d\n",
+        ble_uuid_to_str(ctxt->svc.svc_def->uuid, buf),
+                ctxt->svc.handle);
+        break;
+
+    case BLE_GATT_REGISTER_OP_CHR:
+        MODLOG_DFLT(DEBUG, "registering characteristic %s with "
+                "def_handle=%d val_handle=%d\n",
+                ble_uuid_to_str(ctxt->chr.chr_def->uuid, buf),
+                ctxt->chr.def_handle,
+                ctxt->chr.val_handle);
+        break;
+
+    case BLE_GATT_REGISTER_OP_DSC:
+        MODLOG_DFLT(DEBUG, "registering descriptor %s with handle=%d\n",
+                ble_uuid_to_str(ctxt->dsc.dsc_def->uuid, buf),
+                ctxt->dsc.handle);
+        break;
+
+    default:
+        assert(0);
+        break;
+    }
+}
+
+int
+gatt_svr_init(void)
+{
+    int rc;
+
+    rc = ble_gatts_count_cfg(gatt_svr_inc_svcs);
+    if (rc != 0) {
+        return rc;
+    }
+
+    rc = ble_gatts_add_svcs(gatt_svr_inc_svcs);
+    if (rc != 0) {
+        return rc;
+    }
+
+    rc = ble_gatts_count_cfg(gatt_svr_svcs);
+    if (rc != 0) {
+        return rc;
+    }
+
+    rc = ble_gatts_add_svcs(gatt_svr_svcs);
+    if (rc != 0) {
+        return rc;
+    }
+
+    return 0;
+}
+
+u8_t
+tester_init_gatt(void)
+{
+    os_callout_init(&notify_tx_timer, os_eventq_dflt_get(),
+            notify_test, NULL);
+
+    return BTP_STATUS_SUCCESS;
+}
+
+u8_t
+tester_unregister_gatt(void)
+{
+    return BTP_STATUS_SUCCESS;
+}

apache-mynewt-bot avatar Jul 20 '20 11:07 apache-mynewt-bot

This isn't compiling because it relies on https://github.com/apache/mynewt-nimble/pull/773/commits

KKopyscinski avatar Aug 31 '20 12:08 KKopyscinski

this is WIP until EATT is merged

KKopyscinski avatar Aug 04 '23 10:08 KKopyscinski

This was added to https://github.com/apache/mynewt-nimble/pull/1549

KKopyscinski avatar Aug 04 '23 11:08 KKopyscinski