mirror of git://git.sysmocom.de/ofono
hfpmodem: Split AT+VTS command into multiple +VTS
According to the standard "3GPP 27.007 v6.8.0" Appendix C.2.11, when sending multiple DTMF characters, these must go in individual +VTS commands for each tone. This adopts the AT modem approach. Before: AT+VTS=1234\r After: AT+VTS=1;+VTS=2;+VTS=3;+VTS=4\r
This commit is contained in:
parent
62c34467a2
commit
65be2b344c
|
@ -654,8 +654,10 @@ static void hfp_send_dtmf(struct ofono_voicecall *vc, const char *dtmf,
|
|||
{
|
||||
struct voicecall_data *vd = ofono_voicecall_get_data(vc);
|
||||
struct change_state_req *req = g_try_new0(struct change_state_req, 1);
|
||||
int len = strlen(dtmf);
|
||||
char *buf;
|
||||
int s;
|
||||
int i;
|
||||
|
||||
if (req == NULL)
|
||||
goto error;
|
||||
|
@ -665,12 +667,15 @@ static void hfp_send_dtmf(struct ofono_voicecall *vc, const char *dtmf,
|
|||
req->data = data;
|
||||
req->affected_types = 0;
|
||||
|
||||
/* strlen("AT+VTS=) = 7 + NULL */
|
||||
buf = g_try_new(char, strlen(dtmf) + 8);
|
||||
/* strlen("AT") + (n-1) * strlen("+VTS=T;") + strlen(+VTS=T) + null */
|
||||
buf = g_try_new(char, len * 7 + 2);
|
||||
if (buf == NULL)
|
||||
goto error;
|
||||
|
||||
sprintf(buf, "AT+VTS=%s", dtmf);
|
||||
s = sprintf(buf, "AT+VTS=%c", dtmf[0]);
|
||||
|
||||
for (i = 1; i < len; i++)
|
||||
s += sprintf(buf + s, ";+VTS=%c", dtmf[i]);
|
||||
|
||||
s = g_at_chat_send(vd->chat, buf, none_prefix,
|
||||
generic_cb, req, g_free);
|
||||
|
|
Loading…
Reference in New Issue