summaryrefslogtreecommitdiff
path: root/usrp2/host
diff options
context:
space:
mode:
authorjcorgan2009-02-10 16:35:17 +0000
committerjcorgan2009-02-10 16:35:17 +0000
commit776f05255fbed9d7beecf03759215641c74188c5 (patch)
treefb86fce24ebb455217c165239006c5f8fcc9da32 /usrp2/host
parent9f6bc9d5da0e504008b7d692fd6c9cbe55753d90 (diff)
downloadgnuradio-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.h7
-rw-r--r--usrp2/host/lib/usrp2.cc6
-rw-r--r--usrp2/host/lib/usrp2_impl.cc24
-rw-r--r--usrp2/host/lib/usrp2_impl.h1
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);
};