android/gatt: Fix handling advertising state

This patch fixes enabling advertising.
It was not possible to enable it if we had server registered
which is on listen_apps list but does not trigger advertising.

This patch introduces static counter to track number of clients
requested advertising.
This commit is contained in:
Lukasz Rymanowski 2014-05-14 13:26:34 +02:00 committed by Szymon Janc
parent 68c6c26512
commit 533301a631

View File

@ -167,6 +167,7 @@ struct app_connection {
static struct ipc *hal_ipc = NULL;
static bdaddr_t adapter_addr;
static bool scanning = false;
static unsigned int advertising_cnt = 0;
static struct queue *gatt_apps = NULL;
static struct queue *gatt_devices = NULL;
@ -1374,6 +1375,10 @@ static void set_advertising_cb(uint8_t status, void *user_data)
send_client_listen_notify(l->client_id, status);
/* In case of success update advertising state*/
if (!status)
advertising_cnt = l->start ? 1 : 0;
/*
* Let's remove client from the list in two cases
* 1. Start failed
@ -1418,7 +1423,8 @@ static void handle_client_listen(const void *buf, uint16_t len)
}
/* If listen is already on just return success*/
if (queue_length(listen_apps) > 1) {
if (advertising_cnt > 0) {
advertising_cnt++;
status = HAL_STATUS_SUCCESS;
goto reply;
}
@ -1435,7 +1441,8 @@ static void handle_client_listen(const void *buf, uint16_t len)
* In case there is more listening clients don't stop
* advertising
*/
if (queue_length(listen_apps) > 1) {
if (advertising_cnt > 1) {
advertising_cnt--;
queue_remove(listen_apps,
INT_TO_PTR(cmd->client_if));
status = HAL_STATUS_SUCCESS;