Only reinitialise our network subscriptions when we're getting registered, not on every registration state change. Increase lgsm usock reveice buffer size to account for commands like +CLAC. Miscellaneous fixes. --- commit 2348a36aab65548915c098866ce6584d564d9a47 tree 7bc1f632211fe9f822c50f5ed4de7a2b0e9cbca0 parent 56535ca5e8d1798232c33fee5b377b2cbd2cda49 author Andrzej Zaborowski Wed, 31 Oct 2007 22:00:10 +0100 committer Andrzej Zaborowski Wed, 31 Oct 2007 22:00:10 +0100 src/gsmd/uart.c | 12 +++++++----- src/gsmd/unsolicited.c | 12 ++++++------ src/gsmd/vendor_ti.c | 2 +- src/libgsmd/lgsm_internals.h | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/gsmd/uart.c b/src/gsmd/uart.c index 22a4a5c..e2cac6f 100644 --- a/src/gsmd/uart.c +++ b/src/gsmd/uart.c @@ -73,25 +73,27 @@ int set_baudrate(int fd, int baudrate, int hwflow) } if (bd == 0) return -EINVAL; - + i = tcgetattr(fd, &ti); if (i < 0) - return i; + return -errno; i = cfsetispeed(&ti, B0); if (i < 0) - return i; + return -errno; i = cfsetospeed(&ti, bd); if (i < 0) - return i; + return -errno; + ti.c_cflag &= CSTOPB | CSIZE | PARENB; + ti.c_cflag |= CS8 | CREAD; if (hwflow) ti.c_cflag |= CRTSCTS; else ti.c_cflag &= ~CRTSCTS; - return tcsetattr(fd, 0, &ti); + return tcsetattr(fd, 0, &ti) ? -errno : 0; } static int uart_select_cb(int fd, unsigned int what, void *data) diff --git a/src/gsmd/unsolicited.c b/src/gsmd/unsolicited.c index 032c3b0..39faf56 100644 --- a/src/gsmd/unsolicited.c +++ b/src/gsmd/unsolicited.c @@ -147,6 +147,7 @@ static int creg_parse(char *buf, int len, const char *param, const char *comma = strchr(param, ','); struct gsmd_ucmd *ucmd; struct gsmd_evt_auxdata *aux; + int prev_registered = gsmd->dev_state.registered; int state; char *end; @@ -161,6 +162,11 @@ static int creg_parse(char *buf, int len, const char *param, (aux->u.netreg.state == GSMD_NETREG_REG_HOME || aux->u.netreg.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)); @@ -179,12 +185,6 @@ static int creg_parse(char *buf, int len, const char *param, } 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); } diff --git a/src/gsmd/vendor_ti.c b/src/gsmd/vendor_ti.c index d270fb1..95e80ca 100644 --- a/src/gsmd/vendor_ti.c +++ b/src/gsmd/vendor_ti.c @@ -221,7 +221,7 @@ static const struct gsmd_unsolicit ticalypso_unsolicit[] = { { "%CSQ", &csq_parse }, /* Signal Quality */ { "%CPRI", &cpri_parse }, /* Ciphering Indication */ { "%CPI", &cpi_parse }, /* Call Progress Information */ - { "%CTZV", &ctzv_parse }, /* network time and data */ + { "%CTZV", &ctzv_parse }, /* Network time and date */ /* FIXME: parse all the below and generate the respective events */ diff --git a/src/libgsmd/lgsm_internals.h b/src/libgsmd/lgsm_internals.h index f1b1a23..c2000f0 100644 --- a/src/libgsmd/lgsm_internals.h +++ b/src/libgsmd/lgsm_internals.h @@ -8,7 +8,7 @@ struct lgsm_handle { int fd; lgsm_msg_handler *handler[__NUM_GSMD_MSGS]; enum lgsm_netreg_state netreg_state; - char usock_fifo[1024]; + char usock_fifo[4096]; int usock_len; };