common_lib.h 4.84 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
/*******************************************************************************
    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
  
ghaddab's avatar
ghaddab committed
26
   Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
27 28 29 30

 *******************************************************************************/
 
 /** 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
#ifndef EXMIMO 
44 45 46
#define MAX_CARDS 1
#endif

47
#define USRP_GAIN_OFFSET (86.0)  // 86 calibrated for USRP B210 @ 2.6 GHz to get equivalent RS EPRE in OAI to SMBV100 output
Raymond Knopp's avatar
 
Raymond Knopp committed
48

Raymond Knopp's avatar
 
Raymond Knopp committed
49 50 51 52 53
typedef enum {
  max_gain=0,med_gain,byp_gain
} rx_gain_t;


Raymond Knopp's avatar
 
Raymond Knopp committed
54
typedef struct {
55 56
  /* Module ID for this configuration */
  int Mod_id;
Raymond Knopp's avatar
 
Raymond Knopp committed
57 58
  /* the sample rate for both transmit and receive. */
  double sample_rate;
Raymond Knopp's avatar
Raymond Knopp committed
59 60
  /* number of samples per RX/TX packet (USRP + Ethernet) */
  int samples_per_packet;
Raymond Knopp's avatar
 
Raymond Knopp committed
61 62 63 64 65
  /* 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
66
  double rx_freq[4];
Raymond Knopp's avatar
 
Raymond Knopp committed
67
  /* center frequency in Hz for TX */
Raymond Knopp's avatar
 
Raymond Knopp committed
68 69 70
  double tx_freq[4];
  /* mode for rxgain (ExpressMIMO2)*/
  rx_gain_t rxg_mode[4];
Raymond Knopp's avatar
 
Raymond Knopp committed
71
  /* gain for RX in dB */
Raymond Knopp's avatar
 
Raymond Knopp committed
72
  double rx_gain[4];
Raymond Knopp's avatar
 
Raymond Knopp committed
73
  /* gain for TX in dB */
Raymond Knopp's avatar
 
Raymond Knopp committed
74
  double tx_gain[4];
Raymond Knopp's avatar
 
Raymond Knopp committed
75 76 77 78
  /* RX bandwidth in Hz */
  double rx_bw;
  /* TX bandwidth in Hz */
  double tx_bw;
79
  /* RRH IP addr for Ethernet interface */
Raymond Knopp's avatar
 
Raymond Knopp committed
80
  char *rrh_ip;
81 82
  /* RRH port number for Ethernet interface */
  int rrh_port;
Raymond Knopp's avatar
 
Raymond Knopp committed
83 84
} openair0_config_t;

85 86 87 88 89 90 91 92 93
typedef struct {
  /* card id */
  int card;
  /* rf chain id */
  int chain;
} openair0_rf_map;



Raymond Knopp's avatar
 
Raymond Knopp committed
94
struct openair0_device_t {
95 96
  /* Module ID of this device */
  int Mod_id;
Raymond Knopp's avatar
 
Raymond Knopp committed
97

98 99 100
  /* RF frontend parameters set by application */
  openair0_config_t openair0_cfg;
  
Raymond Knopp's avatar
 
Raymond Knopp committed
101 102 103 104 105 106 107 108 109 110 111 112
  /* 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*/
Raymond Knopp's avatar
Raymond Knopp committed
113
  void (*trx_write_func)(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags);
Raymond Knopp's avatar
 
Raymond Knopp committed
114 115 116 117 118

  /* 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 */
Raymond Knopp's avatar
 
Raymond Knopp committed
119
  int (*trx_read_func)(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps,int cc);
Raymond Knopp's avatar
 
Raymond Knopp committed
120 121 122 123 124 125 126 127 128 129 130

  /* 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
131
openair0_timestamp get_usrp_time(openair0_device *device);
Raymond Knopp's avatar
 
Raymond Knopp committed
132
  int openair0_set_frequencies(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
133
int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
134 135

int openair0_set_gains(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
136
}
Raymond Knopp's avatar
 
Raymond Knopp committed
137 138
#else
int openair0_device_init(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
139
openair0_timestamp get_usrp_time(openair0_device *device);
Raymond Knopp's avatar
 
Raymond Knopp committed
140
int openair0_set_frequencies(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
141
int openair0_set_rx_frequencies(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
142
int openair0_set_gains(openair0_device* device, openair0_config_t *openair0_cfg);
Raymond Knopp's avatar
 
Raymond Knopp committed
143 144
#endif

Raymond Knopp's avatar
 
Raymond Knopp committed
145
#endif // COMMON_LIB_H
Raymond Knopp's avatar
 
Raymond Knopp committed
146