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:
Andrei Emeltchenko 2014-06-30 11:14:55 +03:00 committed by Szymon Janc
parent 14893bb954
commit b3372a4c48

View File

@ -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;