mirror of git://git.sysmocom.de/ofono
hfp_ag_bluez5: use codec negotiation
This commit is contained in:
parent
046f032b32
commit
2113b0a5ed
|
@ -38,6 +38,11 @@
|
||||||
#include <ofono/modem.h>
|
#include <ofono/modem.h>
|
||||||
#include <ofono/handsfree-audio.h>
|
#include <ofono/handsfree-audio.h>
|
||||||
|
|
||||||
|
typedef struct GAtChat GAtChat;
|
||||||
|
typedef struct GAtResult GAtResult;
|
||||||
|
|
||||||
|
#include "drivers/atmodem/atutil.h"
|
||||||
|
|
||||||
#include "hfp.h"
|
#include "hfp.h"
|
||||||
#include "bluez5.h"
|
#include "bluez5.h"
|
||||||
#include "bluetooth.h"
|
#include "bluetooth.h"
|
||||||
|
@ -69,12 +74,59 @@ static void hfp_card_remove(struct ofono_handsfree_card *card)
|
||||||
DBG("");
|
DBG("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void codec_negotiation_done_cb(int err, void *data)
|
||||||
|
{
|
||||||
|
struct cb_data *cbd = data;
|
||||||
|
ofono_handsfree_card_connect_cb_t cb = cbd->cb;
|
||||||
|
|
||||||
|
DBG("err %d", err);
|
||||||
|
|
||||||
|
if (err < 0) {
|
||||||
|
CALLBACK_WITH_FAILURE(cb, cbd->data);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We don't have anything to do at this point as when the
|
||||||
|
* codec negotiation succeeded the emulator internally
|
||||||
|
* already triggered the SCO connection setup of the
|
||||||
|
* handsfree card which also takes over the processing
|
||||||
|
* of the pending dbus message
|
||||||
|
*/
|
||||||
|
|
||||||
|
done:
|
||||||
|
g_free(cbd);
|
||||||
|
}
|
||||||
|
|
||||||
static void hfp_card_connect(struct ofono_handsfree_card *card,
|
static void hfp_card_connect(struct ofono_handsfree_card *card,
|
||||||
ofono_handsfree_card_connect_cb_t cb,
|
ofono_handsfree_card_connect_cb_t cb,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
|
int err;
|
||||||
|
struct ofono_emulator *em = ofono_handsfree_card_get_data(card);
|
||||||
|
struct cb_data *cbd;
|
||||||
|
|
||||||
DBG("");
|
DBG("");
|
||||||
ofono_handsfree_card_connect_sco(card);
|
|
||||||
|
cbd = cb_data_new(cb, data);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The emulator core will take care if the remote side supports
|
||||||
|
* codec negotiation or not.
|
||||||
|
*/
|
||||||
|
err = ofono_emulator_start_codec_negotiation(em,
|
||||||
|
codec_negotiation_done_cb, cbd);
|
||||||
|
if (err < 0) {
|
||||||
|
CALLBACK_WITH_FAILURE(cb, data);
|
||||||
|
|
||||||
|
g_free(cbd);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We hand over to the emulator core here to establish the
|
||||||
|
* SCO connection once the codec is negotiated
|
||||||
|
* */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hfp_sco_connected_hint(struct ofono_handsfree_card *card)
|
static void hfp_sco_connected_hint(struct ofono_handsfree_card *card)
|
||||||
|
@ -208,6 +260,8 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
|
||||||
OFONO_HANDSFREE_CARD_TYPE_GATEWAY,
|
OFONO_HANDSFREE_CARD_TYPE_GATEWAY,
|
||||||
HFP_AG_DRIVER, em);
|
HFP_AG_DRIVER, em);
|
||||||
|
|
||||||
|
ofono_handsfree_card_set_data(card, em);
|
||||||
|
|
||||||
ofono_handsfree_card_set_local(card, local);
|
ofono_handsfree_card_set_local(card, local);
|
||||||
ofono_handsfree_card_set_remote(card, remote);
|
ofono_handsfree_card_set_remote(card, remote);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue