<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/100394/cant-get-indications-to-work-with-nrf-connect</link><description>Im trying to send a large tet file over INDICATION to nRFConnect app on android. The first indication gets through but subsequent dont. Indicating that nRF Connect app is not returning that it got the message. 
 My setup is 
 
 BT_GATT_SERVICE_DEFINE</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 05 Jun 2023 13:19:06 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/100394/cant-get-indications-to-work-with-nrf-connect" /><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429313?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 13:19:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:390413ba-8f0f-4e9d-af34-7d3b68a23779</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Yes, you can use a semaphore to signal the main() or some other thread to start sending the indication packets. The point is that you should not run the blocking send from the Bluetooth workqueue thread.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429279?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 11:50:45 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:532213e9-982e-45e3-9384-c0ee4cff1d90</guid><dc:creator>IvanR</dc:creator><description>&lt;p&gt;There is no other way of doing this? this will add a lot of unneeded complexity to my code. Coudnt the&amp;nbsp;&lt;span&gt;semaphore&amp;nbsp; be used?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429235?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 10:12:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f3268eb1-3f7d-4f5e-b2e3-518d7bed1863</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;The problem is that you are&amp;nbsp;executing a function that never returns&amp;nbsp;from the BT RX &lt;a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/kernel/services/threads/workqueue.html#system-workqueue"&gt;workqueue&lt;/a&gt; thread. This will prevent&amp;nbsp;subsequent BLE packets from being processed by the Bluetooth host.&amp;nbsp;&amp;nbsp;I&amp;#39;d suggest you send the indications from your main loop instead.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429225?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 09:44:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d687aee8-9b6f-46c1-b65f-dad9780c046c</guid><dc:creator>IvanR</dc:creator><description>&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/5808.test.zip"&gt;devzone.nordicsemi.com/.../5808.test.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;nRF Connect SDK 2.3.0&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429223?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 09:34:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4c635572-9e71-402d-82f9-8d487c456fa2</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Please upload the project folder as a .zip and let me know what SDK version you use.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429222?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 09:27:00 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0e10cb3f-3a2f-4e8a-900f-3c35dc24f24b</guid><dc:creator>IvanR</dc:creator><description>&lt;p&gt;the board is nRF5340 DK, Button Service example&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429221?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 09:26:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b423e110-683b-48b7-a1bf-13215ee85a92</guid><dc:creator>IvanR</dc:creator><description>&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#include &amp;lt;zephyr/types.h&amp;gt;
#include &amp;lt;stddef.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt; 
#include &amp;lt;errno.h&amp;gt;
#include &amp;lt;zephyr/sys/printk.h&amp;gt;
#include &amp;lt;zephyr/sys/byteorder.h&amp;gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/drivers/gpio.h&amp;gt;
#include &amp;lt;zephyr/logging/log.h&amp;gt;

#include &amp;lt;zephyr/bluetooth/bluetooth.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/hci.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/conn.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/uuid.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/gatt.h&amp;gt;
#include &amp;quot;button_svc.h&amp;quot;
#include &amp;quot;led_svc.h&amp;quot;

#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;zephyr/device.h&amp;gt;
#include &amp;lt;zephyr/drivers/sensor.h&amp;gt;

static uint8_t indicating;
static struct bt_gatt_indicate_params ind_params;

#define DEVICE_NAME &amp;quot;Test1&amp;quot;
#define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1)
#define ADV_LEN 12

#define VERSION_MAJOR 0
#define VERSION_MINOR 1
#define VERSION_PATCH 0

/* The devicetree node identifier for the &amp;quot;led0&amp;quot; alias. */
#define SLEEP_TIME_MS 1000
#define LED0_NODE DT_ALIAS(led0)
#define LED1_NODE DT_ALIAS(led1)
#define LED2_NODE DT_ALIAS(led2)
#define LED3_NODE DT_ALIAS(led3)

static const struct gpio_dt_spec led[] = {
		GPIO_DT_SPEC_GET(LED0_NODE, gpios),
		GPIO_DT_SPEC_GET(LED1_NODE, gpios),
		GPIO_DT_SPEC_GET(LED3_NODE, gpios),
		GPIO_DT_SPEC_GET(LED2_NODE, gpios)};

LOG_MODULE_REGISTER(main);

static void testLed();
const char *banner(void);
void sendStringInChunks(const char *inputString, size_t maxLength);
void sendStringInChunksIndicate(const char *inputString, size_t maxLength);

/* Button value. */
static uint16_t but_val;

/* BLE connection */
struct bt_conn *conn;
static struct bt_uuid_128 st_service_uuid = BT_UUID_INIT_128(BT_UUID_128_ENCODE(0x25AE1441, 0x05D3, 0x4C5B, 0x8281, 0x93D4E07420CF));
static struct bt_uuid_128 commands_uuid = BT_UUID_INIT_128(BT_UUID_128_ENCODE(0x25AE1442, 0x05D3, 0x4C5B, 0x8281, 0x93D4E07420CF));
static struct bt_uuid_128 notify_uuid = BT_UUID_INIT_128(BT_UUID_128_ENCODE(0x25AE1443, 0x05D3, 0x4C5B, 0x8281, 0x93D4E07420CF));
static struct bt_uuid_128 l_char_uuid = BT_UUID_INIT_128(BT_UUID_128_ENCODE(0x25AE1444, 0x05D3, 0x4C5B, 0x8281, 0x93D4E07420CF));
static struct bt_uuid_128 batt_uuid = BT_UUID_INIT_128(BT_UUID_128_ENCODE(0x25AE1445, 0x05D3, 0x4C5B, 0x8281, 0x93D4E07420CF));
static struct bt_uuid_128 indicate_uuid = BT_UUID_INIT_128(BT_UUID_128_ENCODE(0x25AE1446, 0x05D3, 0x4C5B, 0x8281, 0x93D4E07420CF));

static ssize_t recv(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags);

static const struct bt_data ad[] = {
		BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
		BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN),
		BT_DATA(BT_DATA_UUID128_ALL, st_service_uuid.val, 16)};

/* Notification state */
volatile bool notify_enable;
volatile bool batt_notify_enable;
volatile bool notifyl_enable;
volatile bool indicate_enabled;

static void notify_ccc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value)
{
	ARG_UNUSED(attr);
	notify_enable = (value == BT_GATT_CCC_NOTIFY);
	LOG_INF(&amp;quot;Notification %s&amp;quot;, notify_enable ? &amp;quot;enabled&amp;quot; : &amp;quot;disabled&amp;quot;);
}

static void batt_ccc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value)
{
	ARG_UNUSED(attr);
	batt_notify_enable = (value == BT_GATT_CCC_NOTIFY);
	LOG_INF(&amp;quot;Battery Notification %s&amp;quot;, notify_enable ? &amp;quot;enabled&amp;quot; : &amp;quot;disabled&amp;quot;);
}

static void l_ccc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value)
{
	ARG_UNUSED(attr);
	notifyl_enable = (value == BT_GATT_CCC_NOTIFY);
	LOG_INF(&amp;quot;Notification %s&amp;quot;, notifyl_enable ? &amp;quot;enabled&amp;quot; : &amp;quot;disabled&amp;quot;);
	// Check if notifications are enabled or disabled
	if (value == BT_GATT_CCC_NOTIFY)
	{
		// Notifications enabled
	}
	else if (value == 0)
	{
		// Notifications disabled
	}
}

static void indicate_ccc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value)
{
	// ARG_UNUSED(attr);
	indicate_enabled = (value == BT_GATT_CCC_INDICATE);
	LOG_INF(&amp;quot;Indicate %s&amp;quot;, indicate_enabled ? &amp;quot;enabled&amp;quot; : &amp;quot;disabled&amp;quot;);
}

static void indicate_confirm_cb(struct bt_conn *conn, struct bt_gatt_indicate_params *params, uint8_t err)
{
	printk(&amp;quot;HERE2\n&amp;quot;);
	if (err)
	{
		printk(&amp;quot;Indication confirmation error: %d\n&amp;quot;, err);
	}
}

static void indicate_destroy(struct bt_gatt_indicate_params *params)
{
	printk(&amp;quot;Indication complete\n&amp;quot;);
	indicating = 0U;
}

/* The embedded board is acting as GATT server.
 * The ST BLE Android app is the BLE GATT client.
 */

/* ST BLE Sensor GATT services and characteristic */

BT_GATT_SERVICE_DEFINE(stsensor_svc,
											 BT_GATT_PRIMARY_SERVICE(&amp;amp;st_service_uuid),
											 BT_GATT_CHARACTERISTIC(&amp;amp;commands_uuid.uuid, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE, NULL, recv, NULL),
											 BT_GATT_CHARACTERISTIC(&amp;amp;notify_uuid.uuid, BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, NULL, NULL, NULL),
											 BT_GATT_CCC(notify_ccc_cfg_changed, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE),
											 BT_GATT_CHARACTERISTIC(&amp;amp;l_char_uuid.uuid, BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ, NULL, NULL, NULL),
											 BT_GATT_CCC(l_ccc_cfg_changed, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE),
											 BT_GATT_CHARACTERISTIC(&amp;amp;batt_uuid.uuid, BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ, NULL, NULL, NULL),
											 BT_GATT_CCC(batt_ccc_cfg_changed, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE),
											 BT_GATT_CHARACTERISTIC(&amp;amp;indicate_uuid.uuid, BT_GATT_CHRC_INDICATE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, NULL, NULL, NULL),
											 BT_GATT_CCC(indicate_ccc_cfg_changed, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE));

static void bt_ready(int err)
{
	if (err)
	{
		LOG_ERR(&amp;quot;Bluetooth init failed (err %d)&amp;quot;, err);
		return;
	}
	LOG_INF(&amp;quot;Bluetooth initialized&amp;quot;);
	/* Start advertising */
	err = bt_le_adv_start(BT_LE_ADV_CONN, ad, ARRAY_SIZE(ad), NULL, 0);
	if (err)
	{
		LOG_ERR(&amp;quot;Advertising failed to start (err %d)&amp;quot;, err);
		return;
	}

	LOG_INF(&amp;quot;Configuration mode: waiting connections...&amp;quot;);
}

static void connected(struct bt_conn *connected, uint8_t err)
{
	if (err)
	{
		LOG_ERR(&amp;quot;Connection failed (err %u)&amp;quot;, err);
	}
	else
	{
		LOG_INF(&amp;quot;Connected&amp;quot;);
		if (!conn)
		{
			conn = bt_conn_ref(connected);
		}
	}
}

static void disconnected(struct bt_conn *disconn, uint8_t reason)
{
	if (conn)
	{
		bt_conn_unref(conn);
		conn = NULL;
	}

	LOG_INF(&amp;quot;Disconnected (reason %u)&amp;quot;, reason);
}

BT_CONN_CB_DEFINE(conn_callbacks) = {
		.connected = connected,
		.disconnected = disconnected,
};

static void test_indicate()
{
	while (1)
	{
		const char *data = &amp;quot;Hello, client!&amp;quot;;
		sendStringInChunksIndicate(data, 20);
		k_sleep(K_SECONDS(1));
	}
}

static ssize_t recv(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags)
{
	char str_data[len + 1];
	snprintf(str_data, sizeof(str_data), &amp;quot;%.*s&amp;quot;, len, (const char *)buf); // Convert the received data to a string
	LOG_INF(&amp;quot;Received data: %s&amp;quot;, str_data);
	if (strcmp(str_data, &amp;quot;led&amp;quot;) == 0)
	{
		testLed();
	}
	else if (strcmp(str_data, &amp;quot;info2&amp;quot;) == 0)
	{
		test_indicate();
	}

	return 0;
}

static void testLed()
{
	int ret;
	int num_leds = sizeof(led) / sizeof(led[0]);

	for (int i = 0; i &amp;lt; num_leds; i++)
	{
		if (!device_is_ready(led[i].port))
		{
			return;
		}

		ret = gpio_pin_configure_dt(&amp;amp;led[i], GPIO_OUTPUT_ACTIVE);
		if (ret &amp;lt; 0)
		{
			return;
		}
	}

	for (int i = 0; i &amp;lt; num_leds; i++)
	{
		printf(&amp;quot;LED %d ON\n&amp;quot;, i);
		ret = gpio_pin_set_dt(&amp;amp;led[i], 1);
		if (ret &amp;lt; 0)
		{
			return;
		}
		k_msleep(SLEEP_TIME_MS);
		printf(&amp;quot;LED %d OFF\n&amp;quot;, i);
		ret = gpio_pin_set_dt(&amp;amp;led[i], 0);
		if (ret &amp;lt; 0)
		{
			return;
		}
	}
}

void main(void)
{
	int err;

	err = led_init();
	if (err)
	{
		return;
	}

	/* Initialize the Bluetooth Subsystem */
	err = bt_enable(bt_ready);
	if (err)
	{
		LOG_ERR(&amp;quot;Bluetooth init failed (err %d)&amp;quot;, err);
	}

	testLed();

}

void sendStringInChunksIndicate(const char *inputString, size_t maxLength)
{
	if (indicate_enabled &amp;amp;&amp;amp; !indicating)
	{
		printk(&amp;quot;Sending Indication\n&amp;quot;);
		indicating = 1U;
		ind_params.attr = &amp;amp;stsensor_svc.attrs[13]; // Indicate attribute index in the service
		ind_params.func = indicate_confirm_cb;
		ind_params.destroy = indicate_destroy;
		ind_params.data = inputString;				// Pointer to the data to be indicated
		ind_params.len = strlen(inputString); // Length of the data

		int err = bt_gatt_indicate(conn, &amp;amp;ind_params);
		if (err)
		{
			printk(&amp;quot;Indicate failed (err %d)\n&amp;quot;, err);
			indicating = 0U;
		}
	}
}

&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429216?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 09:05:42 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f6be5f53-094f-4fa5-8ba9-927bd25bc262</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;I don&amp;#39;t see any reason why this should not work. Could you please provide me with a minimal version of your application so that I can try to debug the issue here?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429215?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 09:02:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:19df5f09-b90a-41f0-a06e-3e990177d1b9</guid><dc:creator>IvanR</dc:creator><description>&lt;p&gt;no,&lt;/p&gt;
&lt;p&gt;when while(1) and k_sleep are uncommented its not working. After a while, there is a TIMEOUT and ccc is disabled (not by my code)&lt;/p&gt;
&lt;p&gt;output:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[00:00:49.383,697] [1;31m&amp;lt;err&amp;gt; bt_att: att_timeout: ATT Timeout[0m&lt;br /&gt;HERE2&lt;br /&gt;Indication confirmation error: 14&lt;br /&gt;Indication complete&lt;br /&gt;[00:00:49.383,850] [0m&amp;lt;inf&amp;gt; main: indicate_ccc_cfg_changed: Indicate disabled[0m&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429204?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 08:58:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:12ec9bdc-e397-403c-967c-77980148196a</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Does it work if you uncomment while(1) and k_sleep()? Without the k_sleep(), the Bluetooth thread will become blocked.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429197?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 08:24:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:10a1786b-51a8-46f8-afd6-67c7e9af6787</guid><dc:creator>IvanR</dc:creator><description>&lt;p&gt;I have this function&lt;/p&gt;
&lt;div&gt;&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendStringInChunksIndicate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;char&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;inputString&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indicate_enabled&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;indicating&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;indicating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;U&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;attr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;stsensor_svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;span&gt; // Indicate attribute index in the service&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indicate_confirm_cb&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;destroy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indicate_destroy&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputString&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Pointer to the data to be indicated&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;strlen&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputString&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;span&gt; // Length of the data&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bt_gatt_indicate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;conn&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;printk&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Indicate failed (err &lt;/span&gt;&lt;span&gt;%d&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;indicating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;U&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;which is called by&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_indicate&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;// while (1)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;// {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;//k_sleep(K_SECONDS(1));&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;char&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Hello, client!&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;sendStringInChunksIndicate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;and it works, but as soon as I uncomment the While(1) it stops working.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;code&gt;&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/429143?ContentTypeID=1</link><pubDate>Mon, 05 Jun 2023 05:13:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fd2a4b41-a8cf-4b17-9938-d0c5beb54e7d</guid><dc:creator>IvanR</dc:creator><description>&lt;p&gt;&lt;span&gt;Zephyr peripheral_ht is working, but I literally copied it and its not working. Now Im racking my head what I did wrong&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/428995?ContentTypeID=1</link><pubDate>Fri, 02 Jun 2023 11:57:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:59a9e06c-6149-428c-810d-2865a447ea07</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;The Android Bluetooth stack automatically takes care of acknowledging/confirming all indication packets received by the phone, so the app you use should not be relevant. To confirm that there is no issue on the phone side, you can repeat the test with another SDK sample that sends indications, such as the Zephyr peripheral_ht sample.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;Best regards,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Vidar&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: cant get Indications to work with NRF Connect</title><link>https://devzone.nordicsemi.com/thread/428974?ContentTypeID=1</link><pubDate>Fri, 02 Jun 2023 11:04:41 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7d8cab08-3555-4467-9fdf-544ee411ac0a</guid><dc:creator>IvanR</dc:creator><description>&lt;p&gt;I even tried&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indicate_confirm_cb&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bt_conn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;conn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bt_gatt_indicate_params&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;params&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;uint8_t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;printk&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;HERE2&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;printk&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Indication confirmation error: &lt;/span&gt;&lt;span&gt;%d&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indicate_destroy&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bt_gatt_indicate_params&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;params&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;printk&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Indication complete&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;indicating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;U&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendStringInChunksIndicate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;char&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;inputString&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indicating&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;printk&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;HERE&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;attr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;stsensor_svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indicate_confirm_cb&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;destroy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indicate_destroy&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;inputString&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sizeof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputString&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bt_gatt_indicate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;ind_params&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;LOG_ERR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;ERROR: &lt;/span&gt;&lt;span&gt;%d&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;indicating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;U&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;which is called when info2 is sent over notify:&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;strcmp&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str_data&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;info2&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indicate_enabled&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;k_sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;K_SECONDS&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;char&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Hello, client!&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;sendStringInChunksIndicate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp; }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;in nRF Connect android app i can see the first message but no subsequent indications are sent and the first times out&amp;nbsp;m&amp;lt;err&amp;gt; bt_att: att_timeout: ATT Timeout&lt;br /&gt;Indication confirmation error: 14&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>