From 5a7410e9e4b977b2412047e22ddd53930ad1e058 Mon Sep 17 00:00:00 2001 From: Simon Fels Date: Mon, 5 Oct 2015 13:33:09 +0200 Subject: [PATCH] handsfree-audio: add type for our audio cards When registering audio cards for the handsfree and gateway roles we need a way for our users to differentiate between both to decide which of them they start using for their purpose. --- doc/handsfree-audio-api.txt | 4 ++++ include/handsfree-audio.h | 10 ++++++++-- plugins/hfp_hf_bluez5.c | 4 +++- src/handsfree-audio.c | 24 ++++++++++++++++++++++-- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/doc/handsfree-audio-api.txt b/doc/handsfree-audio-api.txt index 89b5aab5..d82035c2 100644 --- a/doc/handsfree-audio-api.txt +++ b/doc/handsfree-audio-api.txt @@ -89,6 +89,10 @@ Properties string RemoteAddress [readonly] Bluetooth address of the local adapter. + string Type [readonly] + + Type of the card. Valid values are "gateway" or + "handsfree". Handsfree Audio Agent hierarchy [experimental] =============================== diff --git a/include/handsfree-audio.h b/include/handsfree-audio.h index bfb84803..0e37daec 100644 --- a/include/handsfree-audio.h +++ b/include/handsfree-audio.h @@ -30,6 +30,11 @@ extern "C" { struct ofono_handsfree_card; +enum ofono_handsfree_card_type { + OFONO_HANDSFREE_CARD_TYPE_HANDSFREE, + OFONO_HANDSFREE_CARD_TYPE_GATEWAY, +}; + typedef void (*ofono_handsfree_card_connect_cb_t)( const struct ofono_error *error, void *data); @@ -45,8 +50,9 @@ struct ofono_handsfree_card_driver { }; struct ofono_handsfree_card *ofono_handsfree_card_create(unsigned int vendor, - const char *driver, - void *data); + enum ofono_handsfree_card_type type, + const char *driver, + void *data); int ofono_handsfree_card_register(struct ofono_handsfree_card *card); void ofono_handsfree_card_remove(struct ofono_handsfree_card *card); ofono_bool_t ofono_handsfree_card_set_codec(struct ofono_handsfree_card *card, diff --git a/plugins/hfp_hf_bluez5.c b/plugins/hfp_hf_bluez5.c index 713c7896..6ae98b3c 100644 --- a/plugins/hfp_hf_bluez5.c +++ b/plugins/hfp_hf_bluez5.c @@ -589,7 +589,9 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, if (version >= HFP_VERSION_1_6) driver = HFP16_HF_DRIVER; - hfp->card = ofono_handsfree_card_create(0, driver, hfp); + hfp->card = ofono_handsfree_card_create(0, + OFONO_HANDSFREE_CARD_TYPE_HANDSFREE, + driver, hfp); ofono_handsfree_card_set_data(hfp->card, hfp); ofono_handsfree_card_set_local(hfp->card, local); diff --git a/src/handsfree-audio.c b/src/handsfree-audio.c index c990cc34..8db99e19 100644 --- a/src/handsfree-audio.c +++ b/src/handsfree-audio.c @@ -45,6 +45,7 @@ #define HFP_AUDIO_CARD_INTERFACE OFONO_SERVICE ".HandsfreeAudioCard" struct ofono_handsfree_card { + enum ofono_handsfree_card_type type; char *remote; char *local; char *path; @@ -69,6 +70,17 @@ static ofono_bool_t has_wideband = FALSE; static int defer_setup = 1; static ofono_bool_t transparent_sco = FALSE; +static const char *card_type_to_string(enum ofono_handsfree_card_type type) +{ + switch (type) { + case OFONO_HANDSFREE_CARD_TYPE_HANDSFREE: + return "handsfree"; + case OFONO_HANDSFREE_CARD_TYPE_GATEWAY: + return "gateway"; + } + return ""; +} + static uint16_t codec2setting(uint8_t codec) { switch (codec) { @@ -255,6 +267,12 @@ static int sco_init(void) static void card_append_properties(struct ofono_handsfree_card *card, DBusMessageIter *dict) { + const char *type; + + type = card_type_to_string(card->type); + ofono_dbus_dict_append(dict, "Type", + DBUS_TYPE_STRING, &type); + ofono_dbus_dict_append(dict, "RemoteAddress", DBUS_TYPE_STRING, &card->remote); @@ -395,14 +413,16 @@ static const GDBusSignalTable card_signals[] = { }; struct ofono_handsfree_card *ofono_handsfree_card_create(unsigned int vendor, - const char *driver, - void *data) + enum ofono_handsfree_card_type type, + const char *driver, + void *data) { struct ofono_handsfree_card *card; GSList *l; card = g_new0(struct ofono_handsfree_card, 1); + card->type = type; card->selected_codec = HFP_CODEC_CVSD; card_list = g_slist_prepend(card_list, card);