diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-05-28 13:50:25 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-05-28 18:28:40 -0500 |
commit | 699752eaf15c97e8ea53cfd24dd0e19549ffd712 (patch) | |
tree | 89b454618fed92ada6561accd77c3d14b2387063 /drivers/atmodem | |
parent | 99b01eba7f103aa76d90a93905175d0c11fb8f8a (diff) | |
download | ofono-699752eaf15c97e8ea53cfd24dd0e19549ffd712.tar.bz2 |
Squash CallWaiting onto CallSettings interface
The CallWaiting interface had one settable attribute after the latest
set of refactoring. Squash it onto the CallSettings interface where
it belonged in the first place
Diffstat (limited to 'drivers/atmodem')
-rw-r--r-- | drivers/atmodem/at.h | 3 | ||||
-rw-r--r-- | drivers/atmodem/atmodem.c | 2 | ||||
-rw-r--r-- | drivers/atmodem/call-settings.c | 107 | ||||
-rw-r--r-- | drivers/atmodem/call-waiting.c | 158 |
4 files changed, 106 insertions, 164 deletions
diff --git a/drivers/atmodem/at.h b/drivers/atmodem/at.h index 4907be7a..de38a893 100644 --- a/drivers/atmodem/at.h +++ b/drivers/atmodem/at.h @@ -73,9 +73,6 @@ extern void at_network_registration_exit(struct ofono_modem *modem); extern void at_call_forwarding_init(struct ofono_modem *modem); extern void at_call_forwarding_exit(struct ofono_modem *modem); -extern void at_call_waiting_init(struct ofono_modem *modem); -extern void at_call_waiting_exit(struct ofono_modem *modem); - extern void at_call_settings_init(struct ofono_modem *modem); extern void at_call_settings_exit(struct ofono_modem *modem); diff --git a/drivers/atmodem/atmodem.c b/drivers/atmodem/atmodem.c index 8f14bc01..2d87a8ad 100644 --- a/drivers/atmodem/atmodem.c +++ b/drivers/atmodem/atmodem.c @@ -103,7 +103,6 @@ static void manager_free(gpointer user) struct at_data *at = l->data; at_call_forwarding_exit(at->modem); - at_call_waiting_exit(at->modem); at_call_settings_exit(at->modem); at_network_registration_exit(at->modem); at_voicecall_exit(at->modem); @@ -341,7 +340,6 @@ static void create_cb(GIOChannel *io, gboolean success, gpointer user) at_sim_init(at->modem); at_call_forwarding_init(at->modem); at_call_settings_init(at->modem); - at_call_waiting_init(at->modem); at_network_registration_init(at->modem); at_voicecall_init(at->modem); at_call_meter_init(at->modem); diff --git a/drivers/atmodem/call-settings.c b/drivers/atmodem/call-settings.c index aaed4441..30420cec 100644 --- a/drivers/atmodem/call-settings.c +++ b/drivers/atmodem/call-settings.c @@ -42,6 +42,109 @@ static const char *none_prefix[] = { NULL }; static const char *clir_prefix[] = { "+CLIR:", NULL }; static const char *colp_prefix[] = { "+COLP:", NULL }; static const char *clip_prefix[] = { "+CLIP:", NULL }; +static const char *ccwa_prefix[] = { "+CCWA:", NULL }; + +static void ccwa_query_cb(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct cb_data *cbd = user_data; + ofono_call_waiting_status_cb_t cb = cbd->cb; + int conditions = 0; + int status; + int cls; + struct ofono_error error; + GAtResultIter iter; + + dump_response("ccwa_query_cb", ok, result); + decode_at_error(&error, g_at_result_final_response(result)); + + if (!ok) + goto out; + + g_at_result_iter_init(&iter, result); + + while (g_at_result_iter_next(&iter, "+CCWA:")) { + g_at_result_iter_next_number(&iter, &status); + g_at_result_iter_next_number(&iter, &cls); + + if (status == 1) + conditions |= cls; + } + + ofono_debug("CW enabled for: %d", conditions); + +out: + cb(&error, conditions, cbd->data); +} + +static void at_ccwa_query(struct ofono_modem *modem, int cls, + ofono_call_waiting_status_cb_t cb, void *data) +{ + struct at_data *at = ofono_modem_userdata(modem); + struct cb_data *cbd = cb_data_new(modem, cb, data); + char buf[64]; + + if (!cbd) + goto error; + + cbd->user = GINT_TO_POINTER(cls); + + if (cls == 7) + sprintf(buf, "AT+CCWA=1,2"); + else + sprintf(buf, "AT+CCWA=1,2,%d", cls); + + if (g_at_chat_send(at->parser, buf, ccwa_prefix, + ccwa_query_cb, cbd, g_free) > 0) + return; + +error: + if (cbd) + g_free(cbd); + + { + DECLARE_FAILURE(error); + cb(&error, 0, data); + } +} + +static void ccwa_set_cb(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct cb_data *cbd = user_data; + ofono_generic_cb_t cb = cbd->cb; + struct ofono_error error; + + dump_response("ccwa_set_cb", ok, result); + decode_at_error(&error, g_at_result_final_response(result)); + + cb(&error, cbd->data); +} + +static void at_ccwa_set(struct ofono_modem *modem, int mode, int cls, + ofono_generic_cb_t cb, void *data) +{ + struct at_data *at = ofono_modem_userdata(modem); + struct cb_data *cbd = cb_data_new(modem, cb, data); + char buf[64]; + + if (!cbd) + goto error; + + sprintf(buf, "AT+CCWA=1,%d,%d", mode, cls); + + if (g_at_chat_send(at->parser, buf, none_prefix, + ccwa_set_cb, cbd, g_free) > 0) + return; + +error: + if (cbd) + g_free(cbd); + + { + DECLARE_FAILURE(error); + cb(&error, data); + } +} + static void clip_query_cb(gboolean ok, GAtResult *result, gpointer user_data) { @@ -257,7 +360,9 @@ static struct ofono_call_settings_ops ops = { .colp_query = at_colp_query, .clir_query = at_clir_query, .clir_set = at_clir_set, - .colr_query = NULL + .colr_query = NULL, + .cw_query = at_ccwa_query, + .cw_set = at_ccwa_set, }; void at_call_settings_init(struct ofono_modem *modem) diff --git a/drivers/atmodem/call-waiting.c b/drivers/atmodem/call-waiting.c deleted file mode 100644 index 2e978d59..00000000 --- a/drivers/atmodem/call-waiting.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * - * oFono - Open Source Telephony - * - * Copyright (C) 2008-2009 Intel Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#define _GNU_SOURCE -#include <string.h> -#include <stdlib.h> -#include <stdio.h> - -#include <glib.h> - -#include <ofono/log.h> -#include "driver.h" - -#include "gatchat.h" -#include "gatresult.h" - -#include "at.h" - -static const char *none_prefix[] = { NULL }; -static const char *ccwa_prefix[] = { "+CCWA:", NULL }; - -static void ccwa_query_cb(gboolean ok, GAtResult *result, gpointer user_data) -{ - struct cb_data *cbd = user_data; - ofono_call_waiting_status_cb_t cb = cbd->cb; - int conditions = 0; - int status; - int cls; - struct ofono_error error; - GAtResultIter iter; - - dump_response("ccwa_query_cb", ok, result); - decode_at_error(&error, g_at_result_final_response(result)); - - if (!ok) - goto out; - - g_at_result_iter_init(&iter, result); - - while (g_at_result_iter_next(&iter, "+CCWA:")) { - g_at_result_iter_next_number(&iter, &status); - g_at_result_iter_next_number(&iter, &cls); - - if (status == 1) - conditions |= cls; - } - - ofono_debug("CW enabled for: %d", conditions); - -out: - cb(&error, conditions, cbd->data); -} - -static void at_ccwa_query(struct ofono_modem *modem, int cls, - ofono_call_waiting_status_cb_t cb, void *data) -{ - struct at_data *at = ofono_modem_userdata(modem); - struct cb_data *cbd = cb_data_new(modem, cb, data); - char buf[64]; - - if (!cbd) - goto error; - - cbd->user = GINT_TO_POINTER(cls); - - if (cls == 7) - sprintf(buf, "AT+CCWA=1,2"); - else - sprintf(buf, "AT+CCWA=1,2,%d", cls); - - if (g_at_chat_send(at->parser, buf, ccwa_prefix, - ccwa_query_cb, cbd, g_free) > 0) - return; - -error: - if (cbd) - g_free(cbd); - - { - DECLARE_FAILURE(error); - cb(&error, 0, data); - } -} - -static void ccwa_set_cb(gboolean ok, GAtResult *result, gpointer user_data) -{ - struct cb_data *cbd = user_data; - ofono_generic_cb_t cb = cbd->cb; - struct ofono_error error; - - dump_response("ccwa_set_cb", ok, result); - decode_at_error(&error, g_at_result_final_response(result)); - - cb(&error, cbd->data); -} - -static void at_ccwa_set(struct ofono_modem *modem, int mode, int cls, - ofono_generic_cb_t cb, void *data) -{ - struct at_data *at = ofono_modem_userdata(modem); - struct cb_data *cbd = cb_data_new(modem, cb, data); - char buf[64]; - - if (!cbd) - goto error; - - sprintf(buf, "AT+CCWA=1,%d,%d", mode, cls); - - if (g_at_chat_send(at->parser, buf, none_prefix, - ccwa_set_cb, cbd, g_free) > 0) - return; - -error: - if (cbd) - g_free(cbd); - - { - DECLARE_FAILURE(error); - cb(&error, data); - } -} - -static struct ofono_call_waiting_ops ops = { - .query = at_ccwa_query, - .set = at_ccwa_set -}; - -void at_call_waiting_init(struct ofono_modem *modem) -{ - ofono_call_waiting_register(modem, &ops); -} - -void at_call_waiting_exit(struct ofono_modem *modem) -{ - ofono_call_waiting_unregister(modem); -} |