summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-05-28 11:21:26 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-05-28 18:25:45 -0500
commit99b01eba7f103aa76d90a93905175d0c11fb8f8a (patch)
tree0a3d6e946d3512072470b5af08ac35a63b82990b /drivers
parent1b6369d1880ebfc7b343b47abc052fb42347de37 (diff)
downloadofono-99b01eba7f103aa76d90a93905175d0c11fb8f8a.tar.bz2
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.
Diffstat (limited to 'drivers')
-rw-r--r--drivers/atmodem/call-waiting.c42
1 files changed, 10 insertions, 32 deletions
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);
}
}