emulator: Refine +BIND support
authorDenis Kenzior <denkenz@gmail.com>
Mon, 10 Feb 2014 17:01:28 +0000 (11:01 -0600)
committerDenis Kenzior <denkenz@gmail.com>
Mon, 20 Oct 2014 18:40:29 +0000 (13:40 -0500)
src/emulator.c

index cab509c..1c43e21 100644 (file)
@@ -54,6 +54,7 @@ struct ofono_emulator {
        unsigned int cmee_mode : 2;
        bool clip : 1;
        bool ccwa : 1;
+       bool ddr_active : 1;
 };
 
 struct indicator {
@@ -895,6 +896,8 @@ fail:
 static void biev_cb(GAtServer *server, GAtServerRequestType type,
                        GAtResult *result, gpointer user_data)
 {
+       struct ofono_emulator *em = user_data;
+
        switch (type) {
        case G_AT_SERVER_REQUEST_TYPE_SET:
        {
@@ -908,7 +911,10 @@ static void biev_cb(GAtServer *server, GAtServerRequestType type,
                if (g_at_result_iter_next_number(&iter, &hf_indicator) == FALSE)
                        goto fail;
 
-               if (hf_indicator != 1)
+               if (hf_indicator != HFP_HF_INDICATOR_ENHANCED_SAFETY)
+                       goto fail;
+
+               if (em->ddr_active == FALSE)
                        goto fail;
 
                if (g_at_result_iter_next_number(&iter, &val) == FALSE)
@@ -1010,6 +1016,8 @@ void ofono_emulator_register(struct ofono_emulator *em, int fd)
                                                em);
 
        if (em->type == OFONO_EMULATOR_TYPE_HFP) {
+               em->ddr_active = true;
+
                emulator_add_indicator(em, OFONO_EMULATOR_IND_SERVICE, 0, 1, 0,
                                                                        FALSE);
                emulator_add_indicator(em, OFONO_EMULATOR_IND_CALL, 0, 1, 0,
@@ -1447,6 +1455,8 @@ void ofono_emulator_set_hf_indicator_active(struct ofono_emulator *em,
        if (indicator != HFP_HF_INDICATOR_ENHANCED_SAFETY)
                return;
 
+       em->ddr_active = active;
+
        sprintf(buf, "+BIND: %d,%d", HFP_HF_INDICATOR_ENHANCED_SAFETY, active);
        g_at_server_send_unsolicited(em->server, buf);
 }