From 17dacffd0b07abcf837b8b1b8778d815bb7aee71 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 2 May 2010 01:48:19 +0000 Subject: [PATCH] Added a function to answer calls --- src/gsm.c | 31 +++++++++++++++++++++++++------ src/gsm.h | 2 ++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/gsm.c b/src/gsm.c index 3bd0a11..e7a620c 100644 --- a/src/gsm.c +++ b/src/gsm.c @@ -196,6 +196,7 @@ static int _gsm_event_send(GSM * gsm, GSMEventType type); static int _gsm_event_set_status(GSM * gsm, GSMStatus status); /* modem commands */ +static int _gsm_modem_answer(GSM * gsm); static int _gsm_modem_call(GSM * gsm, GSMCallType calltype, char const * number); static int _gsm_modem_call_contact(GSM * gsm, GSMCallType calltype, @@ -232,7 +233,8 @@ static int _gsm_parse_line(GSM * gsm, char const * line, gboolean * answered); /* queue management */ static GSMCommand * _gsm_queue(GSM * gsm, char const * command); -static int _gsm_queue_error(GSM * gsm, char const * command, GSMError error); +static int _gsm_queue_with_error(GSM * gsm, char const * command, + GSMError error); static int _gsm_queue_full(GSM * gsm, GSMPriority priority, char const * command, char const * suffix, GSMError error, GSMCommandCallback callback); @@ -442,6 +444,13 @@ int gsm_set_retry(GSM * gsm, unsigned int retry) /* useful */ +/* gsm_answer */ +int gsm_answer(GSM * gsm) +{ + return _gsm_modem_answer(gsm); +} + + /* gsm_call */ int gsm_call(GSM * gsm, GSMCallType calltype, char const * number) { @@ -772,6 +781,15 @@ static int _gsm_event_set_status(GSM * gsm, GSMStatus status) /* modem commands */ +/* gsm_modem_answer */ +static int _gsm_modem_answer(GSM * gsm) +{ + char const cmd[] = "ATA"; + + return _gsm_queue_with_error(gsm, cmd, GSM_ERROR_ANSWER_FAILED); +} + + /* gsm_modem_call */ static int _gsm_modem_call(GSM * gsm, GSMCallType calltype, char const * number) { @@ -896,7 +914,7 @@ static int _gsm_modem_get_contact_list(GSM * gsm) { char const cmd[] = "AT+CPBR=?"; - return _gsm_queue_error(gsm, cmd, GSM_ERROR_CONTACT_LIST_FAILED); + return _gsm_queue_with_error(gsm, cmd, GSM_ERROR_CONTACT_LIST_FAILED); } @@ -917,7 +935,7 @@ static int _gsm_modem_get_message_list(GSM * gsm) { char const cmd[] = "AT+CMGL=?"; - return _gsm_queue_error(gsm, cmd, GSM_ERROR_MESSAGE_LIST_FAILED); + return _gsm_queue_with_error(gsm, cmd, GSM_ERROR_MESSAGE_LIST_FAILED); } @@ -965,7 +983,7 @@ static int _gsm_modem_get_signal_level(GSM * gsm) { char const cmd[] = "AT+CSQ"; - return _gsm_queue_error(gsm, cmd, GSM_ERROR_SIGNAL_LEVEL_FAILED); + return _gsm_queue_with_error(gsm, cmd, GSM_ERROR_SIGNAL_LEVEL_FAILED); } @@ -1160,7 +1178,7 @@ static int _gsm_modem_set_functional(GSM * gsm, gboolean functional) char cmd[] = "AT+CFUN=X"; cmd[8] = functional ? '1' : '0'; - return _gsm_queue_error(gsm, cmd, GSM_ERROR_FUNCTIONAL_FAILED); + return _gsm_queue_with_error(gsm, cmd, GSM_ERROR_FUNCTIONAL_FAILED); } @@ -1448,7 +1466,8 @@ static int _gsm_queue_command(GSM * gsm, GSMCommand * command) /* gsm_queue_error */ -static int _gsm_queue_error(GSM * gsm, char const * command, GSMError error) +static int _gsm_queue_with_error(GSM * gsm, char const * command, + GSMError error) { GSMCommand * gsmc; diff --git a/src/gsm.h b/src/gsm.h index 25691cf..5c01308 100644 --- a/src/gsm.h +++ b/src/gsm.h @@ -45,6 +45,7 @@ typedef enum _GSMEventType typedef enum _GSMError { GSM_ERROR_UNKNOWN = 0, + GSM_ERROR_ANSWER_FAILED, GSM_ERROR_CALL_FAILED, GSM_ERROR_CONTACT_FETCH_FAILED, GSM_ERROR_CONTACT_LIST_FAILED, @@ -207,6 +208,7 @@ int gsm_set_registration_report(GSM * gsm, GSMRegistrationReport report); int gsm_set_retry(GSM * gsm, unsigned int retry); /* useful */ +int gsm_answer(GSM * gsm); int gsm_call(GSM * gsm, GSMCallType calltype, char const * number); int gsm_call_contact(GSM * gsm, GSMCallType calltype, unsigned int index); int gsm_enter_sim_pin(GSM * gsm, char const * code);