Remove version query; use gisi/client.h instead

This commit is contained in:
Aki Niemi 2009-09-15 15:36:11 +03:00
parent 8bbd9a8560
commit b6e37fb792
1 changed files with 33 additions and 89 deletions

View File

@ -47,13 +47,6 @@
#define NETWORK_SCAN_TIMEOUT 60
#define NETWORK_SET_TIMEOUT 100
/* Used with COMMON_MESSAGE */
enum sub_message_id {
COMM_ISI_VERSION_GET_REQ = 0x12,
COMM_ISI_VERSION_GET_RESP = 0x13,
COMM_ISA_ENTITY_NOT_REACHABLE_RESP = 0x14
};
enum message_id {
NET_SET_REQ = 0x07,
NET_SET_RESP = 0x08,
@ -70,7 +63,6 @@ enum message_id {
NET_AVAILABLE_GET_RESP = 0xE4,
NET_OPER_NAME_READ_REQ = 0xE5,
NET_OPER_NAME_READ_RESP = 0xE6,
COMMON_MESSAGE = 0xF0
};
enum sub_block_id {
@ -213,12 +205,8 @@ static gboolean decode_reg_status(struct netreg_data *nd, const guint8 *msg,
switch (g_isi_sb_iter_get_id(&iter)) {
case NET_REG_INFO_COMMON: {
guint8 byte = 0;
if (g_isi_sb_iter_get_len(&iter) < 12)
return FALSE;
if (!g_isi_sb_iter_get_byte(&iter, &byte, 2))
return FALSE;
@ -228,21 +216,17 @@ static gboolean decode_reg_status(struct netreg_data *nd, const guint8 *msg,
*status = byte;
/* FIXME: decode alpha tag */
/* FIXME: decode alpha tag(s) */
break;
}
case NET_GSM_REG_INFO: {
guint16 word = 0;
guint32 dword = 0;
guint8 egprs = 0;
guint8 hsdpa = 0;
guint8 hsupa = 0;
if (g_isi_sb_iter_get_len(&iter) != 24)
return FALSE;
if (!g_isi_sb_iter_get_word(&iter, &word, 2) ||
!g_isi_sb_iter_get_dword(&iter, &dword, 4) ||
!g_isi_sb_iter_get_byte(&iter, &egprs, 17) ||
@ -419,21 +403,14 @@ static bool name_get_resp_cb(GIsiClient *client, const void *restrict data,
switch (g_isi_sb_iter_get_id(&iter)) {
case NET_GSM_OPERATOR_INFO:
if (g_isi_sb_iter_get_len(&iter) < 8)
if (!g_isi_sb_iter_get_oper_code(&iter, op.mcc, op.mnc, 2))
goto error;
g_isi_sb_iter_get_oper_code(&iter, op.mcc, op.mnc, 2);
break;
case NET_OPER_NAME_INFO: {
char *tag = NULL;
guint8 taglen = 0;
if (g_isi_sb_iter_get_len(&iter) < 4)
goto error;
if (!g_isi_sb_iter_get_byte(&iter, &taglen, 3))
goto error;
@ -538,21 +515,14 @@ static bool available_resp_cb(GIsiClient *client, const void *restrict data,
switch (g_isi_sb_iter_get_id(&iter)) {
case NET_AVAIL_NETWORK_INFO_COMMON: {
struct ofono_network_operator *op;
char *tag = NULL;
guint8 taglen = 0;
guint8 status = 0;
if (g_isi_sb_iter_get_len(&iter) < 12)
goto error;
op = list + common++;
if (!g_isi_sb_iter_get_byte(&iter, &status, 2))
goto error;
op->status = status;
if (!g_isi_sb_iter_get_byte(&iter, &taglen, 5))
goto error;
@ -560,6 +530,9 @@ static bool available_resp_cb(GIsiClient *client, const void *restrict data,
taglen * 2, 6))
goto error;
op = list + common++;
op->status = status;
strncpy(op->name, tag, OFONO_MAX_OPERATOR_NAME_LENGTH);
op->name[OFONO_MAX_OPERATOR_NAME_LENGTH] = '\0';
g_free(tag);
@ -567,12 +540,8 @@ static bool available_resp_cb(GIsiClient *client, const void *restrict data,
}
case NET_DETAILED_NETWORK_INFO: {
struct ofono_network_operator *op;
if (g_isi_sb_iter_get_len(&iter) < 8)
goto error;
op = list + detail++;
if (!g_isi_sb_iter_get_oper_code(&iter, op->mcc,
op->mnc, 2))
@ -803,18 +772,18 @@ static void rat_ind_cb(GIsiClient *client, const void *restrict data,
switch (g_isi_sb_iter_get_id(&iter)) {
case NET_RAT_INFO: {
guint8 info = 0;
if (g_isi_sb_iter_get_len(&iter) < 4)
goto error;
g_isi_sb_iter_get_byte(&iter, &nd->rat, 2);
g_isi_sb_iter_get_byte(&iter, &info, 3);
if (!g_isi_sb_iter_get_byte(&iter, &nd->rat, 2))
return;
if (!g_isi_sb_iter_get_byte(&iter, &info, 3))
return;
if (info)
g_isi_sb_iter_get_byte(&iter,
&nd->gsm_compact, 4);
if (!g_isi_sb_iter_get_byte(&iter,
&nd->gsm_compact, 4))
return;
break;
}
@ -826,10 +795,6 @@ static void rat_ind_cb(GIsiClient *client, const void *restrict data,
}
g_isi_sb_iter_next(&iter);
}
error:
DBG("Truncated message");
return;
}
static bool rat_resp_cb(GIsiClient *client, const void *restrict data,
@ -862,18 +827,18 @@ static bool rat_resp_cb(GIsiClient *client, const void *restrict data,
switch (g_isi_sb_iter_get_id(&iter)) {
case NET_RAT_INFO: {
guint8 info = 0;
if (g_isi_sb_iter_get_len(&iter) < 4)
return true;
g_isi_sb_iter_get_byte(&iter, &nd->rat, 2);
g_isi_sb_iter_get_byte(&iter, &info, 3);
if (!g_isi_sb_iter_get_byte(&iter, &nd->rat, 2))
return true;
if (!g_isi_sb_iter_get_byte(&iter, &info, 3))
return true;
if (info)
g_isi_sb_iter_get_byte(&iter,
&nd->gsm_compact, 4);
if (!g_isi_sb_iter_get_byte(&iter,
&nd->gsm_compact, 4))
return true;
break;
}
@ -931,11 +896,9 @@ static bool rssi_resp_cb(GIsiClient *client, const void *restrict data,
switch (g_isi_sb_iter_get_id(&iter)) {
case NET_RSSI_CURRENT: {
guint8 rssi = 0;
if (g_isi_sb_iter_get_len(&iter) < 4 ||
!g_isi_sb_iter_get_byte(&iter, &rssi, 2))
if (!g_isi_sb_iter_get_byte(&iter, &rssi, 2))
goto error;
strength = rssi != 0 ? rssi : -1;
@ -1016,31 +979,19 @@ 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)
static void reachable_cb(GIsiClient *client, bool alive, 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 (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_netreg_register, netreg);
return;
}
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;
DBG("Unable to bootsrap netreg driver");
}
static int isi_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor,
@ -1049,12 +1000,6 @@ static int isi_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor,
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;
@ -1066,9 +1011,8 @@ static int isi_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor,
ofono_netreg_set_data(netreg, nd);
if (!g_isi_request_make(nd->client, msg, sizeof(msg), NETWORK_TIMEOUT,
version_resp_cb, netreg))
DBG("Version query failed");
if (!g_isi_verify(nd->client, reachable_cb, netreg))
DBG("Unable to verify reachability");
return 0;
}