From 317954ec36301770a5a7296394f9dc67a381c53b Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sat, 8 May 2010 13:31:32 +0000 Subject: [PATCH] Also ensure that setting the operator worked --- src/gsm.h | 1 + src/modem.c | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/gsm.h b/src/gsm.h index b64be08..c581e09 100644 --- a/src/gsm.h +++ b/src/gsm.h @@ -63,6 +63,7 @@ typedef enum _GSMError GSM_ERROR_MESSAGE_FETCH_FAILED, GSM_ERROR_MESSAGE_LIST_FAILED, GSM_ERROR_MESSAGE_SEND_FAILED, + GSM_ERROR_OPERATOR_MODE_FAILED, GSM_ERROR_SIGNAL_LEVEL_FAILED, GSM_ERROR_RESET_FAILED, GSM_ERROR_SIM_PIN_REQUIRED, diff --git a/src/modem.c b/src/modem.c index 3bcb0a8..9dc1b99 100644 --- a/src/modem.c +++ b/src/modem.c @@ -565,10 +565,11 @@ int gsm_modem_set_operator_format(GSMModem * gsmm, GSMOperatorFormat format) /* gsm_modem_set_operator_mode */ +static void _modem_set_operator_mode_callback(GSM * gsm); + int gsm_modem_set_operator_mode(GSMModem * gsmm, GSMOperatorMode mode) { char cmd[] = "AT+COPS=X"; - GSMCommand * gsmc; switch(mode) { @@ -582,9 +583,15 @@ int gsm_modem_set_operator_mode(GSMModem * gsmm, GSMOperatorMode mode) return 1; } cmd[8] = mode + '0'; - if((gsmc = gsm_queue(gsmm->gsm, cmd)) == NULL) - return 1; - return 0; + return gsm_queue_full(gsmm->gsm, GSM_PRIORITY_NORMAL, cmd, + GSM_ERROR_OPERATOR_MODE_FAILED, + _modem_set_operator_mode_callback); +} + +static void _modem_set_operator_mode_callback(GSM * gsm) +{ + /* did it really work? */ + gsm_fetch_operator(gsm); }