From 65ce05d37ab5f32c5598167b3b56dc28228e1e73 Mon Sep 17 00:00:00 2001 From: Aki Niemi Date: Tue, 12 Jan 2010 13:18:03 +0200 Subject: Refactor supplementary service drivers --- drivers/isimodem/call-barring.c | 32 ++++++++++++++++++----------- drivers/isimodem/call-forwarding.c | 41 +++++++++++++++++++++++--------------- drivers/isimodem/call-settings.c | 31 ++++++++++++++++++---------- 3 files changed, 65 insertions(+), 39 deletions(-) diff --git a/drivers/isimodem/call-barring.c b/drivers/isimodem/call-barring.c index fbbed8bc..6487ae8b 100644 --- a/drivers/isimodem/call-barring.c +++ b/drivers/isimodem/call-barring.c @@ -42,6 +42,7 @@ #include "isimodem.h" #include "isiutil.h" #include "ss.h" +#include "debug.h" struct barr_data { GIsiClient *client; @@ -60,7 +61,7 @@ static bool set_resp_cb(GIsiClient *client, const void *restrict data, } if (len < 3 || msg[0] != SS_SERVICE_COMPLETED_RESP) - goto error; + return false; if (msg[1] != SS_ACTIVATION && msg[1] != SS_DEACTIVATION) goto error; @@ -203,7 +204,7 @@ static bool query_resp_cb(GIsiClient *client, const void *restrict data, } if (len < 7 || msg[0] != SS_SERVICE_COMPLETED_RESP) - goto error; + return false; if (msg[1] != SS_INTERROGATION) goto error; @@ -241,8 +242,8 @@ static bool query_resp_cb(GIsiClient *client, const void *restrict data, break; default: - DBG("Skipping sub-block: 0x%04X (%zu bytes)", - g_isi_sb_iter_get_id(&iter), + DBG("Skipping sub-block: %s (%zd bytes)", + ss_subblock_name(g_isi_sb_iter_get_id(&iter)), g_isi_sb_iter_get_len(&iter)); break; } @@ -320,7 +321,7 @@ static bool set_passwd_resp_cb(GIsiClient *client, const void *restrict data, } if (len < 3 || msg[0] != SS_SERVICE_COMPLETED_RESP) - goto error; + return false; if (msg[1] != SS_GSM_PASSWORD_REGISTRATION) goto error; @@ -413,16 +414,23 @@ static void reachable_cb(GIsiClient *client, bool alive, uint16_t object, void *opaque) { struct ofono_call_barring *barr = opaque; + const char *debug = NULL; - if (alive == true) { - DBG("Resource 0x%02X, with version %03d.%03d reachable", - g_isi_client_resource(client), - g_isi_version_major(client), - g_isi_version_minor(client)); - g_idle_add(isi_call_barring_register, barr); + if (!alive) { + DBG("Unable to bootsrap call barring driver"); return; } - DBG("Unable to bootsrap call barring driver"); + + DBG("%s (v%03d.%03d) reachable", + pn_resource_name(g_isi_client_resource(client)), + g_isi_version_major(client), + g_isi_version_minor(client)); + + debug = getenv("OFONO_ISI_DEBUG"); + if (debug && (strcmp(debug, "all") == 0 || strcmp(debug, "ss") == 0)) + g_isi_client_set_debug(client, ss_debug, NULL); + + g_idle_add(isi_call_barring_register, barr); } diff --git a/drivers/isimodem/call-forwarding.c b/drivers/isimodem/call-forwarding.c index cdebc1d0..06248300 100644 --- a/drivers/isimodem/call-forwarding.c +++ b/drivers/isimodem/call-forwarding.c @@ -41,6 +41,7 @@ #include "isimodem.h" #include "isiutil.h" #include "ss.h" +#include "debug.h" struct forw_data { GIsiClient *client; @@ -118,8 +119,8 @@ static bool decode_gsm_forwarding_info(const void *restrict data, size_t len, return true; } default: - DBG("Skipping sub-sub-block: 0x%04X (%zu bytes)", - g_isi_sb_iter_get_id(&iter), + DBG("Skipping sub-block: %s (%zd bytes)", + ss_subblock_name(g_isi_sb_iter_get_id(&iter)), g_isi_sb_iter_get_len(&iter)); break; } @@ -141,7 +142,7 @@ static bool registration_resp_cb(GIsiClient *client, const void *restrict data, } if (len < 7 || msg[0] != SS_SERVICE_COMPLETED_RESP) - goto error; + return false; if (msg[1] != SS_REGISTRATION) goto error; @@ -177,8 +178,8 @@ static bool registration_resp_cb(GIsiClient *client, const void *restrict data, break; } default: - DBG("Skipping sub-block: 0x%04X (%zu bytes)", - g_isi_sb_iter_get_id(&iter), + DBG("Skipping sub-block: %s (%zd bytes)", + ss_subblock_name(g_isi_sb_iter_get_id(&iter)), g_isi_sb_iter_get_len(&iter)); break; } @@ -308,8 +309,8 @@ static bool erasure_resp_cb(GIsiClient *client, const void *restrict data, break; } default: - DBG("Skipping sub-block: 0x%04X (%zu bytes)", - g_isi_sb_iter_get_id(&iter), + DBG("Skipping sub-block: %s (%zd bytes)", + ss_subblock_name(g_isi_sb_iter_get_id(&iter)), g_isi_sb_iter_get_len(&iter)); break; } @@ -433,8 +434,8 @@ static bool query_resp_cb(GIsiClient *client, const void *restrict data, break; } default: - DBG("Skipping sub-block: 0x%04X (%zu bytes)", - g_isi_sb_iter_get_id(&iter), + DBG("Skipping sub-block: %s (%zd bytes)", + ss_subblock_name(g_isi_sb_iter_get_id(&iter)), g_isi_sb_iter_get_len(&iter)); break; } @@ -508,16 +509,23 @@ static void reachable_cb(GIsiClient *client, bool alive, uint16_t object, void *opaque) { struct ofono_call_forwarding *cf = opaque; + const char *debug = NULL; - if (alive == true) { - DBG("Resource 0x%02X, with version %03d.%03d reachable", - g_isi_client_resource(client), - g_isi_version_major(client), - g_isi_version_minor(client)); - g_idle_add(isi_call_forwarding_register, cf); + if (!alive) { + DBG("Unable to bootsrap call forwarding driver"); return; } - DBG("Unable to bootsrap call forwarding driver"); + + DBG("%s (v%03d.%03d) reachable", + pn_resource_name(g_isi_client_resource(client)), + g_isi_version_major(client), + g_isi_version_minor(client)); + + debug = getenv("OFONO_ISI_DEBUG"); + if (debug && (strcmp(debug, "all") == 0 || strcmp(debug, "ss") == 0)) + g_isi_client_set_debug(client, ss_debug, NULL); + + g_idle_add(isi_call_forwarding_register, cf); } @@ -537,6 +545,7 @@ static int isi_call_forwarding_probe(struct ofono_call_forwarding *cf, return -ENOMEM; ofono_call_forwarding_set_data(cf, data); + if (!g_isi_verify(data->client, reachable_cb, cf)) DBG("Unable to verify reachability"); diff --git a/drivers/isimodem/call-settings.c b/drivers/isimodem/call-settings.c index 85b7573f..e76c4069 100644 --- a/drivers/isimodem/call-settings.c +++ b/drivers/isimodem/call-settings.c @@ -41,6 +41,7 @@ #include "isimodem.h" #include "isiutil.h" #include "ss.h" +#include "debug.h" struct settings_data { GIsiClient *client; @@ -137,8 +138,8 @@ static bool query_resp_cb(GIsiClient *client, const void *restrict data, break; } default: - DBG("Skipping sub-block: 0x%04X (%zu bytes)", - g_isi_sb_iter_get_id(&iter), + DBG("Skipping sub-block: %s (%zd bytes)", + ss_subblock_name(g_isi_sb_iter_get_id(&iter)), g_isi_sb_iter_get_len(&iter)); break; } @@ -228,8 +229,8 @@ static bool set_resp_cb(GIsiClient *client, const void *restrict data, break; } default: - DBG("Skipping sub-block: 0x%04X (%zu bytes)", - g_isi_sb_iter_get_id(&iter), + DBG("Skipping sub-block: %s (%zd bytes)", + ss_subblock_name(g_isi_sb_iter_get_id(&iter)), g_isi_sb_iter_get_len(&iter)); break; } @@ -290,16 +291,23 @@ static void reachable_cb(GIsiClient *client, bool alive, uint16_t object, void *opaque) { struct ofono_call_settings *cs = opaque; + const char *debug = NULL; - if (alive == true) { - DBG("Resource 0x%02X, with version %03d.%03d reachable", - g_isi_client_resource(client), - g_isi_version_major(client), - g_isi_version_minor(client)); - g_idle_add(isi_call_settings_register, cs); + if (!alive) { + DBG("Unable to bootsrap call settings driver"); return; } - DBG("Unable to bootsrap call settings driver"); + + DBG("%s (v%03d.%03d) reachable", + pn_resource_name(g_isi_client_resource(client)), + g_isi_version_major(client), + g_isi_version_minor(client)); + + debug = getenv("OFONO_ISI_DEBUG"); + if (debug && (strcmp(debug, "all") == 0 || strcmp(debug, "ss") == 0)) + g_isi_client_set_debug(client, ss_debug, NULL); + + g_idle_add(isi_call_settings_register, cs); } @@ -320,6 +328,7 @@ static int isi_call_settings_probe(struct ofono_call_settings *cs, unsigned int return -ENOMEM; ofono_call_settings_set_data(cs, data); + if (!g_isi_verify(data->client, reachable_cb, cs)) DBG("Unable to verify reachability"); -- cgit v1.2.3