diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-11-18 15:13:38 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2003-11-18 15:13:38 +0000 |
commit | d2b6d2cf0e6a44f343a4a00f7168cbd99d6eaa2e (patch) | |
tree | b16cd20daf7530655502be7c38757bce44cbf188 /channels | |
parent | 1445ab379089a89a790b65d2aff78cf480b6d1fd (diff) |
More VPB updates from Paul
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1763 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_vpb.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/channels/chan_vpb.c b/channels/chan_vpb.c index 1bcdc5bf3..d4aee06f5 100755 --- a/channels/chan_vpb.c +++ b/channels/chan_vpb.c @@ -97,10 +97,9 @@ static int restart_monitor(void); #define MODE_FXO 3 -static VPB_TONE Dialtone = {440, 440, 440, -10, -100, -100, 5000, 0 }; -static VPB_TONE Busytone = {440, 0, 0, -10, -100, -100, 500, 500}; -static VPB_TONE Ringbacktone = {440, 0, 0, -10, -100, -100, 100, 100}; - +static VPB_TONE Dialtone = {440, 440, 440, 0, 0, 0, 5000, 0 }; +static VPB_TONE Busytone = {440, 0, 0, 0, -100, -100, 500, 500}; +static VPB_TONE Ringbacktone = {440, 0, 0, 0, -100, -100, 100, 100}; #define VPB_MAX_BRIDGES 128 @@ -390,14 +389,21 @@ static inline int monitor_handle_notowned(struct vpb_pvt *p, VPB_EVENT *e) break; case VPB_STATION_ONHOOK: /*, clear ext */ - vpb_tone_terminate(p->handle); + while (vpb_playtone_state(p->handle) != 0){ + vpb_tone_terminate(p->handle); + vpb_sleep(10); + } p->wantdtmf = 1; p->ext[0] = 0; break; case VPB_DTMF: if (p->wantdtmf == 1) { - vpb_tone_terminate(p->handle); + while (vpb_playtone_state(p->handle) != 0){ + vpb_tone_terminate(p->handle); + vpb_sleep(10); + } + p->wantdtmf = 0; } s[0] = e->data; @@ -609,16 +615,32 @@ static int vpb_indicate(struct ast_channel *ast, int condition) switch(condition) { case AST_CONTROL_BUSY: case AST_CONTROL_CONGESTION: + while (vpb_playtone_state(p->handle) != 0){ + res = vpb_tone_terminate(p->handle); + vpb_sleep(10); + } res = vpb_playtone_async(p->handle, &Busytone); break; case AST_CONTROL_RINGING: + while (vpb_playtone_state(p->handle) != 0){ + res = vpb_tone_terminate(p->handle); + vpb_sleep(10); + } res = vpb_playtone_async(p->handle, &Ringbacktone); break; case AST_CONTROL_ANSWER: case -1: /* -1 means stop playing? */ - res = vpb_tone_terminate(p->handle); + while (vpb_playtone_state(p->handle) != 0){ + res = vpb_tone_terminate(p->handle); + vpb_sleep(10); + } + break; case AST_CONTROL_HANGUP: + while (vpb_playtone_state(p->handle) != 0){ + res = vpb_tone_terminate(p->handle); + vpb_sleep(10); + } res = vpb_playtone_async(p->handle, &Busytone); break; |