common_lib.h 3.72 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
/*******************************************************************************
    OpenAirInterface 
    Copyright(c) 1999 - 2014 Eurecom

    OpenAirInterface is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.


    OpenAirInterface is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with OpenAirInterface.The full GNU General Public License is 
    included in this distribution in the file called "COPYING". If not, 
    see <http://www.gnu.org/licenses/>.

   Contact Information
   OpenAirInterface Admin: openair_admin@eurecom.fr
   OpenAirInterface Tech : openair_tech@eurecom.fr
   OpenAirInterface Dev  : openair4g-devel@eurecom.fr
  
   Address      : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.

 *******************************************************************************/
 
 /** common_lib.h
Raymond Knopp's avatar
 
Raymond Knopp committed
31 32 33
 *
 * Author: HongliangXU : hong-liang-xu@agilent.com
 */
Raymond Knopp's avatar
 
Raymond Knopp committed
34 35 36
#ifndef COMMON_LIB_H
#define COMMON_LIB_H
#include <stdint.h>
Raymond Knopp's avatar
 
Raymond Knopp committed
37 38 39 40 41

typedef int64_t openair0_timestamp;
typedef struct openair0_device_t openair0_device;
/* structrue holds the parameters to configure USRP devices
 */
Raymond Knopp's avatar
 
Raymond Knopp committed
42 43 44 45 46 47

typedef enum {
  max_gain=0,med_gain,byp_gain
} rx_gain_t;


Raymond Knopp's avatar
 
Raymond Knopp committed
48 49 50 51 52 53 54 55
typedef struct {
  /* the sample rate for both transmit and receive. */
  double sample_rate;
  /* number of RX channels (=RX antennas) */
  int rx_num_channels;
  /* number of TX channels (=TX antennas) */
  int tx_num_channels;
  /* center frequency in Hz for RX */
Raymond Knopp's avatar
 
Raymond Knopp committed
56
  double rx_freq[4];
Raymond Knopp's avatar
 
Raymond Knopp committed
57
  /* center frequency in Hz for TX */
Raymond Knopp's avatar
 
Raymond Knopp committed
58 59 60
  double tx_freq[4];
  /* mode for rxgain (ExpressMIMO2)*/
  rx_gain_t rxg_mode[4];
Raymond Knopp's avatar
 
Raymond Knopp committed
61
  /* gain for RX in dB */
Raymond Knopp's avatar
 
Raymond Knopp committed
62
  double rx_gain[4];
Raymond Knopp's avatar
 
Raymond Knopp committed
63
  /* gain for TX in dB */
Raymond Knopp's avatar
 
Raymond Knopp committed
64
  double tx_gain[4];
Raymond Knopp's avatar
 
Raymond Knopp committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
  /* RX bandwidth in Hz */
  double rx_bw;
  /* TX bandwidth in Hz */
  double tx_bw;
} openair0_config_t;

struct openair0_device_t {
  /* USRP RF frontend parameters set by application */
  openair0_config_t openair0_cfg;

  /* Can be used by driver to hold internal structure*/
  void *priv;

  /* Functions API, which are called by the application*/

  /* Called to start the transceiver. Return 0 if OK, < 0 if error */
  int (*trx_start_func)(openair0_device *device);

  /* Write 'nsamps' samples on each channel from buffers. buff[0] is the array for
   * the first channel. timestamp if the time (in samples) at which the first sample
   * MUST be sent
   * use flags = 1 to send as timestamp specfied*/
  void (*trx_write_func)(openair0_device *device, openair0_timestamp timestamp, const void *buff, int nsamps, int flags);

  /* Read 'nsamps' samples from each channel to buffers. buff[0] is the array for
   * the first channel. *ptimestamp is the time at which the first sample
   * was received.
   * Return the number of sample read */
  int (*trx_read_func)(openair0_device *device, openair0_timestamp *ptimestamp, void *buff, int nsamps);

  /* Terminate operation of the transceiver -- free all associated resources */
  void (*trx_end_func)(openair0_device *device);
};


#ifdef __cplusplus
extern "C"
{
/* return 0 if OK, < 0 if error */
int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
105
openair0_timestamp get_usrp_time(openair0_device *device);
Raymond Knopp's avatar
 
Raymond Knopp committed
106
}
Raymond Knopp's avatar
 
Raymond Knopp committed
107 108
#else
int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
109
openair0_timestamp get_usrp_time(openair0_device *device);
Raymond Knopp's avatar
 
Raymond Knopp committed
110 111
#endif

Raymond Knopp's avatar
 
Raymond Knopp committed
112
#endif // COMMON_LIB_H