mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-12-29 13:53:35 +08:00
android/health: Add handling incoming connection
Add support for normal data channel creation. Also add search helper for searching apps for suitable mdepid.
This commit is contained in:
parent
14893bb954
commit
b3372a4c48
@ -329,6 +329,38 @@ static struct health_channel *search_channel_by_id(uint16_t id)
|
||||
return search.channel;
|
||||
}
|
||||
|
||||
struct app_search {
|
||||
uint8_t mdepid;
|
||||
struct health_app *app;
|
||||
};
|
||||
|
||||
static void app_search_mdep(void *data, void *user_data)
|
||||
{
|
||||
struct health_app *app = data;
|
||||
struct app_search *search = user_data;
|
||||
|
||||
if (search->app)
|
||||
return;
|
||||
|
||||
if (queue_find(app->mdeps, match_mdep_by_id,
|
||||
INT_TO_PTR(search->mdepid)))
|
||||
search->app = app;
|
||||
}
|
||||
|
||||
static struct health_app *search_app_by_mdepid(uint8_t mdepid)
|
||||
{
|
||||
struct app_search search;
|
||||
|
||||
DBG("");
|
||||
|
||||
search.mdepid = mdepid;
|
||||
search.app = NULL;
|
||||
|
||||
queue_foreach(apps, app_search_mdep, &search);
|
||||
|
||||
return search.app;
|
||||
}
|
||||
|
||||
static int register_service_protocols(sdp_record_t *rec,
|
||||
struct health_app *app)
|
||||
{
|
||||
@ -1277,22 +1309,24 @@ static struct health_channel *connect_channel(struct mcap_mcl *mcl,
|
||||
|
||||
mcap_mcl_get_addr(mcl, &addr);
|
||||
|
||||
/* TODO: Search app for mdepid */
|
||||
|
||||
if (mdepid == MDEP_ECHO) {
|
||||
if (mdepid == MDEP_ECHO)
|
||||
/* For echo service take last app */
|
||||
app = queue_peek_tail(apps);
|
||||
if (!app)
|
||||
return NULL;
|
||||
else
|
||||
app = search_app_by_mdepid(mdepid);
|
||||
|
||||
device = get_device(app, (uint8_t *) &addr);
|
||||
if (!device)
|
||||
return NULL;
|
||||
|
||||
channel = create_channel(app, mdepid, device);
|
||||
if (!app) {
|
||||
DBG("No app found for mdepid %u", mdepid);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Device is created here */
|
||||
device = get_device(app, (uint8_t *) &addr);
|
||||
if (!device)
|
||||
return NULL;
|
||||
|
||||
channel = create_channel(app, mdepid, device);
|
||||
|
||||
/* Channel is assigned here after creation */
|
||||
mcl->cb->user_data = channel;
|
||||
|
||||
return channel;
|
||||
|
Loading…
Reference in New Issue
Block a user