aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-11-18 15:13:38 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-11-18 15:13:38 +0000
commitd2b6d2cf0e6a44f343a4a00f7168cbd99d6eaa2e (patch)
treeb16cd20daf7530655502be7c38757bce44cbf188 /channels
parent1445ab379089a89a790b65d2aff78cf480b6d1fd (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-xchannels/chan_vpb.c36
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;