static ftdm_status_t ftdm_sangoma_isdn_dtmf(ftdm_channel_t *ftdmchan, const char* dtmf);
ftdm_channel_t* ftdm_sangoma_isdn_process_event_states(ftdm_span_t *span, sngisdn_event_data_t *sngisdn_event);
-static void ftdm_sangoma_isdn_poll_events(ftdm_span_t *span);
static void ftdm_sangoma_isdn_process_phy_events(ftdm_span_t *span, ftdm_oob_event_t event);
static ftdm_status_t ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdmchan);
static void ftdm_sangoma_isdn_process_stack_event (ftdm_span_t *span, sngisdn_event_data_t *sngisdn_event);
}
}
-static void ftdm_sangoma_isdn_poll_events(ftdm_span_t *span)
-{
- ftdm_status_t ret_status;
-
- ret_status = ftdm_span_poll_event(span, 0, NULL);
- switch(ret_status) {
- case FTDM_SUCCESS:
- {
- ftdm_event_t *event;
- while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS) {
- ftdm_sangoma_isdn_process_phy_events(span, event->enum_id);
- }
- }
- break;
- case FTDM_TIMEOUT:
- /* No events pending */
- break;
- default:
- ftdm_log(FTDM_LOG_WARNING, "%s:Failed to poll span event\n", span->name);
- }
-}
-
static void ftdm_sangoma_isdn_dchan_set_queue_size(ftdm_channel_t *dchan)
{
ftdm_status_t ret_status;
unsigned waitms = 10000;
ftdm_iterator_t *chaniter = NULL;
ftdm_iterator_t *citer = NULL;
+ ftdm_event_t *event;
short *poll_events = ftdm_malloc(sizeof(short) * span->chan_count);
/* Initialize the d-channel */
wflags = FTDM_READ;
memset(poll_events, 0, sizeof(short)*span->chan_count);
+ poll_events[i] |= FTDM_EVENTS;
+
for (i = 0, citer = ftdm_span_get_chan_iterator(span, chaniter); citer; citer = ftdm_iterator_next(citer), i++) {
ftdmchan = ftdm_iterator_current(citer);
case FTDM_TIMEOUT:
break;
case FTDM_SUCCESS:
+ /* Check if there are any channels that have data available */
for (citer = ftdm_span_get_chan_iterator(span, chaniter); citer; citer = ftdm_iterator_next(citer)) {
len = 1000;
ftdmchan = ftdm_iterator_current(citer);
}
}
}
+
+ /* Check if there are any channels that have events available */
+ while (ftdm_span_next_event(span, &event) == FTDM_SUCCESS) {
+ ftdm_sangoma_isdn_process_phy_events(span, event->enum_id);
+ }
+
break;
default:
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_CRIT, "Unhandled IO event\n");
}
while (ftdm_running() && !(ftdm_test_flag(span, FTDM_SPAN_STOP_THREAD))) {
-
/* Check if there are any timers to process */
ftdm_sched_run(signal_data->sched);
ftdm_span_trigger_signals(span);
ftdm_log(FTDM_LOG_ERROR, "%s: ftdm_interrupt_wait returned with unknown code\n", span->name);
break;
}
-
- /* Poll for events, e.g HW DTMF */
- ftdm_sangoma_isdn_poll_events(span);
}
/* clear the IN_THREAD flag so that we know the thread is done */