From 57defecea870c265179b69f811416c7a4659b0ee Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sat, 21 Jan 2012 17:50:45 +0100 Subject: [PATCH] GSM now receives tones during bridge If a bridge is enabled, tones (e.g. hangup tone) will have priority over the bridge. The bridge will continue to forward audio, after tone is removed. (e.g after beeing on hold music) --- gsm.cpp | 8 ++++++++ gsm.h | 1 + gsm_bs.cpp | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gsm.cpp b/gsm.cpp index 9bfa1a5..63f7545 100644 --- a/gsm.cpp +++ b/gsm.cpp @@ -237,6 +237,14 @@ void Pgsm::frame_receive(void *arg) /* send traffic to gsm */ int Pgsm::bridge_rx(unsigned char *data, int len) { + if (p_tone_name[0]) + return -EINVAL; + + return audio_send(data, len); +} + +int Pgsm::audio_send(unsigned char *data, int len) +{ unsigned char frame[33]; /* encoder init failed */ diff --git a/gsm.h b/gsm.h index 0ccac2b..671aab6 100644 --- a/gsm.h +++ b/gsm.h @@ -60,6 +60,7 @@ class Pgsm : public Port void frame_send(void *_frame); void frame_receive(void *_frame); + int audio_send(unsigned char *data, int len); int bridge_rx(unsigned char *data, int len); int hunt_bchannel(void); diff --git a/gsm_bs.cpp b/gsm_bs.cpp index d062e3d..29888be 100644 --- a/gsm_bs.cpp +++ b/gsm_bs.cpp @@ -414,13 +414,13 @@ int message_bsc(struct lcr_gsm *lcr_gsm, int msg_type, void *arg) } else pgsm_bs->frame_receive(arg); /* if we do not bridge we need to inject audio, if available */ - if (!pgsm_bs->p_bridge) { + if (!pgsm_bs->p_bridge || pgsm_bs->p_tone_name[0]) { unsigned char data[160]; int i; i = pgsm_bs->read_audio(data, 160); if (i) - pgsm_bs->bridge_rx(data, i); + pgsm_bs->audio_send(data, i); } } return 0; -- 2.13.6