X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=ss5.cpp;h=2a09bede9362cfba99b9e0d62977b884bbfb8d65;hp=c90267bc174588e75c4e668f1702b3d47a5db97f;hb=79bd731c0db3e3202cfeed2af3fb217ae744b70f;hpb=6642360dcf1eecba954ad04d2d0a78753f8e5182 diff --git a/ss5.cpp b/ss5.cpp index c90267b..2a09bed 100644 --- a/ss5.cpp +++ b/ss5.cpp @@ -531,6 +531,7 @@ void Pss5::inband_receive(unsigned char *buffer, int len) int count = 0, tocopy, space; char digit; double quality; + int mute = 0; again: /* how much to copy ? */ @@ -619,23 +620,6 @@ void Pss5::inband_receive(unsigned char *buffer, int len) } p_m_s_last_digit_used = digit; - /* update mute */ - if ((p_m_mISDNport->ss5 & SS5_FEATURE_MUTE)) { - int mdigit; - memcpy(p_m_s_delay_mute, p_m_s_delay_mute+1, sizeof(p_m_s_delay_mute)-1); - p_m_s_delay_mute[sizeof(p_m_s_delay_mute)-1] = digit; - mdigit = p_m_s_delay_mute[0]; - if (p_m_mute) { - /* mute is on */ - if (mdigit != 'A' && mdigit != 'B' && mdigit != 'C') - mute_off(); - } else { - /* mute is off */ - if (mdigit == 'A' || mdigit == 'B' || mdigit == 'C') - mute_on(); - } - } - /* delay decoded tones */ if ((p_m_mISDNport->ss5 & SS5_FEATURE_DELAY)) { /* shift buffer */ @@ -1053,6 +1037,42 @@ void Pss5::inband_receive(unsigned char *buffer, int len) break; } + /* update mute on RX */ + if ((p_m_mISDNport->ss5 & SS5_FEATURE_MUTE_RX)) { + int mdigit; + memcpy(p_m_s_delay_mute, p_m_s_delay_mute+1, sizeof(p_m_s_delay_mute)-1); + p_m_s_delay_mute[sizeof(p_m_s_delay_mute)-1] = digit; + mdigit = p_m_s_delay_mute[0]; + if (mdigit == 'A' || mdigit == 'B' || mdigit == 'C') + mute = 1; + } + + /* mute when TX */ + if ((p_m_mISDNport->ss5 & SS5_FEATURE_MUTE_TX)) { + switch(p_m_s_signal) { + case SS5_SIGNAL_SEND_ON_RECOG: + case SS5_SIGNAL_RECEIVE_RECOG: + if (p_m_s_recog > SS5_DELAY_MUTE) + mute = 1; + break; + case SS5_SIGNAL_SEND_OFF: + case SS5_SIGNAL_RECEIVE: + mute = 1; + break; + } + } + + /* apply mute state */ + if (p_m_mute) { + /* mute is on */ + if (!mute) + mute_off(); + } else { + /* mute is off */ + if (mute) + mute_on(); + } + /* something more to decode ? */ if (count != len) goto again;