From 8e47df04ccd8dc63ef4d930f166cb027bd181def Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 2 May 2010 02:56:42 +0000 Subject: [PATCH] Enable phone functionality only once the SIM card is ready --- src/gsm.c | 12 ++++++++++-- src/gsm.h | 3 ++- src/phone.c | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gsm.c b/src/gsm.c index f7e1bdb..c0a352c 100644 --- a/src/gsm.c +++ b/src/gsm.c @@ -410,6 +410,13 @@ void gsm_set_callback(GSM * gsm, GSMCallback callback, gpointer data) } +/* gsm_set_functional */ +int gsm_set_functional(GSM * gsm, int functional) +{ + return _gsm_modem_set_functional(gsm, (functional != 0) ? TRUE : FALSE); +} + + /* gsm_set_operator_format */ int gsm_set_operator_format(GSM * gsm, GSMOperatorFormat format) { @@ -1368,7 +1375,6 @@ static int _parse_do(GSM * gsm) _gsm_modem_set_echo(gsm, FALSE); _gsm_modem_set_verbose(gsm, TRUE); _gsm_modem_set_extended_ring(gsm, TRUE); - _gsm_modem_set_functional(gsm, TRUE); _gsm_modem_get_model(gsm); _gsm_event_set_status(gsm, GSM_STATUS_INITIALIZED); _gsm_queue_push(gsm); @@ -1937,7 +1943,9 @@ static int _reset_do(int fd, unsigned int baudrate, unsigned int hwflow) term.c_oflag = 0; term.c_cc[VMIN] = 1; term.c_cc[VTIME] = 0; - cfsetospeed(&term, baudrate); /* ignore errors */ + if(cfsetospeed(&term, baudrate) != 0) + /* otherwise ignore error */ + phone_error(NULL, "/dev/modem", 0); if(tcsetattr(fd, TCSAFLUSH, &term) != 0) return 1; } diff --git a/src/gsm.h b/src/gsm.h index a9e3e5c..ac9f009 100644 --- a/src/gsm.h +++ b/src/gsm.h @@ -211,11 +211,12 @@ void gsm_delete(GSM * gsm); void gsm_set_callback(GSM * gsm, GSMCallback callback, gpointer data); unsigned int gsm_get_retry(GSM * gsm); +int gsm_set_functional(GSM * gsm, int functional); int gsm_set_operator_format(GSM * gsm, GSMOperatorFormat format); int gsm_set_operator_mode(GSM * gsm, GSMOperatorMode mode); int gsm_set_registration_report(GSM * gsm, GSMRegistrationReport report); int gsm_set_retry(GSM * gsm, unsigned int retry); -int gsm_set_extended_ring(GSM * gsm, gboolean extended); +int gsm_set_extended_ring(GSM * gsm, int extended); /* useful */ int gsm_answer(GSM * gsm); diff --git a/src/phone.c b/src/phone.c index 4e5bbe3..6998993 100644 --- a/src/phone.c +++ b/src/phone.c @@ -1031,6 +1031,7 @@ static void _phone_set_status(Phone * phone, GSMStatus status) operator = _("SIM ready..."); _phone_track(phone, PHONE_TRACK_CONTACT_LIST, TRUE); _phone_track(phone, PHONE_TRACK_MESSAGE_LIST, TRUE); + gsm_set_functional(phone->gsm, TRUE); gsm_set_operator_mode(phone->gsm, GSM_OPERATOR_MODE_AUTOMATIC); gsm_set_registration_report(phone->gsm, report);