[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 04/148: Hosekeeping after control/data sepa
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 04/148: Hosekeeping after control/data separation. |
Date: |
Mon, 15 Aug 2016 00:47:19 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
nwest pushed a commit to annotated tag old_usrp_devel_udp
in repository gnuradio.
commit 96976ff13bf28aa6047849c89f985bcf8d2682f9
Author: Josh Blum <address@hidden>
Date: Fri Oct 30 15:32:44 2009 -0700
Hosekeeping after control/data separation.
---
usrp2/firmware/apps/app_common_v2.c | 41 +++---------------
usrp2/host/lib/usrp2_impl.cc | 83 ++++++++++++++++---------------------
usrp2/host/lib/usrp2_impl.h | 5 +--
3 files changed, 43 insertions(+), 86 deletions(-)
diff --git a/usrp2/firmware/apps/app_common_v2.c
b/usrp2/firmware/apps/app_common_v2.c
index f676ff2..c6459ca 100644
--- a/usrp2/firmware/apps/app_common_v2.c
+++ b/usrp2/firmware/apps/app_common_v2.c
@@ -602,47 +602,18 @@ eth_pkt_inspector(dbsm_t *sm, int bufno)
u2_eth_packet_t *pkt = (u2_eth_packet_t *) buffer_ram(bufno);
size_t byte_len = (buffer_pool_status->last_line[bufno] - 3) * 4;
- //static size_t last_len = 0;
-
- // hal_toggle_leds(0x1);
-
// inspect rcvd frame and figure out what do do.
+ switch (pkt->ehdr.ethertype){
+
+ case U2_DATA_ETHERTYPE:
+ return false; // pass it on to Tx DSP
- if (pkt->ehdr.ethertype == U2_CTRL_ETHERTYPE){
+ case U2_CTRL_ETHERTYPE:
handle_control_chan_frame(pkt, byte_len);
return true;
- }
-
- if (pkt->ehdr.ethertype != U2_DATA_ETHERTYPE)
- return true; // ignore, probably bogus PAUSE frame from MAC
-
- int chan = u2p_chan(&pkt->fixed);
-
- switch (chan){
- case 0:
- default:
-#if 0
- if (last_len != 0){
- if (byte_len != last_len){
- printf("Len: %d last: %d\n", byte_len, last_len);
- }
- }
- last_len = byte_len;
-
- if((pkt->thdr.seqno) == exp_seqno){
- exp_seqno++;
- //putchar('.');
- }
- else {
- // putchar('S');
- //printf("S%d %d ",exp_seqno,pkt->thdr.seqno);
- exp_seqno = pkt->thdr.seqno + 1;
- }
-#endif
- return false; // pass it on to Tx DSP
- break;
}
+ return true; // ignore, probably bogus PAUSE frame from MAC
}
/*
diff --git a/usrp2/host/lib/usrp2_impl.cc b/usrp2/host/lib/usrp2_impl.cc
index 2412d4a..514b6ca 100644
--- a/usrp2/host/lib/usrp2_impl.cc
+++ b/usrp2/host/lib/usrp2_impl.cc
@@ -277,35 +277,36 @@ namespace usrp2 {
}
void
- usrp2::impl::init_et_hdrs(u2_eth_packet_t *p, const std::string &dst,
unsigned short ethertype)
+ usrp2::impl::init_etf_data_hdrs(u2_eth_packet_t *p, const std::string &dst,
+ int word0_flags, int chan, uint32_t timestamp)
{
- p->ehdr.ethertype = htons(ethertype);
+ p->ehdr.ethertype = htons(U2_DATA_ETHERTYPE);
parse_mac_addr(dst, &p->ehdr.dst);
memcpy(&p->ehdr.src, d_eth_data->mac(), 6);
p->thdr.flags = 0; // FIXME transport header values?
p->thdr.seqno = d_tx_seqno++;
p->thdr.ack = 0;
+ u2p_set_word0(&p->fixed, word0_flags, chan);
+ u2p_set_timestamp(&p->fixed, timestamp);
}
- void
- usrp2::impl::init_etf_hdrs(u2_eth_packet_t *p, const std::string &dst,
- int word0_flags, int chan, uint32_t timestamp)
- {
- init_et_hdrs(p, dst, (chan == CONTROL_CHAN) ? U2_CTRL_ETHERTYPE :
U2_DATA_ETHERTYPE);
- u2p_set_word0(&p->fixed, word0_flags, chan);
+ void
+ usrp2::impl::init_etf_ctrl_hdrs(u2_eth_packet_t *p, const std::string &dst,
int word0_flags, uint32_t timestamp){
+ p->ehdr.ethertype = htons(U2_CTRL_ETHERTYPE);
+ parse_mac_addr(dst, &p->ehdr.dst);
+ memcpy(&p->ehdr.src, d_eth_data->mac(), 6);
+ p->thdr.flags = 0; // FIXME transport header values?
+ p->thdr.seqno = 0;
+ p->thdr.ack = 0;
+ u2p_set_word0(&p->fixed, word0_flags, CONTROL_CHAN);
u2p_set_timestamp(&p->fixed, timestamp);
-
- if (chan == CONTROL_CHAN) { // no sequence numbers, back it out
- p->thdr.seqno = 0;
- d_tx_seqno--;
- }
}
void
usrp2::impl::init_config_rx_v2_cmd(op_config_rx_v2_cmd *cmd)
{
memset(cmd, 0, sizeof(*cmd));
- init_etf_hdrs(&cmd->h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd->h, d_addr, 0, -1);
cmd->op.opcode = OP_CONFIG_RX_V2;
cmd->op.len = sizeof(cmd->op);
cmd->op.rid = d_next_rid++;
@@ -317,7 +318,7 @@ namespace usrp2 {
usrp2::impl::init_config_tx_v2_cmd(op_config_tx_v2_cmd *cmd)
{
memset(cmd, 0, sizeof(*cmd));
- init_etf_hdrs(&cmd->h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd->h, d_addr, 0, -1);
cmd->op.opcode = OP_CONFIG_TX_V2;
cmd->op.len = sizeof(cmd->op);
cmd->op.rid = d_next_rid++;
@@ -428,24 +429,10 @@ namespace usrp2 {
data_handler::result
usrp2::impl::operator()(const void *base, size_t len)
{
- u2_eth_samples_t *pkt = (u2_eth_samples_t *)base;
-
- // FIXME unaligned load!
- int chan = u2p_chan(&pkt->hdrs.fixed);
-
- if (chan == CONTROL_CHAN) { // control packets
- DEBUG_LOG("c");
- return handle_control_packet(base, len);
- }
- else { // data packets
-
if (d_dont_enqueue) // toss packet
- return data_handler::RELEASE;
+ return data_handler::RELEASE;
return handle_data_packet(base, len);
- }
-
- // not reached
}
data_handler::result
@@ -568,7 +555,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_SET_RX_LO_OFFSET;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -695,7 +682,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_START_RX_STREAMING;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -744,7 +731,7 @@ namespace usrp2 {
omni_mutex_lock l(d_channel_rings_mutex);
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_STOP_RX;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -868,7 +855,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_SET_TX_LO_OFFSET;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1068,7 +1055,7 @@ namespace usrp2 {
flags |= U2P_TX_END_OF_BURST;
}
- init_etf_hdrs(&hdrs, d_addr, flags, channel, timestamp);
+ init_etf_data_hdrs(&hdrs, d_addr, flags, channel, timestamp);
// Avoid short packet by splitting last two packets if reqd
size_t i;
@@ -1108,7 +1095,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_CONFIG_MIMO;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1168,7 +1155,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_BURN_MAC_ADDR;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1207,7 +1194,7 @@ namespace usrp2 {
op_dboard_info_reply_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_DBOARD_INFO;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1234,7 +1221,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_SYNC_TO_PPS;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1255,7 +1242,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_SYNC_EVERY_PPS;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1292,7 +1279,7 @@ namespace usrp2 {
size_t bytes = words*wlen;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_PEEK;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1348,7 +1335,7 @@ namespace usrp2 {
cmd = (op_poke_cmd *)malloc(l);
//fprintf(stderr, "cmd=%p l=%i\n", cmd, l);
memset(cmd, 0, l);
- init_etf_hdrs(&cmd->h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd->h, d_addr, 0, -1);
cmd->op.opcode = OP_POKE;
cmd->op.len = sizeof(cmd->op)+bytes;
cmd->op.rid = d_next_rid++;
@@ -1385,7 +1372,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_RESET_DB;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1411,7 +1398,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_GPIO_SET_DDR;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1445,7 +1432,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_GPIO_SET_SELS;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1473,7 +1460,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_GPIO_WRITE;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1502,7 +1489,7 @@ namespace usrp2 {
op_gpio_read_reply_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_GPIO_READ;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
@@ -1539,7 +1526,7 @@ namespace usrp2 {
op_generic_t reply;
memset(&cmd, 0, sizeof(cmd));
- init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1);
+ init_etf_ctrl_hdrs(&cmd.h, d_addr, 0, -1);
cmd.op.opcode = OP_GPIO_STREAM;
cmd.op.len = sizeof(cmd.op);
cmd.op.rid = d_next_rid++;
diff --git a/usrp2/host/lib/usrp2_impl.h b/usrp2/host/lib/usrp2_impl.h
index 4ff256b..97aa3d8 100644
--- a/usrp2/host/lib/usrp2_impl.h
+++ b/usrp2/host/lib/usrp2_impl.h
@@ -106,9 +106,8 @@ namespace usrp2 {
}
static bool parse_mac_addr(const std::string &s, u2_mac_addr_t *p);
- void init_et_hdrs(u2_eth_packet_t *p, const std::string &dst, unsigned
short ethertype);
- void init_etf_hdrs(u2_eth_packet_t *p, const std::string &dst,
- int word0_flags, int chan, uint32_t timestamp);
+ void init_etf_data_hdrs(u2_eth_packet_t *p, const std::string &dst, int
word0_flags, int chan, uint32_t timestamp);
+ void init_etf_ctrl_hdrs(u2_eth_packet_t *p, const std::string &dst, int
word0_flags, uint32_t timestamp);
void stop_bg();
void init_config_rx_v2_cmd(op_config_rx_v2_cmd *cmd);
void init_config_tx_v2_cmd(op_config_tx_v2_cmd *cmd);
- [Commit-gnuradio] [gnuradio] annotated tag old_usrp_devel_udp created (now 90cd6f5), git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 01/148: Create separate raw Ethernet sockets and packet filters, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 03/148: Created a new thread for handling incoming control packets. TX/RX app is working with separate data and control ethernet types., git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 10/148: Fix incorrect comparison, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 13/148: usrp2: remove install data hook for usrp2_socket_opener, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 04/148: Hosekeeping after control/data separation.,
git <=
- [Commit-gnuradio] [gnuradio] 05/148: Removed references to U2_ETHERTYPE and CONTROL_CHAN. Moved non-txrx-related apps in firmware broken by this., git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 06/148: Common naming convention for control and data thread stuff., git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 02/148: working a separate ctrl ethernet device into the code, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 07/148: using boost threads for control and data, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 09/148: Refactored timeout handling, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 17/148: Began work on eth data transport class. Switched send in transport to use iovecs. Pass mac addr into eth transports rather than re-parsing., git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 14/148: Created transport abstraction. Implemented ethernet transport for control. Control transport works in usrp impl. Needs a lot of cleanup., git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 08/148: Removed omnithreads dependency from libusrp2, still debugging, git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 18/148: Added a callback into the channel ring enqueue and dequeue. This will allow the deqeue caller to make an arbitrary call when its done with the data. Currently, the enqueue caller makes this callback a release_frames., git, 2016/08/14
- [Commit-gnuradio] [gnuradio] 15/148: virtual destructor and shared ptr for transport, git, 2016/08/14