commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r5899 - gnuradio/branches/developers/gnychis/inband/us


From: gnychis
Subject: [Commit-gnuradio] r5899 - gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband
Date: Tue, 3 Jul 2007 13:12:07 -0600 (MDT)

Author: gnychis
Date: 2007-07-03 13:12:07 -0600 (Tue, 03 Jul 2007)
New Revision: 5899

Modified:
   
gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband/qa_inband_usrp_server.cc
   
gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband/usrp_tx_stub.cc
Log:
added functionality to pass back multiple CS packet responses in a single USB
packet from the TX stub to the RX stub.  Have not tested boundaries yet.


Modified: 
gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband/qa_inband_usrp_server.cc
===================================================================
--- 
gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband/qa_inband_usrp_server.cc
   2007-07-03 18:38:10 UTC (rev 5898)
+++ 
gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband/qa_inband_usrp_server.cc
   2007-07-03 19:12:07 UTC (rev 5899)
@@ -1105,7 +1105,7 @@
   : mb_mblock(runtime, instance_name, user_arg)
 { 
   d_nrecvd=0;
-  d_nmsgs_to_recv = 5;
+  d_nmsgs_to_recv = 7;
   d_nstatus=0;
   d_nstatus_to_recv = 50;
   
@@ -1195,14 +1195,16 @@
                             pmt_list2(s_op_delay, 
                                       pmt_list1(pmt_from_long(0x7))))));
 
-  pmt_t subpackets = pmt_list4(
+  pmt_t subpackets = pmt_list5(
                         pmt_list2(s_op_ping_fixed, pmt_list2(PMT_NIL, 
pmt_from_long(0))),
                         pmt_list2(s_op_delay, pmt_list1(pmt_from_long(0x7))),
                         pmt_list2(s_op_write_reg_masked, 
pmt_list3(pmt_from_long(3),
                                                                    
pmt_from_long(4),
                                                                    
pmt_from_long(5))),
                         pmt_list2(s_op_write_reg, pmt_list2(pmt_from_long(3),
-                                                            pmt_from_long(4)))
+                                                            pmt_from_long(4))),
+                        pmt_list2(s_op_read_reg, pmt_list2(PMT_NIL,
+                                                           pmt_from_long(6)))
                      );
 
   d_tx->send(s_cmd_to_control_channel, 

Modified: 
gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband/usrp_tx_stub.cc
===================================================================
--- 
gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband/usrp_tx_stub.cc
    2007-07-03 18:38:10 UTC (rev 5898)
+++ 
gnuradio/branches/developers/gnychis/inband/usrp/host/lib/inband/usrp_tx_stub.cc
    2007-07-03 19:12:07 UTC (rev 5899)
@@ -128,7 +128,21 @@
   
   long payload_len = pkt.payload_len();
   long curr_payload = 0;
+      
+  size_t ignore;
 
+  // There is the possibility that the responses for a single USB packet full 
of
+  // CS packets will not fit back in a single USB packet, considering some
+  // responses are greater than their commands (read registers).
+ new_packet:
+  pmt_t v_pkt = pmt_make_u8vector(sizeof(transport_pkt), 0);
+  
+  transport_pkt *q_pkt =
+    (transport_pkt *) pmt_u8vector_writeable_elements(v_pkt, ignore);
+      
+  q_pkt->set_header(0, 0x1f, 0, 0);
+  q_pkt->set_timestamp(0xffffffff);
+
   // We dispatch based on the control packet type, however we can extract the
   // opcode and the length immediately which is consistent in all responses.
   //
@@ -148,22 +162,12 @@
     //----------------- PING FIXED ------------------//
     if(pmt_eq(op_symbol, s_op_ping_fixed)) {
 
-      size_t ignore;
-
       long rid = pmt_to_long(pmt_nth(1, sub_packet));
       long pingval = pmt_to_long(pmt_nth(2, sub_packet));
 
-      pmt_t v_pkt = pmt_make_u8vector(sizeof(transport_pkt), 0);
-      
-      transport_pkt *q_pkt =
-        (transport_pkt *) pmt_u8vector_writeable_elements(v_pkt, ignore);
-
-      q_pkt->set_header(0, 0x1f, 0, 0);
-      q_pkt->set_timestamp(0xffffffff);
-
       // Generate a reply and put it in the queue for the RX stub to read
-      q_pkt->cs_ping_reply(rid, pingval);
-      d_cs_queue.push(pmt_list2(invocation_handle, v_pkt));
+      if(!q_pkt->cs_ping_reply(rid, pingval))
+        goto new_packet;
 
       if(verbose)
         std::cout << "[USRP_TX_STUB] Generated ping response "
@@ -182,17 +186,9 @@
       long reg_num = pmt_to_long(pmt_nth(2, sub_packet));
       long reg_val = 0xdeef;
 
-      pmt_t v_pkt = pmt_make_u8vector(sizeof(transport_pkt), 0);
-      
-      transport_pkt *q_pkt =
-        (transport_pkt *) pmt_u8vector_writeable_elements(v_pkt, ignore);
-
-      q_pkt->set_header(0, 0x1f, 0, 0);
-      q_pkt->set_timestamp(0xffffffff);
-
       // Generate a reply and put it in the queue for the RX stub to read
-      q_pkt->cs_read_reg_reply(rid, reg_num, reg_val);
-      d_cs_queue.push(pmt_list2(invocation_handle, v_pkt));
+      if(!q_pkt->cs_read_reg_reply(rid, reg_num, reg_val))
+        goto new_packet;
 
       if(verbose)
         std::cout << "[USRP_TX_STUB] Generated read register response "
@@ -250,6 +246,10 @@
     curr_payload += len + 2;
   }
 
+  // If the packet has data in the payload, it needs queued
+  if(q_pkt->payload_len() > 0)
+    d_cs_queue.push(pmt_list2(invocation_handle, v_pkt));
+
   return;
 }
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]