summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAki Niemi <aki.niemi@nokia.com>2009-09-14 12:45:54 +0300
committerAki Niemi <aki.niemi@nokia.com>2009-09-14 12:45:54 +0300
commit1c2f4b6097ae38741fa4cdc3e4a9f96f23e665a6 (patch)
treedb2a35804178a7a9656f7b6dc12d30ac4cd24e87 /drivers
parent843f0c07e2e0e28a6580d3483d35f410af519a73 (diff)
downloadofono-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.c37
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;
}