aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2011-02-02 15:47:33 -0800
committerJosh Blum <josh@joshknows.com>2011-02-02 15:47:33 -0800
commit231f7181345e59413613cb1ed4b9e1dc48bb12de (patch)
tree4650abfbe8cd3244a32ad8cd63696068fa8cd11a /host/lib/usrp
parentd46058d75c723402d7d135ff309afe4f00deca0c (diff)
downloaduhd-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')
-rw-r--r--host/lib/usrp/usrp1/io_impl.cpp16
-rw-r--r--host/lib/usrp/usrp1/usrp1_impl.hpp1
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