diff options
author | Aki Niemi <aki.niemi@nokia.com> | 2009-09-14 12:45:54 +0300 |
---|---|---|
committer | Aki Niemi <aki.niemi@nokia.com> | 2009-09-14 12:45:54 +0300 |
commit | 1c2f4b6097ae38741fa4cdc3e4a9f96f23e665a6 (patch) | |
tree | db2a35804178a7a9656f7b6dc12d30ac4cd24e87 /drivers | |
parent | 843f0c07e2e0e28a6580d3483d35f410af519a73 (diff) | |
download | ofono-1c2f4b6097ae38741fa4cdc3e4a9f96f23e665a6.tar.bz2 |
Add proper bootstrapping for netreg driver
Use the ISI version query to bootstrap the netreg driver.
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/isimodem/network-registration.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/drivers/isimodem/network-registration.c b/drivers/isimodem/network-registration.c index a2bac5e6..b07caca2 100644 --- a/drivers/isimodem/network-registration.c +++ b/drivers/isimodem/network-registration.c @@ -1119,12 +1119,45 @@ static gboolean isi_netreg_register(gpointer user) return FALSE; } +static bool version_resp_cb(GIsiClient *client, const void *restrict data, + size_t len, uint16_t object, void *opaque) +{ + const unsigned char *msg = data; + struct ofono_netreg *netreg = opaque; + struct netreg_data *nd = ofono_netreg_get_data(netreg); + + if(!msg) { + DBG("ISI client error: %d", g_isi_client_error(client)); + return true; + } + + if (len < 7 || msg[0] != COMMON_MESSAGE || + msg[1] != COMM_ISI_VERSION_GET_RESP) + return true; + + nd->version.major = msg[2]; + nd->version.minor = msg[3]; + + g_idle_add(isi_netreg_register, netreg); + + DBG("Resource 0x%02X version: %03u.%03u", + g_isi_client_resource(nd->client), + nd->version.major, nd->version.minor); + return true; +} + static int isi_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor, void *user) { GIsiModem *idx = user; struct netreg_data *nd = g_try_new0(struct netreg_data, 1); + unsigned char msg[] = { + COMMON_MESSAGE, + COMM_ISI_VERSION_GET_REQ, + 0x00 /* Filler */ + }; + if (!nd) return -ENOMEM; @@ -1136,7 +1169,9 @@ static int isi_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor, ofono_netreg_set_data(netreg, nd); - g_idle_add(isi_netreg_register, netreg); + if (!g_isi_request_make(nd->client, msg, sizeof(msg), NETWORK_TIMEOUT, + version_resp_cb, netreg)) + DBG("Version query failed"); return 0; } |