diff options
| author | Zhenhua Zhang <zhenhua.zhang@intel.com> | 2009-11-25 13:48:43 +0800 |
|---|---|---|
| committer | Denis Kenzior <denkenz@gmail.com> | 2009-11-24 20:43:41 -0600 |
| commit | 64015ff4b80a6d0b07b229b1f5577dcb995fb3c1 (patch) | |
| tree | 64f9984fd8f11e83914ff616517ce04839b2d8ca /drivers | |
| parent | a4a4bddbe940c565bac545124afdd5bd5ff16881 (diff) | |
| download | ofono-64015ff4b80a6d0b07b229b1f5577dcb995fb3c1.tar.bz2 | |
Fix: Move CHLD from voicecall driver to plugin
According HFP v1.5 spec, AT+CHLD=? should be a part of SLC
connection. So we should not do it after SLC connection is
created.
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/hfpmodem/hfpmodem.h | 9 | ||||
| -rw-r--r-- | drivers/hfpmodem/voicecall.c | 55 |
2 files changed, 10 insertions, 54 deletions
diff --git a/drivers/hfpmodem/hfpmodem.h b/drivers/hfpmodem/hfpmodem.h index c0e4c7ec..1935cb2e 100644 --- a/drivers/hfpmodem/hfpmodem.h +++ b/drivers/hfpmodem/hfpmodem.h @@ -42,6 +42,14 @@ #define HF_FEATURE_ENHANCED_CALL_STATUS 0x20 #define HF_FEATURE_ENHANCED_CALL_CONTROL 0x40 +#define AG_CHLD_0 0x01 +#define AG_CHLD_1 0x02 +#define AG_CHLD_1x 0x04 +#define AG_CHLD_2 0x08 +#define AG_CHLD_2x 0x10 +#define AG_CHLD_3 0x20 +#define AG_CHLD_4 0x40 + enum hfp_indicator { HFP_INDICATOR_SERVICE = 0, HFP_INDICATOR_CALL, @@ -56,6 +64,7 @@ enum hfp_indicator { struct hfp_data { GAtChat *chat; unsigned int ag_features; + unsigned int ag_mpty_features; unsigned int hf_features; unsigned char cind_pos[HFP_INDICATOR_LAST]; unsigned int cind_val[HFP_INDICATOR_LAST]; diff --git a/drivers/hfpmodem/voicecall.c b/drivers/hfpmodem/voicecall.c index 52cdfd7f..2cd14b5f 100644 --- a/drivers/hfpmodem/voicecall.c +++ b/drivers/hfpmodem/voicecall.c @@ -39,16 +39,7 @@ #include "hfpmodem.h" -#define AG_CHLD_0 0x01 -#define AG_CHLD_1 0x02 -#define AG_CHLD_1x 0x04 -#define AG_CHLD_2 0x08 -#define AG_CHLD_2x 0x10 -#define AG_CHLD_3 0x20 -#define AG_CHLD_4 0x40 - static const char *none_prefix[] = { NULL }; -static const char *chld_prefix[] = { "+CHLD:", NULL }; static const char *clcc_prefix[] = { "+CLCC:", NULL }; struct voicecall_data { @@ -900,47 +891,6 @@ static void ciev_notify(GAtResult *result, gpointer user_data) ciev_callheld_notify(vc, value); } -static void chld_cb(gboolean ok, GAtResult *result, gpointer user_data) -{ - struct voicecall_data *vd = user_data; - unsigned int ag_mpty_feature = 0; - GAtResultIter iter; - const char *str; - - if (!ok) - return; - - g_at_result_iter_init(&iter, result); - - if (!g_at_result_iter_next(&iter, "+CHLD:")) - return; - - if (!g_at_result_iter_open_list(&iter)) - return; - - while (g_at_result_iter_next_unquoted_string(&iter, &str)) { - if (!strcmp(str, "0")) - ag_mpty_feature |= AG_CHLD_0; - else if (!strcmp(str, "1")) - ag_mpty_feature |= AG_CHLD_1; - else if (!strcmp(str, "1x")) - ag_mpty_feature |= AG_CHLD_1x; - else if (!strcmp(str, "2")) - ag_mpty_feature |= AG_CHLD_2; - else if (!strcmp(str, "2x")) - ag_mpty_feature |= AG_CHLD_2x; - else if (!strcmp(str, "3")) - ag_mpty_feature |= AG_CHLD_3; - else if (!strcmp(str, "4")) - ag_mpty_feature |= AG_CHLD_4; - } - - if (!g_at_result_iter_close_list(&iter)) - return; - - vd->ag_mpty_features = ag_mpty_feature; -} - static void hfp_voicecall_initialized(gboolean ok, GAtResult *result, gpointer user_data) { @@ -970,14 +920,11 @@ static int hfp_voicecall_probe(struct ofono_voicecall *vc, unsigned int vendor, vd->chat = data->chat; vd->ag_features = data->ag_features; + vd->ag_mpty_features = data->ag_mpty_features; memcpy(vd->cind_pos, data->cind_pos, HFP_INDICATOR_LAST); memcpy(vd->cind_val, data->cind_val, HFP_INDICATOR_LAST); - if (vd->ag_features & AG_FEATURE_3WAY) - g_at_chat_send(vd->chat, "AT+CHLD=?", chld_prefix, - chld_cb, vd, NULL); - ofono_voicecall_set_data(vc, vd); g_at_chat_send(vd->chat, "AT+CLIP=1", NULL, NULL, NULL, NULL); |