This commit sends an unsolicited +BCS command with the selected codec
when the AG receives with success a AT+BCC command.
Currently the codec is hardcoded to CVSD.
---
src/emulator.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/src/emulator.c b/src/emulator.c
index f358a0e..96e6ad1 100644
--- a/src/emulator.c
+++ b/src/emulator.c
@@ -61,6 +61,7 @@ struct ofono_emulator {
unsigned char cmee_mode;
GSList *indicators;
guint callsetup_source;
+ guint audiosetup_source;
gboolean clip;
gboolean ccwa;
int pns_id;
@@ -449,6 +450,21 @@ static gboolean notify_ring(void *user_data)
return TRUE;
}
+static gboolean setup_codec_connection(void *user_data)
+{
+ struct ofono_emulator *em = user_data;
+ char str[16];
+
+ DBG("");
+
+ sprintf(str, "+BCS: %d", HFP_CODEC_CVSD);
+ g_at_server_send_unsolicited(em->server, str);
+
+ em->audiosetup_source = 0;
+
+ return FALSE;
+}
+
static void brsf_cb(GAtServer *server, GAtServerRequestType type,
GAtResult *result, gpointer user_data)
{
@@ -886,6 +902,10 @@ static void bcc_cb(GAtServer *server, GAtServerRequestType
type,
goto fail;
g_at_server_send_final(server, G_AT_SERVER_RESULT_OK);
+
+ em->audiosetup_source = g_timeout_add_seconds(0,
+ setup_codec_connection, em);
+
break;
default:
@@ -929,6 +949,11 @@ static void emulator_unregister(struct ofono_atom *atom)
em->callsetup_source = 0;
}
+ if (em->audiosetup_source) {
+ g_source_remove(em->audiosetup_source);
+ em->audiosetup_source = 0;
+ }
+
for (l = em->indicators; l; l = l->next) {
struct indicator *ind = l->data;
--
1.7.9.5
_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono