diff options
author | jcorgan | 2009-02-10 16:35:17 +0000 |
---|---|---|
committer | jcorgan | 2009-02-10 16:35:17 +0000 |
commit | 776f05255fbed9d7beecf03759215641c74188c5 (patch) | |
tree | fb86fce24ebb455217c165239006c5f8fcc9da32 /usrp2/host | |
parent | 9f6bc9d5da0e504008b7d692fd6c9cbe55753d90 (diff) | |
download | gnuradio-776f05255fbed9d7beecf03759215641c74188c5.tar.gz gnuradio-776f05255fbed9d7beecf03759215641c74188c5.tar.bz2 gnuradio-776f05255fbed9d7beecf03759215641c74188c5.zip |
Merged r10418:10423 from jcorgan/pps into trunk. Adds usrp2::sync_every_pps
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10424 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'usrp2/host')
-rw-r--r-- | usrp2/host/include/usrp2/usrp2.h | 7 | ||||
-rw-r--r-- | usrp2/host/lib/usrp2.cc | 6 | ||||
-rw-r--r-- | usrp2/host/lib/usrp2_impl.cc | 24 | ||||
-rw-r--r-- | usrp2/host/lib/usrp2_impl.h | 1 |
4 files changed, 37 insertions, 1 deletions
diff --git a/usrp2/host/include/usrp2/usrp2.h b/usrp2/host/include/usrp2/usrp2.h index 2186ce90b..14f04fafd 100644 --- a/usrp2/host/include/usrp2/usrp2.h +++ b/usrp2/host/include/usrp2/usrp2.h @@ -372,11 +372,16 @@ namespace usrp2 { bool burn_mac_addr(const std::string &new_addr); /*! - * Reset master time to 0 at next PPS rising edge + * Reset master time to 0 at next PPS edge */ bool sync_to_pps(); /*! + * Reset master time to 0 at every PPS edge + */ + bool sync_every_pps(bool enable); + + /*! * Read memory from Wishbone bus as 32-bit words. Handles endian swapping if needed. * * \param addr 32-bit aligned address. Only the lower 16-bits are significant. diff --git a/usrp2/host/lib/usrp2.cc b/usrp2/host/lib/usrp2.cc index 6a54c6da6..77c1e3374 100644 --- a/usrp2/host/lib/usrp2.cc +++ b/usrp2/host/lib/usrp2.cc @@ -413,6 +413,12 @@ namespace usrp2 { return d_impl->sync_to_pps(); } + bool + usrp2::sync_every_pps(bool enable) + { + return d_impl->sync_every_pps(enable); + } + std::vector<uint32_t> usrp2::peek32(uint32_t addr, uint32_t words) { diff --git a/usrp2/host/lib/usrp2_impl.cc b/usrp2/host/lib/usrp2_impl.cc index 4b4de024f..ea50a709c 100644 --- a/usrp2/host/lib/usrp2_impl.cc +++ b/usrp2/host/lib/usrp2_impl.cc @@ -77,6 +77,8 @@ namespace usrp2 { case OP_SET_TX_LO_OFFSET_REPLY: return "OP_SET_TX_LO_OFFSET_REPLY"; case OP_SET_RX_LO_OFFSET: return "OP_SET_RX_LO_OFFSET"; case OP_SET_RX_LO_OFFSET_REPLY: return "OP_SET_RX_LO_OFFSET_REPLY"; + case OP_SYNC_EVERY_PPS: return "OP_SYNC_EVERY_PPS"; + case OP_SYNC_EVERY_PPS_REPLY: return "OP_SYNC_EVERY_PPS_REPLY"; default: char buf[64]; @@ -1128,6 +1130,28 @@ namespace usrp2 { return ntohx(reply.ok) == 1; } + bool + usrp2::impl::sync_every_pps(bool enable) + { + op_generic_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_SYNC_EVERY_PPS; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.ok = enable ? 1 : 0; + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + return ntohx(reply.ok) == 1; + } + std::vector<uint32_t> usrp2::impl::peek32(uint32_t addr, uint32_t words) { diff --git a/usrp2/host/lib/usrp2_impl.h b/usrp2/host/lib/usrp2_impl.h index dfd054c03..6822f8f97 100644 --- a/usrp2/host/lib/usrp2_impl.h +++ b/usrp2/host/lib/usrp2_impl.h @@ -180,6 +180,7 @@ namespace usrp2 { bool burn_mac_addr(const std::string &new_addr); bool sync_to_pps(); + bool sync_every_pps(bool enable); std::vector<uint32_t> peek32(uint32_t addr, uint32_t words); bool poke32(uint32_t addr, const std::vector<uint32_t> &data); }; |