diff --git a/src/gsm.c b/src/gsm.c index 6916dd1..5fdbbe7 100644 --- a/src/gsm.c +++ b/src/gsm.c @@ -375,6 +375,14 @@ int gsm_set_call_presentation(GSM * gsm, int set) } +/* gsm_set_call_waiting */ +int gsm_set_call_waiting(GSM * gsm, int unsollicited, int mode) +{ + return gsm_modem_set_call_waiting(gsm->modem, (unsollicited != 0) ? TRUE + : FALSE, (mode != 0) ? TRUE : FALSE); +} + + /* gsm_set_extended_errors */ int gsm_set_extended_errors(GSM * gsm, int extended) { diff --git a/src/gsm.h b/src/gsm.h index f5bd470..e8ceeed 100644 --- a/src/gsm.h +++ b/src/gsm.h @@ -316,6 +316,7 @@ void gsm_set_callback(GSM * gsm, GSMCallback callback, gpointer data); unsigned int gsm_get_retry(GSM * gsm); int gsm_set_call_presentation(GSM * gsm, int set); +int gsm_set_call_waiting(GSM * gsm, int unsollicited, int mode); int gsm_set_extended_ring_reports(GSM * gsm, int extended); int gsm_set_functional(GSM * gsm, int functional); int gsm_set_line_presentation(GSM * gsm, int set); diff --git a/src/modem.c b/src/modem.c index 93bd79f..67f0a85 100644 --- a/src/modem.c +++ b/src/modem.c @@ -563,6 +563,18 @@ int gsm_modem_set_call_presentation(GSMModem * gsmm, gboolean set) } +/* gsm_modem_set_call_waiting */ +int gsm_modem_set_call_waiting(GSMModem * gsmm, gboolean unsollicited, + gboolean mode) +{ + char cmd[] = "AT+CCWA=X,X"; + + cmd[8] = unsollicited ? '1' : '0'; + cmd[10] = mode ? '1' : '0'; + return (gsm_queue(gsmm->gsm, cmd) != NULL) ? 0 : 1; +} + + /* gsm_modem_set_echo */ int gsm_modem_set_echo(GSMModem * gsmm, gboolean echo) { diff --git a/src/modem.h b/src/modem.h index 2093480..9d61766 100644 --- a/src/modem.h +++ b/src/modem.h @@ -75,6 +75,8 @@ int gsm_modem_send_message(GSMModem * gsmm, char const * number, char const * text); int gsm_modem_set_call_presentation(GSMModem * gsmm, gboolean set); +int gsm_modem_set_call_waiting(GSMModem * gsmm, gboolean unsollicited, + gboolean mode); int gsm_modem_set_echo(GSMModem * gsmm, gboolean echo); int gsm_modem_set_extended_errors(GSMModem * gsmm, gboolean extended); int gsm_modem_set_extended_ring_reports(GSMModem * gsmm, gboolean extended); diff --git a/src/phone.c b/src/phone.c index d50d957..0aac704 100644 --- a/src/phone.c +++ b/src/phone.c @@ -2179,6 +2179,7 @@ static int _phone_gsm_event(GSMEvent * event, gpointer data) return 0; } gsm_set_call_presentation(phone->gsm, TRUE); + gsm_set_call_waiting(phone->gsm, TRUE, TRUE); gsm_set_extended_ring_reports(phone->gsm, TRUE); gsm_set_operator_mode(phone->gsm, GSM_OPERATOR_MODE_AUTOMATIC);