From 99b01eba7f103aa76d90a93905175d0c11fb8f8a Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Thu, 28 May 2009 11:21:26 -0500 Subject: Simplify CallWaiting plugin interface The use of a struct with status & cls seemed pointless when only a single integer can work just as well. Also the Fax & Data attributes have been squished. oFono does not yet support those call types. --- drivers/atmodem/call-waiting.c | 42 ++++++++++-------------------------------- 1 file changed, 10 insertions(+), 32 deletions(-) (limited to 'drivers/atmodem/call-waiting.c') diff --git a/drivers/atmodem/call-waiting.c b/drivers/atmodem/call-waiting.c index cd3370cb..2e978d59 100644 --- a/drivers/atmodem/call-waiting.c +++ b/drivers/atmodem/call-waiting.c @@ -45,11 +45,11 @@ 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; - int num = 0; - struct ofono_cw_condition *list = NULL; - int i; dump_response("ccwa_query_cb", ok, result); decode_at_error(&error, g_at_result_final_response(result)); @@ -59,40 +59,18 @@ static void ccwa_query_cb(gboolean ok, GAtResult *result, gpointer user_data) g_at_result_iter_init(&iter, result); - while (g_at_result_iter_next(&iter, "+CCWA:")) - num += 1; - - /* Specification is really unclear about this - * generate status=0 for all classes just in case - */ - if (num == 0) { - list = g_new(struct ofono_cw_condition, 1); - num = 1; - - list->status = 0; - list->cls = GPOINTER_TO_INT(cbd->user); - - goto out; - } - - list = g_new(struct ofono_cw_condition, num); - - g_at_result_iter_init(&iter, result); - num = 0; - while (g_at_result_iter_next(&iter, "+CCWA:")) { - g_at_result_iter_next_number(&iter, &(list[num].status)); - g_at_result_iter_next_number(&iter, &(list[num].cls)); + g_at_result_iter_next_number(&iter, &status); + g_at_result_iter_next_number(&iter, &cls); - num += 1; + if (status == 1) + conditions |= cls; } - for (i = 0; i < num; i++) - ofono_debug("ccwa_cb: %d, %d", list[i].status, list[i].cls); + ofono_debug("CW enabled for: %d", conditions); out: - cb(&error, num, list, cbd->data); - g_free(list); + cb(&error, conditions, cbd->data); } static void at_ccwa_query(struct ofono_modem *modem, int cls, @@ -122,7 +100,7 @@ error: { DECLARE_FAILURE(error); - cb(&error, 0, NULL, data); + cb(&error, 0, data); } } -- cgit v1.2.3