#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
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;
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;