Module: sems Branch: 1.2 Commit: 04eb64c84f4d7462a03c5c392248762013f2641a URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=04eb64c84f4d7462a03c5c392248762013f2641a
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Wed Jun 30 14:09:10 2010 +0200 report changed key in KeyPressed, verbouse DBG --- core/AmDtmfDetector.cpp | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) diff --git a/core/AmDtmfDetector.cpp b/core/AmDtmfDetector.cpp index 4b94f6b..67ed455 100644 --- a/core/AmDtmfDetector.cpp +++ b/core/AmDtmfDetector.cpp @@ -240,7 +240,9 @@ void AmDtmfDetector::process(AmEvent *evt) void AmDtmfDetector::flushKey(unsigned int event_id) { // flush the current key if it corresponds to the one with event_id + DBG("flushKey\n"); if (m_eventPending && m_current_eventid_i && event_id == m_current_eventid) { + DBG("flushKey - reportEvent()\n"); reportEvent(); } } @@ -254,6 +256,7 @@ void AmDtmfDetector::registerKeyReleased(int event, Dtmf::EventSource source, // push out it now if ((m_eventPending && m_currentEvent != event) || (m_eventPending && has_eventid && m_current_eventid_i && (event_id != m_current_eventid))) { + DBG("event differs - reportEvent()\n"); reportEvent(); } @@ -296,12 +299,22 @@ void AmDtmfDetector::registerKeyPressed(int event, Dtmf::EventSource type, bool } else { + // Old event has not been sent yet + // push out it now + if ((m_currentEvent != event) || + (has_eventid && m_current_eventid_i && (event_id != m_current_eventid))) { + DBG("event differs - reportEvent() from key pressed\n"); + reportEvent(); + } + long delta_msec = (tm.tv_sec - m_lastReportTime.tv_sec) * 1000 + (tm.tv_usec - m_lastReportTime.tv_usec) / 1000; // SIP INFO can report stop time is in future so avoid changing // m_lastReportTime during that period if (delta_msec > 0) memcpy(&m_lastReportTime, &tm, sizeof(struct timeval)); + + } if (has_eventid) { @@ -372,11 +385,14 @@ void AmRtpDtmfDetector::process(AmRtpDtmfEvent *evt) if (m_lastTS_i && m_lastTS == evt->ts()) { // ignore events from past key press which was already reported + DBG("ignore RTP event ts ==%u\n", evt->ts()); return; } if (!m_eventPending) { + DBG("new m_eventPending, event()==%d, ts=%u\n", evt->event(), evt->ts()); + gettimeofday(&m_startTime, NULL); m_eventPending = true; m_currentEvent = evt->event(); @@ -385,10 +401,14 @@ void AmRtpDtmfDetector::process(AmRtpDtmfEvent *evt) } else { + DBG("RTP event, event()==%d, m_currentEvent == %d, m_currentTS_i=%s, evt->ts=%u, m_currentTS=%u\n", + evt->event(), m_currentEvent, m_currentTS_i?"true":"false", evt->ts(), m_currentTS); + if ((evt->event() != m_currentEvent) || (m_currentTS_i && (evt->ts() != m_currentTS))) { // Previous event does not end correctly so send out it now... + DBG("flushKey %u\n", m_currentTS); m_keysink->flushKey(m_currentTS); // ... and reinitialize to process current event gettimeofday(&m_startTime, NULL); @@ -398,6 +418,7 @@ void AmRtpDtmfDetector::process(AmRtpDtmfEvent *evt) m_currentTS_i = true; } } + DBG("registerKeyPressed %d, %u\n", m_currentEvent, m_currentTS); m_keysink->registerKeyPressed(m_currentEvent, Dtmf::SOURCE_RTP, true, m_currentTS); } } @@ -408,6 +429,7 @@ void AmRtpDtmfDetector::sendPending() { struct timeval end_time; gettimeofday(&end_time, NULL); + DBG("registerKeyReleased(%d, ... %u)\n", m_currentEvent, m_currentTS); m_keysink->registerKeyReleased(m_currentEvent, Dtmf::SOURCE_RTP, m_startTime, end_time, true, m_currentTS); m_eventPending = false; m_currentTS_i = false; @@ -420,6 +442,7 @@ void AmRtpDtmfDetector::checkTimeout() { if (m_eventPending && m_packetCount++ > MAX_PACKET_WAIT) { + DBG("idle timeout ... sendPending()\n"); sendPending(); } } _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
