mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2025-01-01 09:04:55 +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;
|
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,
|
static int register_service_protocols(sdp_record_t *rec,
|
||||||
struct health_app *app)
|
struct health_app *app)
|
||||||
{
|
{
|
||||||
@ -1277,22 +1309,24 @@ static struct health_channel *connect_channel(struct mcap_mcl *mcl,
|
|||||||
|
|
||||||
mcap_mcl_get_addr(mcl, &addr);
|
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 */
|
/* For echo service take last app */
|
||||||
app = queue_peek_tail(apps);
|
app = queue_peek_tail(apps);
|
||||||
if (!app)
|
else
|
||||||
return NULL;
|
app = search_app_by_mdepid(mdepid);
|
||||||
|
|
||||||
device = get_device(app, (uint8_t *) &addr);
|
if (!app) {
|
||||||
if (!device)
|
DBG("No app found for mdepid %u", mdepid);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
channel = create_channel(app, mdepid, device);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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;
|
mcl->cb->user_data = channel;
|
||||||
|
|
||||||
return channel;
|
return channel;
|
||||||
|
Loading…
Reference in New Issue
Block a user