diff options
author | Josh Blum <josh@joshknows.com> | 2011-07-13 17:25:40 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2011-07-13 17:25:40 -0700 |
commit | 7e1b2a0e3c014bc23aaa7a045efb5f1109818051 (patch) | |
tree | 748f2f0cb78d133a478f61a14b7a18a4de560673 /host/lib/usrp/e100 | |
parent | 9d470d5db39c75308f3ac15a8512f08b714b4ee4 (diff) | |
download | uhd-7e1b2a0e3c014bc23aaa7a045efb5f1109818051.tar.gz uhd-7e1b2a0e3c014bc23aaa7a045efb5f1109818051.tar.bz2 uhd-7e1b2a0e3c014bc23aaa7a045efb5f1109818051.zip |
uhd: added tasks to simplify thread spawning use cases
Diffstat (limited to 'host/lib/usrp/e100')
-rw-r--r-- | host/lib/usrp/e100/io_impl.cpp | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/host/lib/usrp/e100/io_impl.cpp b/host/lib/usrp/e100/io_impl.cpp index 69ca214dc..a10b3ffb3 100644 --- a/host/lib/usrp/e100/io_impl.cpp +++ b/host/lib/usrp/e100/io_impl.cpp @@ -24,12 +24,13 @@ #include "e100_regs.hpp" #include <uhd/utils/msg.hpp> #include <uhd/utils/log.hpp> +#include <uhd/utils/tasks.hpp> #include <uhd/utils/thread_priority.hpp> #include <uhd/transport/bounded_buffer.hpp> #include <boost/bind.hpp> #include <boost/format.hpp> +#include <boost/bind.hpp> #include <boost/thread/thread.hpp> -#include <boost/thread/barrier.hpp> #include <poll.h> //poll #include <fcntl.h> //open, close #include <sstream> @@ -51,11 +52,6 @@ struct e100_impl::io_impl{ false_alarm(0), async_msg_fifo(100/*messages deep*/) { /* NOP */ } - ~io_impl(void){ - recv_pirate_crew.interrupt_all(); - recv_pirate_crew.join_all(); - } - double tick_rate; //set by update tick rate method e100_ctrl::sptr iface; //so handle irq can peek and poke void handle_irq(void); @@ -70,11 +66,8 @@ struct e100_impl::io_impl{ //a pirate's life is the life for me! void recv_pirate_loop( - boost::barrier &spawn_barrier, spi_iface::sptr //keep a sptr to iface which shares gpio147 ){ - spawn_barrier.wait(); - //open the GPIO and set it up for an IRQ std::ofstream edge_file("/sys/class/gpio/gpio147/edge"); edge_file << "rising" << std::endl << std::flush; @@ -94,7 +87,7 @@ struct e100_impl::io_impl{ ::close(fd); } bounded_buffer<async_metadata_t> async_msg_fifo; - boost::thread_group recv_pirate_crew; + task::sptr pirate_task; }; void e100_impl::io_impl::handle_irq(void){ @@ -191,12 +184,9 @@ void e100_impl::io_init(void){ _fpga_ctrl->poke32(E100_REG_SR_ERR_CTRL, 1 << 1); //start //spawn a pirate, yarrr! - boost::barrier spawn_barrier(2); - _io_impl->recv_pirate_crew.create_thread(boost::bind( - &e100_impl::io_impl::recv_pirate_loop, _io_impl.get(), - boost::ref(spawn_barrier), _aux_spi_iface + _io_impl->pirate_task = task::make(boost::bind( + &e100_impl::io_impl::recv_pirate_loop, _io_impl.get(), _aux_spi_iface )); - spawn_barrier.wait(); //init some handler stuff _io_impl->recv_handler.set_vrt_unpacker(&vrt::if_hdr_unpack_le); |