diff options
author | Josh Blum <josh@joshknows.com> | 2011-02-02 15:47:33 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2011-02-02 15:47:33 -0800 |
commit | 231f7181345e59413613cb1ed4b9e1dc48bb12de (patch) | |
tree | 4650abfbe8cd3244a32ad8cd63696068fa8cd11a /host/lib/usrp/usrp1 | |
parent | d46058d75c723402d7d135ff309afe4f00deca0c (diff) | |
download | uhd-231f7181345e59413613cb1ed4b9e1dc48bb12de.tar.gz uhd-231f7181345e59413613cb1ed4b9e1dc48bb12de.tar.bz2 uhd-231f7181345e59413613cb1ed4b9e1dc48bb12de.zip |
usrp1: fix for tx disable on EOB
Leave the tx digital always enabled, flush with zeros is enough to turn it "off".
Fixed the flush routine to send something (when zero) to ensure zeros go out.
Diffstat (limited to 'host/lib/usrp/usrp1')
-rw-r--r-- | host/lib/usrp/usrp1/io_impl.cpp | 16 | ||||
-rw-r--r-- | host/lib/usrp/usrp1/usrp1_impl.hpp | 1 |
2 files changed, 5 insertions, 12 deletions
diff --git a/host/lib/usrp/usrp1/io_impl.cpp b/host/lib/usrp/usrp1/io_impl.cpp index 9fa1b4f72..52a7c6650 100644 --- a/host/lib/usrp/usrp1/io_impl.cpp +++ b/host/lib/usrp/usrp1/io_impl.cpp @@ -91,7 +91,6 @@ struct usrp1_impl::io_impl{ void commit_send_buff(offset_send_buffer::sptr, offset_send_buffer::sptr, size_t); void flush_send_buff(void); bool get_send_buffs(vrt_packet_handler::managed_send_buffs_t &, double); - bool transmitting_enb; }; /*! @@ -133,6 +132,9 @@ void usrp1_impl::io_impl::flush_send_buff(void){ //calculate the number of bytes to alignment size_t bytes_to_pad = (-1*curr_buff->offset)%alignment_padding; + //send at least alignment_padding to guarantee zeros are sent + if (bytes_to_pad == 0) bytes_to_pad = alignment_padding; + //get the buffer, clear, and commit (really current buffer) vrt_packet_handler::managed_send_buffs_t buffs(1); if (this->get_send_buffs(buffs, 0.1)){ @@ -190,7 +192,7 @@ void usrp1_impl::io_init(void){ ); rx_stream_on_off(false); - tx_stream_on_off(false); + _io_impl->flush_send_buff(); } void usrp1_impl::rx_stream_on_off(bool enb){ @@ -201,13 +203,6 @@ void usrp1_impl::rx_stream_on_off(bool enb){ } } -void usrp1_impl::tx_stream_on_off(bool enb){ - if (not enb) _io_impl->flush_send_buff(); - _codec_ctrls[DBOARD_SLOT_A]->enable_tx_digital(enb); - _codec_ctrls[DBOARD_SLOT_B]->enable_tx_digital(enb); - _io_impl->transmitting_enb = enb; -} - /*********************************************************************** * Data send + helper functions **********************************************************************/ @@ -232,7 +227,6 @@ size_t usrp1_impl::send( send_mode_t send_mode, double timeout ){ if (_soft_time_ctrl->send_pre(metadata, timeout)) return num_samps; - if (not _io_impl->transmitting_enb) tx_stream_on_off(true); size_t num_samps_sent = vrt_packet_handler::send( _io_impl->packet_handler_send_state, //last state of the send handler @@ -250,7 +244,7 @@ size_t usrp1_impl::send( //handle eob flag (commit the buffer, disable the DACs) //check num samps sent to avoid flush on incomplete/timeout if (metadata.end_of_burst and num_samps_sent == num_samps){ - this->tx_stream_on_off(false); + _io_impl->flush_send_buff(); } //handle the polling for underflow conditions diff --git a/host/lib/usrp/usrp1/usrp1_impl.hpp b/host/lib/usrp/usrp1/usrp1_impl.hpp index 057725394..28199ebe3 100644 --- a/host/lib/usrp/usrp1/usrp1_impl.hpp +++ b/host/lib/usrp/usrp1/usrp1_impl.hpp @@ -125,7 +125,6 @@ private: UHD_PIMPL_DECL(io_impl) _io_impl; void io_init(void); void rx_stream_on_off(bool); - void tx_stream_on_off(bool); void handle_overrun(size_t); //underrun and overrun poll intervals |