android: Start Android Bluetooth daemon

Start Android Bluetooth daemon from HAL init(). Make sure
that daemon is in "running" state.
This commit is contained in:
Andrei Emeltchenko 2013-10-14 15:56:14 +03:00 committed by Johan Hedberg
parent 7999518d3f
commit e6ad61d3b4

View File

@ -23,11 +23,16 @@
#include <hardware/bluetooth.h> #include <hardware/bluetooth.h>
#include <hardware/bt_sock.h> #include <hardware/bt_sock.h>
#include <cutils/sockets.h>
#include <cutils/properties.h>
#define LOG_TAG "BlueZ" #define LOG_TAG "BlueZ"
#include <cutils/log.h> #include <cutils/log.h>
#include "hal.h" #include "hal.h"
#define SERVICE_NAME "bluetoothd"
bt_callbacks_t *bt_hal_cbacks = NULL; bt_callbacks_t *bt_hal_cbacks = NULL;
static bool interface_ready(void) static bool interface_ready(void)
@ -35,6 +40,33 @@ static bool interface_ready(void)
return bt_hal_cbacks != NULL; return bt_hal_cbacks != NULL;
} }
static bool start_bt_daemon(void)
{
int tries = 40; /* wait 4 seconds for completion */
ALOGD(__func__);
/* Start Android Bluetooth daemon service */
property_set("ctl.start", SERVICE_NAME);
while (tries-- > 0) {
char val[PROPERTY_VALUE_MAX];
if (property_get("init.svc." SERVICE_NAME, val, NULL)) {
if (!strcmp(val, "running")) {
ALOGI("Android BlueZ daemon started");
return true;
}
} else {
return false;
}
usleep(100000);
}
return false;
}
static int init(bt_callbacks_t *callbacks) static int init(bt_callbacks_t *callbacks)
{ {
ALOGD(__func__); ALOGD(__func__);
@ -42,10 +74,13 @@ static int init(bt_callbacks_t *callbacks)
if (interface_ready()) if (interface_ready())
return BT_STATUS_SUCCESS; return BT_STATUS_SUCCESS;
/* store reference to user callbacks */ if (start_bt_daemon()) {
bt_hal_cbacks = callbacks; /* TODO: open channel */
/* TODO: Init here bluezd task */ bt_hal_cbacks = callbacks;
return BT_STATUS_SUCCESS;
}
return BT_STATUS_UNSUPPORTED; return BT_STATUS_UNSUPPORTED;
} }