Changeset 4747

Show
Ignore:
Timestamp:
08/17/07 12:13:44 (6 years ago)
Author:
jgaeddert
Message:

minor support for metadata in USRP branch

Location:
platform/USRP/branches/USRP-metadata/src
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • platform/USRP/branches/USRP-metadata/src/USRP.cpp

    r4522 r4747  
    7979    rx_data_2_port = new standardInterfaces_i::complexShort_u("RX_Data_2", "DomainName1"); 
    8080 
     81    // Initialize meta data pointers, objects 
     82    rx_metadata_1 = new standardInterfaces::MetaData; 
     83    rx_metadata_2 = new standardInterfaces::MetaData; 
     84    tx_metadata   = new standardInterfaces::MetaData; 
     85    standardInterfaces::InitializeMetaData( *rx_metadata_1 ); 
     86    standardInterfaces::InitializeMetaData( *rx_metadata_2 ); 
     87    standardInterfaces::InitializeMetaData( *tx_metadata ); 
     88 
     89} 
     90 
     91// Destructor 
     92USRP_i::~USRP_i() { 
     93 
     94    // Delete port instances 
     95    delete rx_control_port; 
     96    delete tx_control_port; 
     97    delete tx_data_port; 
     98    delete rx_data_1_port; 
     99    delete rx_data_2_port; 
     100 
     101    // Delete metadata objects 
     102    delete rx_metadata_1; 
     103    delete rx_metadata_2; 
     104    delete tx_metadata; 
     105 
    81106} 
    82107 
     
    530555            Q[i/2] = (CORBA::Short) rx_buffer[i+1]; 
    531556        } 
    532         rx_data_1_port->pushPacket(I, Q); 
     557        // set rx_metadata_1 properties before passing 
     558        float f; // temporary placeholder for frequency 
     559        rx_control_port->get_frequency(0, f); 
     560        rx_metadata_1->carrier_frequency = f; 
     561        rx_metadata_1->sampling_frequency = 64e6f / float(usrp_rx->decim_rate()); 
     562 
     563        // push data to output port 
     564        rx_data_1_port->pushPacket(I, Q, *rx_metadata_1); 
    533565 
    534566        if (rx_packet_count != -1) 
     
    598630    while (tx_active) { 
    599631 
    600         tx_data_port->getData(I_in, Q_in); 
     632        tx_data_port->getData(I_in, Q_in, tx_metadata); 
    601633 
    602634        unsigned int data_length(I_in->length()); 
  • platform/USRP/branches/USRP-metadata/src/USRP.h

    r4522 r4747  
    7676    USRP_RX_Control_i();  // No default constructor 
    7777    USRP_RX_Control_i(const USRP_RX_Control_i &); // No copying 
     78 
     79    /// return pointer to daughterboard 
     80    void get_db_reference(unsigned long channel, db_base *& db); 
    7881  
    7982    USRP_i *usrp; 
     
    127130    ~TX_data_i(); 
    128131 
    129     void pushPacket(const PortTypes::ShortSequence &I, const PortTypes::ShortSequence &Q); 
     132    void pushPacket( 
     133            const PortTypes::ShortSequence &I, 
     134            const PortTypes::ShortSequence &Q, 
     135            const standardInterfaces::MetaData &packet_data); 
    130136 
    131137 private: 
     
    142148 
    143149// Main USRP device definition 
    144 void rx_data_process(void *data); 
    145150 
    146151class USRP_i : public virtual Device_impl 
     
    150155    friend class USRP_TX_Control_i; 
    151156 
    152     friend void rx_data_process(void *); 
    153  
    154157  public: 
    155158    USRP_i(char *id, char *label, char *profile); 
     159 
     160    /// Destructor 
     161    ~USRP_i(); 
    156162 
    157163    static void do_rx_data_process(void *u) {((USRP_i *)u)->rx_data_process(); }; 
     
    179185    USRP_i(const USRP_i&);  // No copying 
    180186 
    181     // RX data processing thread 
    182     //    static void rx_data_process(void * data); ///\todo verify statis is the online way 
    183  
    184187    /// Prints warning about unsupported USRP daughter boards 
    185188    void PrintDaughterboardWarning(const char * db_name); 
     
    191194    standardInterfaces_i::complexShort_u* rx_data_1_port; 
    192195    standardInterfaces_i::complexShort_u* rx_data_2_port; 
     196    standardInterfaces::MetaData* rx_metadata_1; 
     197    standardInterfaces::MetaData* rx_metadata_2; 
    193198 
    194199    standardInterfaces_i::complexShort_p* tx_data_port; 
     200    standardInterfaces::MetaData* tx_metadata; 
    195201 
    196202    // usrp variables 
     
    213219    omni_thread *tx_thread; 
    214220 
     221    /// Main RX processing thread 
    215222    void rx_data_process(); 
     223 
     224    /// Main TX processing thread 
    216225    void tx_data_process(); 
    217226 
  • platform/USRP/branches/USRP-metadata/src/port_impl.cpp

    r4522 r4747  
    303303} 
    304304 
     305void USRP_RX_Control_i::get_db_reference(unsigned long channel, db_base *& db) 
     306{ 
     307     
     308} 
     309 
    305310void USRP_RX_Control_i::set_frequency(unsigned long channel, float f) 
    306311{ 
     
    322327     
    323328    if (!db) { 
    324         DEBUG(1, USRP, "Attempt to set frequency for slot with no board."); 
    325         return;  // No daughter board present 
     329        // No daughterboard present 
     330        std::cerr << "ERROR: USRP_RX_Control_i::get_frequency(): " << std::endl 
     331                  << "  Attempt to set frequency for slot with no board (channel " 
     332                  << channel << ")" << std::endl; 
     333        ///\todo: throw better exception 
     334        throw 0; 
    326335    } 
    327336 
     
    363372void USRP_RX_Control_i::get_frequency(unsigned long channel, float &f) 
    364373{ 
    365      f = usrp->usrp_rx->rx_freq(channel); 
     374    float ddc_freq = usrp->usrp_rx->rx_freq(channel); // DDC frequency 
     375 
     376    // Get local oscillator frequency on daughterboard (if available) 
     377    float lo_freq(0.0f); 
     378    db_base * db(NULL); 
     379    get_db_reference(channel, db); 
     380    if (!db) { 
     381        // No daughterboard present 
     382        std::cerr << "ERROR: USRP_RX_Control_i::get_frequency(): " << std::endl 
     383                  << "  Attempt to get frequency for slot with no board (channel " 
     384                  << channel << ")" << std::endl; 
     385        ///\todo: throw better exception 
     386        throw 0; 
     387    } 
     388 
     389    if (db->db_has_lo()) { 
     390        // get lo_freq here 
     391        // db->get_db_freq(lo_freq) 
     392    } 
     393 
     394    f = ddc_freq + lo_freq; 
    366395} 
    367396