From 619cb8f38b88a8f7e01e51bc39fb387e86e7b0b4 Mon Sep 17 00:00:00 2001 From: Guillaume Knispel Date: Tue, 19 Oct 2010 14:32:37 +0200 Subject: added a new (very very low quality way) to propagate audio --- xivovp/base.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'xivovp/base.c') diff --git a/xivovp/base.c b/xivovp/base.c index e70dc29..da69740 100644 --- a/xivovp/base.c +++ b/xivovp/base.c @@ -40,7 +40,6 @@ MODULE_PARM_DESC(traces_vanish, #define NB_LINES 2 #define TICK_JIFFIES(n) DIV_ROUND_UP(n * HZ, 1000) #define VP_TICK_JIFFIES TICK_JIFFIES(VP_TICK_MS) -#define RXTX_TICK_JIFFIES TICK_JIFFIES(1) #define DEBUG_SELECT_RUNNING (VP_DBG_ERROR \ | VP_DBG_WARNING \ @@ -48,8 +47,12 @@ MODULE_PARM_DESC(traces_vanish, enum xivovp_line_type { FXS_LINE = 0, FXO_LINE = 1 }; -#define FXS_TIMESLOT 1 -#define FXO_TIMESLOT 3 + +#define FXS_TIMESLOT (1) +#define FXO_TIMESLOT (3) + +#define TS_MASK ((1u << FXS_TIMESLOT) | (1u << FXO_TIMESLOT)) + struct xivovp_line { enum xivovp_line_type type; @@ -81,16 +84,13 @@ static struct xivovp { struct xivo_tdm_port *tdm_port; } xivovp; -struct timer_list rxtx_timer; - -static void xivovp_rxtx(unsigned long data) +static void xivovp_transmit_and_receive(void *data) { (void) data; + dahdi_receive(&xivovp.span); dahdi_transmit(&xivovp.span); dahdi_ec_span(&xivovp.span); - - mod_timer(&rxtx_timer, jiffies + RXTX_TICK_JIFFIES); } /* Shouldn't there be something better there? TOTHINK */ @@ -297,7 +297,6 @@ static void vp_post_init(VpEventType *event) // XXX What happens if lines aren't connected? - mod_timer(&rxtx_timer, jiffies + RXTX_TICK_JIFFIES); count_and_stop_traces = TRUE; } @@ -545,10 +544,6 @@ xivovp_init(void) xivovp.vp_tick_timer.function = vp_tick; xivovp.vp_tick_timer.data = 42; - init_timer(&rxtx_timer); - rxtx_timer.function = xivovp_rxtx; - rxtx_timer.data = 1337; - xivovp.line[FXS_LINE].type = FXS_LINE; xivovp.line[FXO_LINE].type = FXO_LINE; @@ -652,6 +647,7 @@ vp_init(void) static int test_evb_ve890_init(void) { + struct xivo_tdm_cb_struct cb_struct; // 264 bytes int rc; printk(KERN_INFO DRV_NAME ": entering %s\n", __func__); @@ -676,6 +672,16 @@ test_evb_ve890_init(void) goto err_dahdi_init; } + memset(&cb_struct, 0, sizeof cb_struct); + cb_struct.rx_bufs[FXS_TIMESLOT] = xivovp.chans[FXS_LINE]->readchunk; + cb_struct.tx_bufs[FXS_TIMESLOT] = xivovp.chans[FXS_LINE]->writechunk; + cb_struct.rx_bufs[FXO_TIMESLOT] = xivovp.chans[FXO_LINE]->readchunk; + cb_struct.tx_bufs[FXO_TIMESLOT] = xivovp.chans[FXO_LINE]->writechunk; + cb_struct.xivo_tdm_cb = xivovp_transmit_and_receive; + cb_struct.xivo_tdm_cb_data = NULL; + /* XXX */ (void) xivo_tdm_start_chans( + xivovp.tdm_port, TS_MASK, &cb_struct); + mod_timer(&xivovp.vp_tick_timer, jiffies + VP_TICK_JIFFIES); return 0; @@ -698,7 +704,6 @@ test_evb_ve890_exit(void) dahdi_unregister(&xivovp.span); del_timer_sync(&xivovp.vp_tick_timer); - del_timer_sync(&rxtx_timer); /* XXX : TODO update upstream Linux doc of del_timer_sync */ xivovp_cleanup(); -- cgit v1.2.3