Add proper bootstrapping for netreg driver

Use the ISI version query to bootstrap the netreg driver.
This commit is contained in:
Aki Niemi 2009-09-14 12:45:54 +03:00
parent 843f0c07e2
commit 1c2f4b6097
1 changed files with 36 additions and 1 deletions

View File

@ -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;
}