Enabling call waiting fixes incoming calls on the Openmoko Freerunner

This commit is contained in:
Pierre Pronchery 2010-05-19 12:25:46 +00:00
parent 8a729628c8
commit 795134ce1c
5 changed files with 24 additions and 0 deletions

View File

@ -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)
{

View File

@ -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);

View File

@ -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)
{

View File

@ -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);

View File

@ -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);