Now able to send DTMF tones through the user interface

This commit is contained in:
Pierre Pronchery 2012-09-05 01:58:28 +00:00
parent 52fdb4d2df
commit a1a19fa861
3 changed files with 18 additions and 1 deletions

View File

@ -202,6 +202,9 @@ int modem_request_type(Modem * modem, ModemRequestType type, ...)
case MODEM_REQUEST_CONTACT_DELETE:
request.contact_delete.id = va_arg(ap, unsigned int);
break;
case MODEM_REQUEST_DTMF_SEND:
request.dtmf_send.dtmf = va_arg(ap, unsigned int);
break;
case MODEM_REQUEST_MESSAGE:
case MODEM_REQUEST_MESSAGE_DELETE:
request.message.id = va_arg(ap, unsigned int);

View File

@ -344,6 +344,7 @@ static int _debug_request(ModemPlugin * modem, ModemRequest * request)
ModemPluginHelper * helper = debug->helper;
ModemEvent event;
unsigned int u;
char buf[32];
if(request == NULL)
return -1;
@ -380,6 +381,13 @@ static int _debug_request(ModemPlugin * modem, ModemRequest * request)
= request->contact_new.number;
helper->event(helper->modem, &debug->event_contact);
break;
case MODEM_REQUEST_DTMF_SEND:
u = request->dtmf_send.dtmf;
snprintf(buf, sizeof(buf), "Sending DTMF '%c'\n", u);
event.type = MODEM_EVENT_TYPE_NOTIFICATION;
event.notification.content = buf;
debug->helper->event(debug->helper->modem, &event);
break;
case MODEM_REQUEST_MESSAGE_DELETE:
event.type = MODEM_EVENT_TYPE_MESSAGE_DELETED;
event.message_deleted.id = request->message_delete.id;

View File

@ -172,6 +172,7 @@ struct _Phone
GtkWidget * ab_window;
/* call */
ModemCallStatus ca_status;
GtkWidget * ca_window;
GtkWidget * ca_name;
GtkWidget * ca_number;
@ -445,6 +446,7 @@ Phone * phone_new(char const * plugin, int retry)
phone->bold = pango_font_description_new();
pango_font_description_set_weight(phone->bold, PANGO_WEIGHT_BOLD);
phone->en_method = MODEM_AUTHENTICATION_METHOD_NONE;
phone->ca_status = MODEM_CALL_STATUS_NONE;
phone->co_store = gtk_list_store_new(PHONE_CONTACT_COLUMN_COUNT,
G_TYPE_UINT, G_TYPE_UINT, GDK_TYPE_PIXBUF,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
@ -877,7 +879,6 @@ int phone_dialer_append(Phone * phone, char character)
if((character < '0' || character > '9') && character != '*'
&& character != '+' && character != '#')
return -1; /* ignore the error */
/* FIXME if in a call send DTMF instead */
text = gtk_entry_get_text(GTK_ENTRY(phone->di_entry));
len = strlen(text) + 2;
if((p = malloc(len)) == NULL)
@ -885,6 +886,10 @@ int phone_dialer_append(Phone * phone, char character)
snprintf(p, len, "%s%c", text, character);
gtk_entry_set_text(GTK_ENTRY(phone->di_entry), p);
free(p);
if(phone->ca_status == MODEM_CALL_STATUS_ACTIVE)
/* send a DTMF */
modem_request_type(phone->modem, MODEM_REQUEST_DTMF_SEND,
character);
return 0;
}
@ -4065,6 +4070,7 @@ static void _modem_event_call(Phone * phone, ModemEvent * event)
fprintf(stderr, "DEBUG: %s() %u %u\n", __func__, event->call.call_type,
event->call.status);
#endif
phone->ca_status = event->call.status;
if(event->call.call_type != MODEM_CALL_TYPE_VOICE
|| event->call.number == NULL)
return; /* XXX ignore these for now */