From e2fcb815141b05205ea9334e2db78f9ceffa62c3 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Thu, 12 Aug 2010 16:27:57 -0700 Subject: Added host-side support for UART messaging. Have not yet added GPS control library. Debug crap in mboard_impl.cpp constructor. --- host/lib/usrp/usrp2/usrp2_iface.cpp | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'host/lib/usrp/usrp2/usrp2_iface.cpp') diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp index 44aef2a34..aa16865c1 100644 --- a/host/lib/usrp/usrp2/usrp2_iface.cpp +++ b/host/lib/usrp/usrp2/usrp2_iface.cpp @@ -171,6 +171,48 @@ public: return result; } +/*********************************************************************** + * UART + **********************************************************************/ + void write_uart(boost::uint8_t dev, const byte_vector_t &buf){ + //setup the out data + usrp2_ctrl_data_t out_data; + out_data.id = htonl(USRP2_CTRL_ID_HEY_WRITE_THIS_UART_FOR_ME_BRO); + out_data.data.uart_args.dev = dev; + out_data.data.uart_args.bytes = buf.size(); + + //limitation of uart transaction size + UHD_ASSERT_THROW(buf.size() <= sizeof(out_data.data.uart_args.data)); + + //copy in the data + std::copy(buf.begin(), buf.end(), out_data.data.uart_args.data); + + //send and recv + usrp2_ctrl_data_t in_data = this->ctrl_send_and_recv(out_data); + UHD_ASSERT_THROW(ntohl(in_data.id) == USRP2_CTRL_ID_MAN_I_TOTALLY_WROTE_THAT_UART_DUDE); + } + + byte_vector_t read_uart(boost::uint8_t dev, size_t num_bytes){ + //setup the out data + usrp2_ctrl_data_t out_data; + out_data.id = htonl(USRP2_CTRL_ID_SO_LIKE_CAN_YOU_READ_THIS_UART_BRO); + out_data.data.uart_args.dev = dev; + out_data.data.uart_args.bytes = num_bytes; + + //limitation of uart transaction size + UHD_ASSERT_THROW(num_bytes <= sizeof(out_data.data.uart_args.data)); + + //send and recv + usrp2_ctrl_data_t in_data = this->ctrl_send_and_recv(out_data); + UHD_ASSERT_THROW(ntohl(in_data.id) == USRP2_CTRL_ID_I_HELLA_READ_THAT_UART_DUDE); + //UHD_ASSERT_THROW(in_data.data.uart_args.bytes = num_bytes); + + //copy out the data + byte_vector_t result(num_bytes); + std::copy(in_data.data.uart_args.data, in_data.data.uart_args.data + num_bytes, result.begin()); + return result; + } + /*********************************************************************** * Send/Recv over control **********************************************************************/ -- cgit v1.2.3