r3390 - trunk/src/target/gsm/src/gsmd
tick at sita.openmoko.org
tick at sita.openmoko.org
Mon Nov 12 10:38:09 CET 2007
Author: tick
Date: 2007-11-12 10:38:04 +0100 (Mon, 12 Nov 2007)
New Revision: 3390
Modified:
trunk/src/target/gsm/src/gsmd/atcmd.c
trunk/src/target/gsm/src/gsmd/unsolicited.c
Log:
keeping track of current registration state internally in gsmd. Without this the"gsmd->dev_state.registered" variable had bogus values. (Andrew)
Modified: trunk/src/target/gsm/src/gsmd/atcmd.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/atcmd.c 2007-11-12 09:31:54 UTC (rev 3389)
+++ trunk/src/target/gsm/src/gsmd/atcmd.c 2007-11-12 09:38:04 UTC (rev 3390)
@@ -668,7 +668,7 @@
}
llist_add(&cmd->list, &g->pending_atcmds);
- return atcmd_done(g, cur, "OK");
+ return atcmd_done(g, cur, "ERROR");
}
void atcmd_drain(int fd)
Modified: trunk/src/target/gsm/src/gsmd/unsolicited.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/unsolicited.c 2007-11-12 09:31:54 UTC (rev 3389)
+++ trunk/src/target/gsm/src/gsmd/unsolicited.c 2007-11-12 09:38:04 UTC (rev 3390)
@@ -145,9 +145,31 @@
struct gsmd *gsmd)
{
const char *comma = strchr(param, ',');
- struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_NETREG,
- sizeof(struct gsmd_evt_auxdata));
+ struct gsmd_ucmd *ucmd;
struct gsmd_evt_auxdata *aux;
+ int prev_registered = gsmd->dev_state.registered;
+ int state;
+ char *end;
+
+ state = strtol(param, &end, 10);
+ if (!(end > param)) {
+ gsmd_log(GSMD_ERROR, "Bad +CREG format, not updating state\n");
+ return -EINVAL;
+ }
+
+ /* Update our knowledge about our state */
+ gsmd->dev_state.registered =
+ (state == GSMD_NETREG_REG_HOME ||
+ state == GSMD_NETREG_REG_ROAMING);
+
+ /* Intialise things that depend on network registration */
+ if (gsmd->dev_state.registered && !prev_registered) {
+ sms_cb_network_init(gsmd);
+ }
+
+ /* Notify clients */
+ ucmd = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_NETREG,
+ sizeof(struct gsmd_evt_auxdata));
if (!ucmd)
return -ENOMEM;
aux = (struct gsmd_evt_auxdata *) ucmd->buf;
@@ -163,13 +185,8 @@
} else
aux->u.netreg.lac = aux->u.netreg.ci = 0;
- /* Intialise things that depend on network registration */
- if (aux->u.netreg.state == GSMD_NETREG_REG_HOME ||
- aux->u.netreg.state == GSMD_NETREG_REG_ROAMING) {
- sms_cb_network_init(gsmd);
- }
+ return usock_evt_send(gsmd, ucmd, GSMD_EVT_NETREG);
- return usock_evt_send(gsmd, ucmd, GSMD_EVT_NETREG);
}
/* Chapter 7.11, call waiting */
More information about the commitlog
mailing list