From 92c16df87586283894decd761561cdc4890752fa Mon Sep 17 00:00:00 2001 From: Thomas Tsou Date: Sat, 28 Sep 2013 18:04:19 -0400 Subject: Transceiver52M: Separate main transmit and receive drive threads This patch primarily addresses observed repeated overrun conditions in embedded environments - namely ARM. The heartbeat of the transceiver is derived from the receive sample stream, which drives the main GSM clock. Detach the transmit thread from the receive loop to avoid interfering with the receive I/O, which is sensitive to overrun conditions if pull process is interrupted. Signed-off-by: Thomas Tsou --- Transceiver52M/Transceiver.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'Transceiver52M/Transceiver.h') diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h index 3175213..3e4f784 100644 --- a/Transceiver52M/Transceiver.h +++ b/Transceiver52M/Transceiver.h @@ -56,7 +56,8 @@ private: VectorFIFO* mTransmitFIFO; ///< radioInterface FIFO of transmit bursts VectorFIFO* mReceiveFIFO; ///< radioInterface FIFO of receive bursts - Thread *mFIFOServiceLoopThread; ///< thread to push/pull bursts into transmit/receive FIFO + Thread *mRxServiceLoopThread; ///< thread to pull bursts into receive FIFO + Thread *mTxServiceLoopThread; ///< thread to push bursts into transmit FIFO Thread *mControlServiceLoopThread; ///< thread to process control messages from GSM core Thread *mTransmitPriorityQueueServiceLoopThread;///< thread to process transmit bursts from GSM core @@ -191,7 +192,9 @@ protected: */ bool driveTransmitPriorityQueue(); - friend void *FIFOServiceLoopAdapter(Transceiver *); + friend void *RxServiceLoopAdapter(Transceiver *); + + friend void *TxServiceLoopAdapter(Transceiver *); friend void *ControlServiceLoopAdapter(Transceiver *); @@ -204,8 +207,9 @@ protected: }; -/** FIFO thread loop */ -void *FIFOServiceLoopAdapter(Transceiver *); +/** Main drive threads */ +void *RxServiceLoopAdapter(Transceiver *); +void *TxServiceLoopAdapter(Transceiver *); /** control message handler thread loop */ void *ControlServiceLoopAdapter(Transceiver *); -- cgit v1.2.3