Hi Andrew, On 10/13/2010 08:54 AM, Andrzej Zaborowski wrote: > This provides a way for other atoms to send DTMF tones during a call. > --- > src/ofono.h | 4 ++++ > src/voicecall.c | 16 ++++++++++++++++ > 2 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/src/ofono.h b/src/ofono.h > index 6c7f649..6efd9ac 100644 > --- a/src/ofono.h > +++ b/src/ofono.h > @@ -218,6 +218,10 @@ int __ofono_voicecall_dial(struct ofono_voicecall *vc, > ofono_voicecall_dial_cb_t cb, void *user_data); > void __ofono_voicecall_dial_cancel(struct ofono_voicecall *vc); > > +int __ofono_voicecall_send_tone(struct ofono_voicecall *vc, > + const char *tone_str, > + ofono_voicecall_cb_t cb, void *user_data); > +
So this one is structured according to __ofono_voicecall_dial, should we also have __ofono_voicecall_send_tone_cancel? > #include <ofono/sms.h> > > struct sms; > diff --git a/src/voicecall.c b/src/voicecall.c > index 7b5fe3b..45e19ce 100644 > --- a/src/voicecall.c > +++ b/src/voicecall.c > @@ -2326,3 +2326,19 @@ void __ofono_voicecall_dial_cancel(struct > ofono_voicecall *vc) > > vc->dial_req->cb = NULL; > } > + > +int __ofono_voicecall_send_tone(struct ofono_voicecall *vc, > + const char *tone_str, > + ofono_voicecall_cb_t cb, void *user_data) > +{ > + if (!vc->driver->send_tones) > + return -ENOSYS; > + > + /* Send DTMFs only if we have at least one connected call */ > + if (!voicecalls_can_dtmf(vc)) > + return -ENOENT; I'm a bit worried that we never check for BUSY conditions here, in particular since we can get into this situation: Send DTMF Cancel Send DTMF Which results in two DTMF operations being outstanding. > + > + vc->driver->send_tones(vc, tone_str, cb, user_data); > + > + return 0; > +} We also don't busy out any D-Bus operations when Send DTMF is in progress... Regards, -Denis _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono