diff --git a/drivers/atmodem/call-barring.c b/drivers/atmodem/call-barring.c index 76e1f09a..94f62912 100644 --- a/drivers/atmodem/call-barring.c +++ b/drivers/atmodem/call-barring.c @@ -78,16 +78,21 @@ static void clck_query_cb(gboolean ok, GAtResult *result, gpointer user_data) } static void at_call_barring_query(struct ofono_modem *modem, const char *lock, - ofono_call_barring_cb_t cb, void *data) + int cls, ofono_call_barring_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]; + int len; if (!cbd || strlen(lock) != 2) goto error; - sprintf(buf, "AT+CLCK=\"%s\",2", lock); + len = sprintf(buf, "AT+CLCK=\"%s\",2", lock); + + if (cls != 7) + sprintf(buf + len, ",%d", cls); if (g_at_chat_send(at->parser, buf, clck_prefix, clck_query_cb, cbd, g_free) > 0) @@ -115,8 +120,8 @@ static void clck_set_cb(gboolean ok, GAtResult *result, gpointer user_data) } static void at_call_barring_set(struct ofono_modem *modem, const char *lock, - int enable, const char *passwd, int cls, - ofono_generic_cb_t cb, void *data) + int enable, const char *passwd, 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); diff --git a/src/call-barring.c b/src/call-barring.c index df184de6..444b89d4 100644 --- a/src/call-barring.c +++ b/src/call-barring.c @@ -312,8 +312,11 @@ static gboolean cb_ss_query_next_lock(gpointer user) { struct ofono_modem *modem = user; struct call_barring_data *cb = modem->call_barring; + int cls; - cb->ops->query(modem, cb_locks[cb->query_next].fac, + cls = cb->ss_req_cls | BEARER_CLASS_DEFAULT; + + cb->ops->query(modem, cb_locks[cb->query_next].fac, cls, cb_ss_query_next_lock_callback, modem); return FALSE; @@ -602,7 +605,7 @@ static gboolean get_query_next_lock(gpointer user) struct call_barring_data *cb = modem->call_barring; cb->ops->query(modem, cb_locks[cb->query_next].fac, - get_query_lock_callback, modem); + BEARER_CLASS_DEFAULT, get_query_lock_callback, modem); return FALSE; } @@ -667,7 +670,7 @@ static gboolean set_query_next_lock(gpointer user) struct call_barring_data *cb = modem->call_barring; cb->ops->query(modem, cb_locks[cb->query_next].fac, - set_query_lock_callback, modem); + BEARER_CLASS_DEFAULT, set_query_lock_callback, modem); return FALSE; } diff --git a/src/driver.h b/src/driver.h index 5d440c00..c329f563 100644 --- a/src/driver.h +++ b/src/driver.h @@ -340,7 +340,7 @@ struct ofono_call_barring_ops { void (*set)(struct ofono_modem *modem, const char *lock, int enable, const char *passwd, int cls, ofono_generic_cb_t cb, void *data); - void (*query)(struct ofono_modem *modem, const char *lock, + void (*query)(struct ofono_modem *modem, const char *lock, int cls, ofono_call_barring_cb_t cb, void *data); };