[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r8597 - in usrp2/trunk/host-ng: apps lib
From: |
eb |
Subject: |
[Commit-gnuradio] r8597 - in usrp2/trunk/host-ng: apps lib |
Date: |
Mon, 16 Jun 2008 21:39:35 -0600 (MDT) |
Author: eb
Date: 2008-06-16 21:39:35 -0600 (Mon, 16 Jun 2008)
New Revision: 8597
Modified:
usrp2/trunk/host-ng/apps/test_usrp2.cc
usrp2/trunk/host-ng/lib/usrp2_impl.cc
Log:
host code now notices control channel packets
Modified: usrp2/trunk/host-ng/apps/test_usrp2.cc
===================================================================
--- usrp2/trunk/host-ng/apps/test_usrp2.cc 2008-06-17 03:35:46 UTC (rev
8596)
+++ usrp2/trunk/host-ng/apps/test_usrp2.cc 2008-06-17 03:39:35 UTC (rev
8597)
@@ -23,15 +23,57 @@
#include <usrp2/usrp2.h>
#include <gr_realtime.h>
#include <iostream>
+#include <string.h>
+static void
+usage(const char *progname)
+{
+ const char *p = strrchr(progname, '/'); // drop leading directory path
+ if (p)
+ p++;
+
+ if (strncmp(p, "lt-", 3) == 0) // drop lt- libtool prefix
+ p += 3;
+
+ fprintf(stderr, "Usage: %s [options]\n\n", p);
+ fprintf(stderr, "Options:\n");
+ fprintf(stderr, " -h show this message and exit\n");
+ fprintf(stderr, " -e ETH_INTERFACE specify ethernet interface
[default=eth0]\n");
+ fprintf(stderr, " -m MAC_ADDR mac address of USRP2 HH:HH
[default=first one found]\n");
+}
+
int
main(int argc, char **argv)
{
+ // options and their defaults
+ const char *interface = "eth0";
+ const char *mac_addr_str = "";
+
+ int ch;
+
+ while ((ch = getopt(argc, argv, "he:m:")) != EOF){
+ switch (ch){
+
+ case 'e':
+ interface = optarg;
+ break;
+
+ case 'm':
+ mac_addr_str = optarg;
+ break;
+
+ case 'h':
+ default:
+ usage(argv[0]);
+ exit(1);
+ }
+ }
+
gr_rt_status_t rt = gr_enable_realtime_scheduling();
if (rt != RT_OK)
std::cerr << "Failed to enable realtime scheduling" << std::endl;
- usrp2::usrp2::sptr u2 = usrp2::usrp2::make("eth0");
+ usrp2::usrp2::sptr u2 = usrp2::usrp2::make(interface, mac_addr_str);
u2->set_rx_gain(1.0);
u2->set_rx_freq(0.0, NULL);
@@ -40,8 +82,10 @@
struct timespec ts;
ts.tv_sec = 10;
- nanosleep(&ts, 0);
- std::cout << std::endl;
+ ts.tv_nsec = 0;
+ int r = nanosleep(&ts, 0);
+ if (r == -1)
+ perror("nanosleep");
u2->stop_rx_streaming();
Modified: usrp2/trunk/host-ng/lib/usrp2_impl.cc
===================================================================
--- usrp2/trunk/host-ng/lib/usrp2_impl.cc 2008-06-17 03:35:46 UTC (rev
8596)
+++ usrp2/trunk/host-ng/lib/usrp2_impl.cc 2008-06-17 03:39:35 UTC (rev
8597)
@@ -28,6 +28,7 @@
#include "pktfilter.h"
#include <stdexcept>
#include <iostream>
+#include <stdio.h>
#define USRP2_IMPL_DEBUG 1
#if USRP2_IMPL_DEBUG
@@ -38,6 +39,36 @@
namespace usrp2 {
+ std::string
+ opcode_to_string(int opcode)
+ {
+ switch(opcode){
+ case OP_EOP: return "OP_EOP";
+ case OP_ID: return "OP_ID";
+ case OP_ID_REPLY: return "OP_ID_REPLY";
+ case OP_BURN_MAC_ADDR: return "OP_BURN_MAC_ADDR";
+ case OP_READ_TIME: return "OP_READ_TIME";
+ case OP_READ_TIME_REPLY: return "OP_READ_TIME_REPLY";
+ case OP_CONFIG_RX_V2: return "OP_CONFIG_RX_V2";
+ case OP_CONFIG_RX_REPLY_V2: return "OP_CONFIG_RX_REPLY_V2";
+ case OP_CONFIG_TX_V2: return "OP_CONFIG_TX_V2";
+ case OP_CONFIG_TX_REPLY_V2: return "OP_CONFIG_TX_REPLY_V2";
+ case OP_START_RX_STREAMING: return "OP_START_RX_STREAMING";
+ case OP_STOP_RX: return "OP_STOP_RX";
+ case OP_START_RX: return "OP_START_RX";
+ case OP_CONFIG_TX: return "OP_CONFIG_TX";
+ case OP_WRITE_REG: return "OP_WRITE_REG";
+ case OP_WRITE_REG_MASKED: return "OP_WRITE_REG_MASKED";
+ case OP_READ_REG: return "OP_READ_REG";
+ case OP_READ_REG_REPLY: return "OP_READ_REG_REPLY";
+ default:
+ char buf[64];
+ snprintf(buf, sizeof(buf), "<unknown opcode: %d>", opcode);
+ return buf;
+ }
+ }
+
+
usrp2::impl::impl(const std::string &ifc, const std::string &addr)
: d_buffer(new eth_buffer()), d_pf(0), d_bg_thread(0), d_bg_running(false),
d_rx_decim(0), d_rx_seqno(-1), d_tx_seqno(0), d_next_rid(0),
@@ -353,26 +384,39 @@
unsigned int
usrp2::impl::operator()(const void *base, unsigned int len)
{
- u2_eth_samples_t *pkt = (u2_eth_samples_t *)base;
+ u2_eth_samples_t *pkt = (u2_eth_samples_t *)base;
+ int chan = u2p_chan(&pkt->hdrs.fixed);
+
+ if (chan == CONTROL_CHAN){ // control packets
+ // point to beginning of payload (subpackets)
+ unsigned char *p = ((unsigned char *) pkt) + sizeof(u2_eth_packet_t);
+
+ // FIXME iterate over payload, handling more than a single
+ // subpacket, when (if?) the firmware starts sending them
+
+ int opcode = p[0];
+ std::cerr << "control_packet: " << opcode_to_string(opcode) << std::endl;
+ }
+ else { // data packets
+ d_num_rx_frames++;
+ d_num_rx_bytes += len;
- d_num_rx_frames++;
- d_num_rx_bytes += len;
-
- if (d_rx_seqno != -1) {
- int expected_seqno = (d_rx_seqno + 1) & 0xFF;
- int seqno = pkt->hdrs.thdr.seqno;
+ if (d_rx_seqno != -1) {
+ int expected_seqno = (d_rx_seqno + 1) & 0xFF;
+ int seqno = pkt->hdrs.thdr.seqno;
- if (seqno != expected_seqno) {
- ::write(2, "uS", 2); // missing sequence number
- int missing = expected_seqno - seqno;
- if (missing < 0)
- missing += 256;
+ if (seqno != expected_seqno) {
+ ::write(2, "uS", 2); // missing sequence number
+ int missing = expected_seqno - seqno;
+ if (missing < 0)
+ missing += 256;
- d_num_rx_lost += missing;
+ d_num_rx_lost += missing;
+ }
}
+ d_rx_seqno = pkt->hdrs.thdr.seqno;
}
-
- d_rx_seqno = pkt->hdrs.thdr.seqno;
+
return 0;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r8597 - in usrp2/trunk/host-ng: apps lib,
eb <=