From 3fa13d4d25f2cd02079f58044b09115b20aaf48e Mon Sep 17 00:00:00 2001 From: Andrzej Zaborowski Date: Thu, 18 Jun 2009 06:04:46 +0200 Subject: [PATCH] Implement CallBarring::ChangePassword in AT driver --- drivers/atmodem/call-barring.c | 45 ++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/atmodem/call-barring.c b/drivers/atmodem/call-barring.c index 5d2af58c..f0ba18e9 100644 --- a/drivers/atmodem/call-barring.c +++ b/drivers/atmodem/call-barring.c @@ -152,9 +152,50 @@ error: } } +static void cpwd_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("cpwd_set_cb", ok, result); + decode_at_error(&error, g_at_result_final_response(result)); + cb(&error, cbd->data); +} + +static void at_call_barring_set_passwd(struct ofono_modem *modem, + const char *lock, + const char *old_passwd, const char *new_passwd, + 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 || strlen(lock) != 2) + goto error; + + snprintf(buf, sizeof(buf), "AT+CPWD=\"%s\",\"%s\",\"%s\"", + lock, old_passwd, new_passwd); + + if (g_at_chat_send(at->parser, buf, none_prefix, + cpwd_set_cb, cbd, g_free) > 0) + return; + +error: + if (cbd) + g_free(cbd); + + { + DECLARE_FAILURE(error); + cb(&error, data); + } +} + static struct ofono_call_barring_ops ops = { - .set = at_call_barring_set, - .query = at_call_barring_query, + .set = at_call_barring_set, + .query = at_call_barring_query, + .set_passwd = at_call_barring_set_passwd, }; void at_call_barring_init(struct ofono_modem *modem)