diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b74693bc..1cc2640e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,13 +56,16 @@ set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") ######################################################################## # Options ######################################################################## -option(STATIC_BUILD "Attempt to build with static linking" OFF) -option(RPATH "Enable RPATH" OFF) -option(ENABLE_VOLK "Enable VOLK SIMD library" OFF) -option(ENABLE_GUI "Enable GUI" ON) -option(ENABLE_SRSUE "Build srsUE application" ON) -option(ENABLE_SRSENB "Build srsENB application" ON) -option(ENABLE_BLADERF "Enable BladeRF" ON) +option(ENABLE_SRSUE "Build srsUE application" ON) +option(ENABLE_SRSENB "Build srsENB application" ON) + +option(ENABLE_VOLK "Enable use of VOLK SIMD library" OFF) +option(ENABLE_GUI "Enable GUI (using srsGUI)" ON) +option(ENABLE_BLADERF "Enable BladeRF" ON) + +option(BUILD_STATIC "Attempt to statically link external deps" OFF) +option(RPATH "Enable RPATH" OFF) + option(USE_LTE_RATES "Use standard LTE sampling rates" OFF) set(GCC_ARCH native CACHE STRING "GCC compile for specific architecture.") @@ -276,11 +279,9 @@ add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) ######################################################################## -# Macro to add -fPIC property to static libs +# Add -fPIC property to all targets ######################################################################## -macro(SRSLTE_SET_PIC) - set_target_properties(${ARGV} PROPERTIES COMPILE_FLAGS -fPIC) -endmacro(SRSLTE_SET_PIC) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) ######################################################################## # Print summary diff --git a/lib/examples/CMakeLists.txt b/lib/examples/CMakeLists.txt index 965f2706c..652a2c195 100644 --- a/lib/examples/CMakeLists.txt +++ b/lib/examples/CMakeLists.txt @@ -30,16 +30,20 @@ target_link_libraries(synch_file srslte_phy) # These can be compiled without UHD or graphics support ################################################################# -add_executable(pdsch_ue pdsch_ue.c) -target_link_libraries(pdsch_ue srslte_phy pthread) - -add_executable(pdsch_enodeb pdsch_enodeb.c) -target_link_libraries(pdsch_enodeb srslte_phy pthread) - if(RF_FOUND) + add_executable(pdsch_ue pdsch_ue.c) + target_link_libraries(pdsch_ue srslte_phy srslte_rf pthread) + add_executable(pdsch_enodeb pdsch_enodeb.c) + target_link_libraries(pdsch_enodeb srslte_phy srslte_rf pthread) else(RF_FOUND) add_definitions(-DDISABLE_RF) + + add_executable(pdsch_ue pdsch_ue.c) + target_link_libraries(pdsch_ue srslte_phy pthread) + + add_executable(pdsch_enodeb pdsch_enodeb.c) + target_link_libraries(pdsch_enodeb srslte_phy pthread) endif(RF_FOUND) find_package(SRSGUI) @@ -59,19 +63,19 @@ endif(SRSGUI_FOUND) if(RF_FOUND) add_executable(cell_search cell_search.c) - target_link_libraries(cell_search srslte_phy) + target_link_libraries(cell_search srslte_phy srslte_rf) add_executable(cell_measurement cell_measurement.c) - target_link_libraries(cell_measurement srslte_phy) + target_link_libraries(cell_measurement srslte_phy srslte_rf) add_executable(usrp_capture usrp_capture.c) - target_link_libraries(usrp_capture srslte_phy) + target_link_libraries(usrp_capture srslte_phy srslte_rf) add_executable(usrp_capture_sync usrp_capture_sync.c) - target_link_libraries(usrp_capture_sync srslte_phy) + target_link_libraries(usrp_capture_sync srslte_phy srslte_rf) add_executable(usrp_txrx usrp_txrx.c) - target_link_libraries(usrp_txrx srslte_phy) + target_link_libraries(usrp_txrx srslte_phy srslte_rf) message(STATUS " examples will be installed.") @@ -79,6 +83,4 @@ else(RF_FOUND) message(STATUS " examples will NOT BE INSTALLED.") endif(RF_FOUND) -# Add subdirectories -add_subdirectory(tutorial_examples) diff --git a/lib/examples/pdsch_ue.c b/lib/examples/pdsch_ue.c index f7487c529..72dc36731 100644 --- a/lib/examples/pdsch_ue.c +++ b/lib/examples/pdsch_ue.c @@ -558,7 +558,7 @@ int main(int argc, char **argv) { if ((srslte_ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { decode_pdsch = true; } else { - decode_pdsch = true; + decode_pdsch = false; } } if (decode_pdsch) { diff --git a/lib/examples/tutorial_examples/CMakeLists.txt b/lib/examples/tutorial_examples/CMakeLists.txt deleted file mode 100644 index 95c1f1cb7..000000000 --- a/lib/examples/tutorial_examples/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright 2013-2017 Software Radio Systems Limited -# -# This file is part of srsLTE -# -# srsLTE is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# srsLTE 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 Affero General Public License for more details. -# -# A copy of the GNU Affero General Public License can be found in -# the LICENSE file in the top-level directory of this distribution -# and at http://www.gnu.org/licenses/. -# - - -################################################################# -# EXAMPLES shown in WinnForum 2015 Tutorial -################################################################# - -if(SRSGUI_FOUND AND UHD_FOUND) - - add_executable(pss pss.c) - target_link_libraries(pss srslte_phy ${SRSGUI_LIBRARIES}) - - add_executable(simple_tx simple_tx.c) - target_link_libraries(simple_tx srslte_phy) - -endif(SRSGUI_FOUND AND UHD_FOUND) - diff --git a/lib/examples/tutorial_examples/pss.c b/lib/examples/tutorial_examples/pss.c deleted file mode 100644 index da487895c..000000000 --- a/lib/examples/tutorial_examples/pss.c +++ /dev/null @@ -1,399 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2015 Software Radio Systems Limited - * - * \section LICENSE - * - * This file is part of the srsLTE library. - * - * srsLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * srsLTE 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 Affero General Public License for more details. - * - * A copy of the GNU Affero General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "srslte/srslte.h" -#include "srslte/phy/rf/rf.h" - - -#ifndef DISABLE_GRAPHICS -void init_plots(); -void do_plots(float *corr, float energy, uint32_t size, cf_t ce[SRSLTE_PSS_LEN]); -void do_plots_sss(float *corr_m0, float *corr_m1); -#endif - - -bool disable_plots = false; -int cell_id = -1; -char *rf_args=""; -float rf_gain=40.0, rf_freq=-1.0; -int nof_frames = -1; -uint32_t fft_size=128; -float threshold = 0.4; -int N_id_2_sync = -1; -srslte_cp_t cp=SRSLTE_CP_NORM; - -void usage(char *prog) { - printf("Usage: %s [aedgtvnp] -f rx_frequency_hz -i cell_id\n", prog); - printf("\t-a RF args [Default %s]\n", rf_args); - printf("\t-g RF Gain [Default %.2f dB]\n", rf_gain); - printf("\t-n nof_frames [Default %d]\n", nof_frames); - printf("\t-l N_id_2 to sync [Default use cell_id]\n"); - printf("\t-e Extended CP [Default Normal]\n", fft_size); - printf("\t-s symbol_sz [Default %d]\n", fft_size); - printf("\t-t threshold [Default %.2f]\n", threshold); -#ifndef DISABLE_GRAPHICS - printf("\t-d disable plots [Default enabled]\n"); -#else - printf("\t plots are disabled. Graphics library not available\n"); -#endif - printf("\t-v srslte_verbose\n"); -} - -void parse_args(int argc, char **argv) { - int opt; - while ((opt = getopt(argc, argv, "adgetvsfil")) != -1) { - switch (opt) { - case 'a': - rf_args = argv[optind]; - break; - case 'g': - rf_gain = atof(argv[optind]); - break; - case 'f': - rf_freq = atof(argv[optind]); - break; - case 't': - threshold = atof(argv[optind]); - break; - case 'e': - cp = SRSLTE_CP_EXT; - break; - case 'i': - cell_id = atoi(argv[optind]); - break; - case 'l': - N_id_2_sync = atoi(argv[optind]); - break; - case 's': - fft_size = atoi(argv[optind]); - break; - case 'n': - nof_frames = atoi(argv[optind]); - break; - case 'd': - disable_plots = true; - break; - case 'v': - srslte_verbose++; - break; - default: - usage(argv[0]); - exit(-1); - } - } - if (cell_id < 0 || rf_freq < 0) { - usage(argv[0]); - exit(-1); - } -} - float m0_value, m1_value; - -int main(int argc, char **argv) { - cf_t *buffer; - int frame_cnt, n; - srslte_rf_t rf; - srslte_pss_synch_t pss; - srslte_cfo_t cfocorr, cfocorr64; - srslte_sss_synch_t sss; - int32_t flen; - int peak_idx, last_peak; - float peak_value; - float mean_peak; - uint32_t nof_det, nof_nodet, nof_nopeak, nof_nopeakdet; - cf_t ce[SRSLTE_PSS_LEN]; - - parse_args(argc, argv); - - if (N_id_2_sync == -1) { - N_id_2_sync = cell_id%3; - } - uint32_t N_id_2 = cell_id%3; - uint32_t N_id_1 = cell_id/3; - -#ifndef DISABLE_GRAPHICS - if (!disable_plots) - init_plots(); -#endif - - flen = 4800*(fft_size/64); - - buffer = malloc(sizeof(cf_t) * flen * 2); - if (!buffer) { - perror("malloc"); - exit(-1); - } - - if (srslte_pss_synch_init_fft(&pss, flen, fft_size)) { - fprintf(stderr, "Error initiating PSS\n"); - exit(-1); - } - - if (srslte_pss_synch_set_N_id_2(&pss, N_id_2_sync)) { - fprintf(stderr, "Error setting N_id_2=%d\n",N_id_2_sync); - exit(-1); - } - - srslte_cfo_init(&cfocorr, flen); - srslte_cfo_init(&cfocorr64, flen); - - if (srslte_sss_synch_init(&sss, fft_size)) { - fprintf(stderr, "Error initializing SSS object\n"); - return SRSLTE_ERROR; - } - - srslte_sss_synch_set_N_id_2(&sss, N_id_2); - - printf("Opening RF device...\n"); - if (srslte_rf_open(&rf, rf_args)) { - fprintf(stderr, "Error opening rf\n"); - exit(-1); - } - printf("N_id_2: %d\n", N_id_2); - printf("Set RX rate: %.2f MHz\n", srslte_rf_set_rx_srate(&rf, flen*2*100) / 1000000); - printf("Set RX gain: %.1f dB\n", srslte_rf_set_rx_gain(&rf, rf_gain)); - printf("Set RX freq: %.2f MHz\n", srslte_rf_set_rx_freq(&rf, rf_freq) / 1000000); - srslte_rf_rx_wait_lo_locked(&rf); - srslte_rf_start_rx_stream(&rf); - - printf("Frame length %d samples\n", flen); - printf("PSS detection threshold: %.2f\n", threshold); - - nof_det = nof_nodet = nof_nopeak = nof_nopeakdet = 0; - frame_cnt = 0; - last_peak = 0; - mean_peak = 0; - int peak_offset = 0; - float cfo; - float mean_cfo = 0; - uint32_t m0, m1; - uint32_t sss_error1 = 0, sss_error2 = 0, sss_error3 = 0; - uint32_t cp_is_norm = 0; - - srslte_sync_t ssync; - bzero(&ssync, sizeof(srslte_sync_t)); - ssync.fft_size = fft_size; - - while(frame_cnt < nof_frames || nof_frames == -1) { - peak_offset = 0; - n = srslte_rf_recv(&rf, buffer, flen - peak_offset, 1); - if (n < 0) { - fprintf(stderr, "Error receiving samples\n"); - exit(-1); - } - - peak_idx = srslte_pss_synch_find_pss(&pss, buffer, &peak_value); - if (peak_idx < 0) { - fprintf(stderr, "Error finding PSS peak\n"); - exit(-1); - } - - mean_peak = SRSLTE_VEC_CMA(peak_value, mean_peak, frame_cnt); - - if (peak_value >= threshold) { - nof_det++; - - if (peak_idx >= fft_size) { - - // Estimate CFO - cfo = srslte_pss_synch_cfo_compute(&pss, &buffer[peak_idx-fft_size]); - mean_cfo = SRSLTE_VEC_CMA(cfo, mean_cfo, frame_cnt); - - // Correct CFO - srslte_cfo_correct(&cfocorr, buffer, buffer, -mean_cfo / fft_size); - - // Estimate channel - if (srslte_pss_synch_chest(&pss, &buffer[peak_idx-fft_size], ce)) { - fprintf(stderr, "Error computing channel estimation\n"); - exit(-1); - } - - // Find SSS - int sss_idx = peak_idx-2*fft_size-(SRSLTE_CP_ISNORM(cp)?SRSLTE_CP_LEN(fft_size, SRSLTE_CP_NORM_LEN):SRSLTE_CP_LEN(fft_size, SRSLTE_CP_EXT_LEN)); - if (sss_idx >= 0 && sss_idx < flen-fft_size) { - srslte_sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 3, NULL, &m0, &m0_value, &m1, &m1_value); - if (srslte_sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { - sss_error2++; - } - INFO("Partial N_id_1: %d\n", srslte_sss_synch_N_id_1(&sss, m0, m1)); - srslte_sss_synch_m0m1_diff(&sss, &buffer[sss_idx], &m0, &m0_value, &m1, &m1_value); - if (srslte_sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { - sss_error3++; - } - INFO("Diff N_id_1: %d\n", srslte_sss_synch_N_id_1(&sss, m0, m1)); - srslte_sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 1, NULL, &m0, &m0_value, &m1, &m1_value); - if (srslte_sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { - sss_error1++; - } - INFO("Full N_id_1: %d\n", srslte_sss_synch_N_id_1(&sss, m0, m1)); - } - - // Estimate CP - if (peak_idx > 2*(fft_size + SRSLTE_CP_LEN_EXT(fft_size))) { - srslte_cp_t cp = srslte_sync_detect_cp(&ssync, buffer, peak_idx); - if (SRSLTE_CP_ISNORM(cp)) { - cp_is_norm++; - } - } - - } else { - INFO("No space for CFO computation. Frame starts at \n",peak_idx); - } - - if(srslte_sss_synch_subframe(m0,m1) == 0) - { -#ifndef DISABLE_GRAPHICS - if (!disable_plots) - do_plots_sss(sss.corr_output_m0, sss.corr_output_m1); -#endif - } - - } else { - nof_nodet++; - } - - if (frame_cnt > 100) { - if (abs(last_peak-peak_idx) > 4) { - if (peak_value >= threshold) { - nof_nopeakdet++; - } - nof_nopeak++; - } - } - - frame_cnt++; - - printf("[%5d]: Pos: %5d, PSR: %4.1f (~%4.1f) Pdet: %4.2f, " - "FA: %4.2f, CFO: %+4.1f kHz SSSmiss: %4.2f/%4.2f/%4.2f CPNorm: %.0f\%\r", - frame_cnt, - peak_idx, - peak_value, mean_peak, - (float) nof_det/frame_cnt, - (float) nof_nopeakdet/frame_cnt, mean_cfo*15, - (float) sss_error1/nof_det,(float) sss_error2/nof_det,(float) sss_error3/nof_det, - (float) cp_is_norm/nof_det * 100); - - if (SRSLTE_VERBOSE_ISINFO()) { - printf("\n"); - } - -#ifndef DISABLE_GRAPHICS - if (!disable_plots) - do_plots(pss.conv_output_avg, pss.conv_output_avg[peak_idx], pss.fft_size+pss.frame_size-1, ce); -#endif - - last_peak = peak_idx; - - } - - srslte_pss_synch_free(&pss); - free(buffer); - srslte_rf_close(&rf); - - printf("Ok\n"); - exit(0); -} - -extern cf_t *tmp2; - - -/********************************************************************** - * Plotting Functions - ***********************************************************************/ -#ifndef DISABLE_GRAPHICS - - -#include "srsgui/srsgui.h" -plot_real_t pssout; -//plot_complex_t pce; - -plot_real_t psss1;//, psss2; - -float tmp[100000]; -cf_t tmpce[SRSLTE_PSS_LEN]; - - -void init_plots() { - sdrgui_init(); - plot_real_init(&pssout); - plot_real_setTitle(&pssout, "PSS xCorr"); - plot_real_setLabels(&pssout, "Index", "Absolute value"); - plot_real_setYAxisScale(&pssout, 0, 1); - - /* - plot_complex_init(&pce); - plot_complex_setTitle(&pce, "Channel Estimates"); - plot_complex_setYAxisScale(&pce, Ip, -2, 2); - plot_complex_setYAxisScale(&pce, Q, -2, 2); - plot_complex_setYAxisScale(&pce, Magnitude, 0, 2); - plot_complex_setYAxisScale(&pce, Phase, -M_PI, M_PI); - */ - - plot_real_init(&psss1); - plot_real_setTitle(&psss1, "SSS xCorr m0"); - plot_real_setLabels(&psss1, "Index", "Absolute value"); - plot_real_setYAxisScale(&psss1, 0, 1); - - /* - plot_real_init(&psss2); - plot_real_setTitle(&psss2, "SSS xCorr m1"); - plot_real_setLabels(&psss2, "Index", "Absolute value"); - plot_real_setYAxisScale(&psss2, 0, 1); - */ - - -} - -void do_plots(float *corr, float energy, uint32_t size, cf_t ce[SRSLTE_PSS_LEN]) { - srslte_vec_sc_prod_fff(corr,1./energy,tmp, size); - plot_real_setNewData(&pssout, tmp, size); - -// float norm = srslte_vec_avg_power_cf(ce, SRSLTE_PSS_LEN); - // srslte_vec_sc_prod_cfc(ce, 1.0/sqrt(norm), tmpce, SRSLTE_PSS_LEN); - - //plot_complex_setNewData(&pce, tmpce, SRSLTE_PSS_LEN); -} - -void do_plots_sss(float *corr_m0, float *corr_m1) { - if (m0_value > 0) - srslte_vec_sc_prod_fff(corr_m0,1./m0_value,corr_m0, SRSLTE_SSS_N); - plot_real_setNewData(&psss1, corr_m0, SRSLTE_SSS_N); - -// if (m1_value > 0) -// srslte_vec_sc_prod_fff(corr_m1,1./m1_value,corr_m1, SRSLTE_SSS_N); -// plot_real_setNewData(&psss2, corr_m1, SRSLTE_SSS_N); -} - -#endif diff --git a/lib/examples/tutorial_examples/simple_tx.c b/lib/examples/tutorial_examples/simple_tx.c deleted file mode 100644 index b56ccb281..000000000 --- a/lib/examples/tutorial_examples/simple_tx.c +++ /dev/null @@ -1,262 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2015 Software Radio Systems Limited - * - * \section LICENSE - * - * This file is part of the srsLTE library. - * - * srsLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * srsLTE 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 Affero General Public License for more details. - * - * A copy of the GNU Affero General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "srslte/srslte.h" - -#include "srslte/phy/rf/rf.h" -srslte_rf_t rf; - -char *output_file_name = NULL; - -srslte_cell_t cell = { - 6, // nof_prb - 1, // nof_ports - 1, // cell_id - SRSLTE_CP_NORM, // cyclic prefix - SRSLTE_PHICH_R_1, // PHICH resources - SRSLTE_PHICH_NORM // PHICH length -}; - - -char *rf_args = ""; -float rf_amp = 0.5, rf_gain = 30.0, rf_freq = 2400000000; - -bool null_file_sink=false; -srslte_filesink_t fsink; -srslte_ofdm_t ifft; -srslte_mod_t modulation; - -uint32_t sf_n_re, sf_n_samples; - -cf_t *sf_buffer = NULL, *output_buffer = NULL; - -void usage(char *prog) { - printf("Usage: %s [algfmv]\n", prog); - printf("\t-a RF args [Default %s]\n", rf_args); - printf("\t-l RF amplitude [Default %.2f]\n", rf_amp); - printf("\t-g RF TX gain [Default %.2f dB]\n", rf_gain); - printf("\t-f RF TX frequency [Default %.1f MHz]\n", rf_freq / 1000000); - printf("\t-m modulation (1: BPSK, 2: QPSK, 3: QAM16, 4: QAM64) [Default BPSK]\n"); - printf("\t-v [set srslte_verbose to debug, default none]\n"); -} - -void parse_args(int argc, char **argv) { - int opt; - while ((opt = getopt(argc, argv, "algfmv")) != -1) { - switch (opt) { - case 'a': - rf_args = argv[optind]; - break; - case 'g': - rf_gain = atof(argv[optind]); - break; - case 'l': - rf_amp = atof(argv[optind]); - break; - case 'f': - rf_freq = atof(argv[optind]); - break; - case 'm': - switch(atoi(argv[optind])) { - case 1: - modulation = SRSLTE_MOD_BPSK; - break; - case 2: - modulation = SRSLTE_MOD_QPSK; - break; - case 4: - modulation = SRSLTE_MOD_16QAM; - break; - case 6: - modulation = SRSLTE_MOD_64QAM; - break; - default: - fprintf(stderr, "Invalid modulation %d. Possible values: " - "(1: BPSK, 2: QPSK, 3: QAM16, 4: QAM64)\n", atoi(argv[optind])); - break; - } - break; - case 'v': - srslte_verbose++; - break; - default: - usage(argv[0]); - exit(-1); - } - } -#ifdef DISABLE_RF - if (!output_file_name) { - usage(argv[0]); - exit(-1); - } -#endif -} - -void base_init() { - - /* init memory */ - sf_buffer = malloc(sizeof(cf_t) * sf_n_re); - if (!sf_buffer) { - perror("malloc"); - exit(-1); - } - output_buffer = malloc(sizeof(cf_t) * sf_n_samples); - if (!output_buffer) { - perror("malloc"); - exit(-1); - } - printf("Opening RF device...\n"); - if (srslte_rf_open(&rf, rf_args)) { - fprintf(stderr, "Error opening rf\n"); - exit(-1); - } - - /* create ifft object */ - if (srslte_ofdm_tx_init(&ifft, SRSLTE_CP_NORM, cell.nof_prb)) { - fprintf(stderr, "Error creating iFFT object\n"); - exit(-1); - } - srslte_ofdm_set_normalize(&ifft, true); -} - -void base_free() { - - srslte_ofdm_tx_free(&ifft); - - if (sf_buffer) { - free(sf_buffer); - } - if (output_buffer) { - free(output_buffer); - } - srslte_rf_close(&rf); -} - - -int main(int argc, char **argv) { - int sf_idx=0, N_id_2=0; - cf_t pss_signal[SRSLTE_PSS_LEN]; - float sss_signal0[SRSLTE_SSS_LEN]; // for subframe 0 - float sss_signal5[SRSLTE_SSS_LEN]; // for subframe 5 - int i; - -#ifdef DISABLE_RF - if (argc < 3) { - usage(argv[0]); - exit(-1); - } -#endif - - parse_args(argc, argv); - - N_id_2 = cell.id % 3; - sf_n_re = 2 * SRSLTE_CP_NORM_NSYMB * cell.nof_prb * SRSLTE_NRE; - sf_n_samples = 2 * SRSLTE_SLOT_LEN(srslte_symbol_sz(cell.nof_prb)); - - cell.phich_length = SRSLTE_PHICH_NORM; - cell.phich_resources = SRSLTE_PHICH_R_1; - - /* this *must* be called after setting slot_len_* */ - base_init(); - - /* Generate PSS/SSS signals */ - srslte_pss_generate(pss_signal, N_id_2); - srslte_sss_generate(sss_signal0, sss_signal5, cell.id); - - printf("Set TX rate: %.2f MHz\n", - srslte_rf_set_tx_srate(&rf, srslte_sampling_freq_hz(cell.nof_prb)) / 1000000); - printf("Set TX gain: %.1f dB\n", srslte_rf_set_tx_gain(&rf, rf_gain)); - printf("Set TX freq: %.2f MHz\n", - srslte_rf_set_tx_freq(&rf, rf_freq) / 1000000); - - uint32_t nbits; - - srslte_modem_table_t modulator; - srslte_modem_table_init(&modulator); - srslte_modem_table_lte(&modulator, modulation); - - srslte_tcod_t turbocoder; - srslte_tcod_init(&turbocoder, SRSLTE_TCOD_MAX_LEN_CB); - - srslte_dft_precoding_t dft_precod; - srslte_dft_precoding_init(&dft_precod, 12); - - nbits = srslte_cbsegm_cbindex(sf_n_samples/8/srslte_mod_bits_x_symbol(modulation)/3 - 12); - uint32_t ncoded_bits = sf_n_samples/8/srslte_mod_bits_x_symbol(modulation); - - uint8_t *data = malloc(sizeof(uint8_t)*nbits); - uint8_t *data_enc = malloc(sizeof(uint8_t)*ncoded_bits); - cf_t *symbols = malloc(sizeof(cf_t)*sf_n_samples); - - bzero(data_enc, sizeof(uint8_t)*ncoded_bits); - while (1) { - for (sf_idx = 0; sf_idx < SRSLTE_NSUBFRAMES_X_FRAME; sf_idx++) { - bzero(sf_buffer, sizeof(cf_t) * sf_n_re); - -#ifdef kk - if (sf_idx == 0 || sf_idx == 5) { - srslte_pss_put_slot(pss_signal, sf_buffer, cell.nof_prb, SRSLTE_CP_NORM); - srslte_sss_put_slot(sf_idx ? sss_signal5 : sss_signal0, sf_buffer, cell.nof_prb, - SRSLTE_CP_NORM); - /* Transform to OFDM symbols */ - srslte_ofdm_tx_sf(&ifft, sf_buffer, output_buffer); - - float norm_factor = (float) sqrtf(cell.nof_prb)/15; - srslte_vec_sc_prod_cfc(output_buffer, rf_amp*norm_factor, output_buffer, SRSLTE_SF_LEN_PRB(cell.nof_prb)); - - } else { -#endif - /* Generate random data */ - for (i=0;i $ ) -add_library(srslte_phy SHARED ${srslte_srcs}) -target_link_libraries(srslte_phy pthread m) +add_library(srslte_phy STATIC ${srslte_srcs}) set_target_properties(srslte_phy PROPERTIES VERSION ${SRSLTE_VERSION_MAJOR}.${SRSLTE_VERSION_MINOR}) -if(NOT DisableMEX) - add_library(srslte_phy_static STATIC ${srslte_srcs}) -endif(NOT DisableMEX) - find_package(MKL) if(MKL_FOUND) include_directories(${MKL_INCLUDE_DIRS}) @@ -79,26 +74,17 @@ endif(MKL_FOUND) if(MKL_FOUND) if(STATIC_MKL) target_link_libraries(srslte_phy ${MKL_STATIC_LIBRARIES}) - if(NOT DisableMEX) - target_link_libraries(srslte_phy_static ${MKL_STATIC_LIBRARIES}) - endif(NOT DisableMEX) else(STATIC_MKL) target_link_libraries(srslte_phy ${MKL_LIBRARIES}) - if(NOT DisableMEX) - target_link_libraries(srslte_phy_static ${MKL_LIBRARIES}) - endif(NOT DisableMEX) endif(STATIC_MKL) else(MKL_FOUND) target_link_libraries(srslte_phy ${FFTW3F_LIBRARIES}) - if(NOT DisableMEX) - target_link_libraries(srslte_phy_static ${FFTW3F_LIBRARIES}) - endif(NOT DisableMEX) endif(MKL_FOUND) ## This linkage is required for the examples and tests only if(RF_FOUND) - target_link_libraries(srslte_phy srslte_rf) + target_link_libraries(srslte_phy) if(UHD_FOUND) target_link_libraries(srslte_phy ${UHD_LIBRARIES}) @@ -120,11 +106,7 @@ endif(RF_FOUND) if(VOLK_FOUND) target_link_libraries(srslte_phy ${VOLK_LIBRARIES}) - if(NOT DisableMEX) - target_link_libraries(srslte_phy_static ${VOLK_LIBRARIES}) - endif(NOT DisableMEX) endif(VOLK_FOUND) +target_link_libraries(srslte_phy pthread m) install(TARGETS srslte_phy DESTINATION ${LIBRARY_DIR}) -SRSLTE_SET_PIC(srslte_phy) - diff --git a/lib/src/phy/agc/CMakeLists.txt b/lib/src/phy/agc/CMakeLists.txt index 79a7a1dcb..fed3467d4 100644 --- a/lib/src/phy/agc/CMakeLists.txt +++ b/lib/src/phy/agc/CMakeLists.txt @@ -20,4 +20,3 @@ file(GLOB SOURCES "*.c") add_library(srslte_agc OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_agc) diff --git a/lib/src/phy/ch_estimation/CMakeLists.txt b/lib/src/phy/ch_estimation/CMakeLists.txt index 067a41d69..ac069bd04 100644 --- a/lib/src/phy/ch_estimation/CMakeLists.txt +++ b/lib/src/phy/ch_estimation/CMakeLists.txt @@ -20,5 +20,4 @@ file(GLOB SOURCES "*.c") add_library(srslte_ch_estimation OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_ch_estimation) add_subdirectory(test) diff --git a/lib/src/phy/channel/CMakeLists.txt b/lib/src/phy/channel/CMakeLists.txt index 19f8fe93e..0ea8799c5 100644 --- a/lib/src/phy/channel/CMakeLists.txt +++ b/lib/src/phy/channel/CMakeLists.txt @@ -20,4 +20,3 @@ file(GLOB SOURCES "*.c") add_library(srslte_channel OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_channel) diff --git a/lib/src/phy/common/CMakeLists.txt b/lib/src/phy/common/CMakeLists.txt index 6b282e7d6..ba2fc1351 100644 --- a/lib/src/phy/common/CMakeLists.txt +++ b/lib/src/phy/common/CMakeLists.txt @@ -20,4 +20,3 @@ file(GLOB SOURCES "*.c") add_library(srslte_phy_common OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_phy_common) diff --git a/lib/src/phy/dft/CMakeLists.txt b/lib/src/phy/dft/CMakeLists.txt index 516ff817f..3af59bf34 100644 --- a/lib/src/phy/dft/CMakeLists.txt +++ b/lib/src/phy/dft/CMakeLists.txt @@ -20,5 +20,4 @@ set(SRCS dft_fftw.c dft_precoding.c ofdm.c) add_library(srslte_dft OBJECT ${SRCS}) -SRSLTE_SET_PIC(srslte_dft) add_subdirectory(test) diff --git a/lib/src/phy/enb/CMakeLists.txt b/lib/src/phy/enb/CMakeLists.txt index 0ac7e5a90..e15fae905 100644 --- a/lib/src/phy/enb/CMakeLists.txt +++ b/lib/src/phy/enb/CMakeLists.txt @@ -20,4 +20,3 @@ file(GLOB SOURCES "*.c") add_library(srslte_enb OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_enb) diff --git a/lib/src/phy/fec/CMakeLists.txt b/lib/src/phy/fec/CMakeLists.txt index d304e2c37..86ed0819d 100644 --- a/lib/src/phy/fec/CMakeLists.txt +++ b/lib/src/phy/fec/CMakeLists.txt @@ -20,5 +20,4 @@ file(GLOB SOURCES "*.c") add_library(srslte_fec OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_fec) add_subdirectory(test) diff --git a/lib/src/phy/io/CMakeLists.txt b/lib/src/phy/io/CMakeLists.txt index 01e3a3dea..a56658e34 100644 --- a/lib/src/phy/io/CMakeLists.txt +++ b/lib/src/phy/io/CMakeLists.txt @@ -20,4 +20,3 @@ file(GLOB SOURCES "*.c") add_library(srslte_io OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_io) diff --git a/lib/src/phy/mimo/CMakeLists.txt b/lib/src/phy/mimo/CMakeLists.txt index 826baae09..f909a60a9 100644 --- a/lib/src/phy/mimo/CMakeLists.txt +++ b/lib/src/phy/mimo/CMakeLists.txt @@ -20,5 +20,4 @@ file(GLOB SOURCES "*.c") add_library(srslte_mimo OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_mimo) add_subdirectory(test) diff --git a/lib/src/phy/modem/CMakeLists.txt b/lib/src/phy/modem/CMakeLists.txt index 654446610..f7576161a 100644 --- a/lib/src/phy/modem/CMakeLists.txt +++ b/lib/src/phy/modem/CMakeLists.txt @@ -20,5 +20,4 @@ file(GLOB SOURCES "*.c") add_library(srslte_modem OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_modem) add_subdirectory(test) diff --git a/lib/src/phy/phch/CMakeLists.txt b/lib/src/phy/phch/CMakeLists.txt index b6c511bd5..a0a7169cd 100644 --- a/lib/src/phy/phch/CMakeLists.txt +++ b/lib/src/phy/phch/CMakeLists.txt @@ -20,5 +20,4 @@ file(GLOB SOURCES "*.c") add_library(srslte_phch OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_phch) add_subdirectory(test) diff --git a/lib/src/phy/phch/test/CMakeLists.txt b/lib/src/phy/phch/test/CMakeLists.txt index d86302f68..6170f82fe 100644 --- a/lib/src/phy/phch/test/CMakeLists.txt +++ b/lib/src/phy/phch/test/CMakeLists.txt @@ -171,5 +171,5 @@ add_test(prach_test_multi_n4 prach_test_multi -n 4) if(UHD_FOUND) add_executable(prach_test_usrp prach_test_usrp.c) - target_link_libraries(prach_test_usrp srslte_phy pthread) + target_link_libraries(prach_test_usrp srslte_rf srslte_phy pthread) endif(UHD_FOUND) diff --git a/lib/src/phy/resampling/CMakeLists.txt b/lib/src/phy/resampling/CMakeLists.txt index f12d301f7..ef6513cbf 100644 --- a/lib/src/phy/resampling/CMakeLists.txt +++ b/lib/src/phy/resampling/CMakeLists.txt @@ -20,5 +20,4 @@ file(GLOB SOURCES "*.c") add_library(srslte_resampling OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_resampling) add_subdirectory(test) diff --git a/lib/src/phy/rf/CMakeLists.txt b/lib/src/phy/rf/CMakeLists.txt index 651ac331a..6cec5a6df 100644 --- a/lib/src/phy/rf/CMakeLists.txt +++ b/lib/src/phy/rf/CMakeLists.txt @@ -19,9 +19,14 @@ # if(RF_FOUND) + + # This library is only used by the examples + add_library(srslte_rf_utils STATIC rf_utils.c) + target_link_libraries(srslte_rf_utils srslte_phy) + # Include common RF files set(SOURCES_RF "") - list(APPEND SOURCES_RF rf_imp.c rf_utils.c) + list(APPEND SOURCES_RF rf_imp.c) if (UHD_FOUND) add_definitions(-DENABLE_UHD) @@ -40,7 +45,7 @@ if(RF_FOUND) add_library(srslte_rf SHARED ${SOURCES_RF}) - + target_link_libraries(srslte_rf srslte_rf_utils srslte_phy) if (UHD_FOUND) target_link_libraries(srslte_rf ${UHD_LIBRARIES}) @@ -56,5 +61,4 @@ if(RF_FOUND) INSTALL(TARGETS srslte_rf DESTINATION ${LIBRARY_DIR}) - SRSLTE_SET_PIC(srslte_rf) endif(RF_FOUND) diff --git a/lib/src/phy/scrambling/CMakeLists.txt b/lib/src/phy/scrambling/CMakeLists.txt index 1f9e10353..b8c4941ad 100644 --- a/lib/src/phy/scrambling/CMakeLists.txt +++ b/lib/src/phy/scrambling/CMakeLists.txt @@ -20,5 +20,4 @@ file(GLOB SOURCES "*.c") add_library(srslte_scrambling OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_scrambling) add_subdirectory(test) diff --git a/lib/src/phy/sync/CMakeLists.txt b/lib/src/phy/sync/CMakeLists.txt index 709b6a45b..706efde38 100644 --- a/lib/src/phy/sync/CMakeLists.txt +++ b/lib/src/phy/sync/CMakeLists.txt @@ -20,5 +20,4 @@ file(GLOB SOURCES "*.c") add_library(srslte_sync OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_sync) add_subdirectory(test) diff --git a/lib/src/phy/sync/test/CMakeLists.txt b/lib/src/phy/sync/test/CMakeLists.txt index fd5c628b4..35407ca94 100644 --- a/lib/src/phy/sync/test/CMakeLists.txt +++ b/lib/src/phy/sync/test/CMakeLists.txt @@ -29,7 +29,7 @@ target_link_libraries(pss_file srslte_phy) if(UHD_FOUND) add_executable(pss_usrp pss_usrp.c) - target_link_libraries(pss_usrp srslte_phy) + target_link_libraries(pss_usrp srslte_phy srslte_rf) endif(UHD_FOUND) diff --git a/lib/src/phy/ue/CMakeLists.txt b/lib/src/phy/ue/CMakeLists.txt index f366f4f4f..3072b3a43 100644 --- a/lib/src/phy/ue/CMakeLists.txt +++ b/lib/src/phy/ue/CMakeLists.txt @@ -20,4 +20,3 @@ file(GLOB SOURCES "*.c") add_library(srslte_ue OBJECT ${SOURCES}) -SRSLTE_SET_PIC(srslte_ue) diff --git a/lib/src/phy/utils/CMakeLists.txt b/lib/src/phy/utils/CMakeLists.txt index 5e82da2ef..f8a886ed8 100644 --- a/lib/src/phy/utils/CMakeLists.txt +++ b/lib/src/phy/utils/CMakeLists.txt @@ -25,5 +25,4 @@ if(VOLK_FOUND) set_target_properties(srslte_utils PROPERTIES COMPILE_DEFINITIONS "${VOLK_DEFINITIONS}") endif(VOLK_FOUND) -SRSLTE_SET_PIC(srslte_utils) add_subdirectory(test) diff --git a/lib/src/radio/CMakeLists.txt b/lib/src/radio/CMakeLists.txt index 42931ea62..1e7829e87 100644 --- a/lib/src/radio/CMakeLists.txt +++ b/lib/src/radio/CMakeLists.txt @@ -19,8 +19,7 @@ # if(RF_FOUND) - add_library(srslte_radio SHARED radio.cc radio_multi.cc) - install(TARGETS srslte_radio DESTINATION ${LIBRARY_DIR}) + add_library(srslte_radio STATIC radio.cc radio_multi.cc) target_link_libraries(srslte_radio srslte_rf) - SRSLTE_SET_PIC(srslte_radio) + install(TARGETS srslte_radio DESTINATION ${LIBRARY_DIR}) endif(RF_FOUND) diff --git a/lib/src/upper/CMakeLists.txt b/lib/src/upper/CMakeLists.txt index e1a0507e3..725d6de60 100644 --- a/lib/src/upper/CMakeLists.txt +++ b/lib/src/upper/CMakeLists.txt @@ -19,7 +19,6 @@ # file(GLOB SOURCES "*.cc") -add_library(srslte_upper SHARED ${SOURCES}) +add_library(srslte_upper STATIC ${SOURCES}) target_link_libraries(srslte_upper srslte_common srslte_asn1) install(TARGETS srslte_upper DESTINATION ${LIBRARY_DIR}) -SRSLTE_SET_PIC(srslte_upper) diff --git a/lib/src/upper/rlc_am.cc b/lib/src/upper/rlc_am.cc index f044c73c9..b9545375a 100644 --- a/lib/src/upper/rlc_am.cc +++ b/lib/src/upper/rlc_am.cc @@ -914,8 +914,9 @@ void rlc_am::handle_control_pdu(uint8_t *payload, uint32_t nof_bytes) { if(!retx_queue_has_sn(i)) { rlc_amd_retx_t retx; - retx.so_start = 0; - retx.so_end = it->second.buf->N_bytes; + retx.is_segment = false; + retx.so_start = 0; + retx.so_end = it->second.buf->N_bytes; if(status.nacks[j].has_so) { if(status.nacks[j].so_start < it->second.buf->N_bytes && diff --git a/srsenb/src/mac/CMakeLists.txt b/srsenb/src/mac/CMakeLists.txt index 4369d11a4..8819c0bcb 100644 --- a/srsenb/src/mac/CMakeLists.txt +++ b/srsenb/src/mac/CMakeLists.txt @@ -1,5 +1,24 @@ +# +# Copyright 2013-2017 Software Radio Systems Limited +# +# This file is part of srsLTE +# +# srsLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# srsLTE 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 Affero General Public License for more details. +# +# A copy of the GNU Affero General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + file(GLOB SOURCES "*.cc") -add_library(srsenb_mac SHARED ${SOURCES}) -target_link_libraries(srsenb_mac) - +add_library(srsenb_mac STATIC ${SOURCES}) +install(TARGETS srsenb_mac DESTINATION ${LIBRARY_DIR}) diff --git a/srsenb/src/phy/CMakeLists.txt b/srsenb/src/phy/CMakeLists.txt index beae7143a..5d46d3201 100644 --- a/srsenb/src/phy/CMakeLists.txt +++ b/srsenb/src/phy/CMakeLists.txt @@ -1,8 +1,29 @@ +# +# Copyright 2013-2017 Software Radio Systems Limited +# +# This file is part of srsLTE +# +# srsLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# srsLTE 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 Affero General Public License for more details. +# +# A copy of the GNU Affero General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + file(GLOB SOURCES "*.cc") -add_library(srsenb_phy SHARED ${SOURCES}) -target_link_libraries(srsenb_phy) +add_library(srsenb_phy STATIC ${SOURCES}) if(ENABLE_GUI AND SRSGUI_FOUND) target_link_libraries(srsenb_phy ${SRSGUI_LIBRARIES}) endif(ENABLE_GUI AND SRSGUI_FOUND) +install(TARGETS srsenb_phy DESTINATION ${LIBRARY_DIR}) + diff --git a/srsenb/src/upper/CMakeLists.txt b/srsenb/src/upper/CMakeLists.txt index aed9b0283..59116bab7 100644 --- a/srsenb/src/upper/CMakeLists.txt +++ b/srsenb/src/upper/CMakeLists.txt @@ -1,3 +1,24 @@ +# +# Copyright 2013-2017 Software Radio Systems Limited +# +# This file is part of srsLTE +# +# srsLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# srsLTE 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 Affero General Public License for more details. +# +# A copy of the GNU Affero General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + file(GLOB SOURCES "*.cc") -add_library(srsenb_upper SHARED ${SOURCES}) -target_link_libraries(srsenb_upper) +add_library(srsenb_upper STATIC ${SOURCES}) +install(TARGETS srsenb_upper DESTINATION ${LIBRARY_DIR}) + diff --git a/srsue/src/mac/CMakeLists.txt b/srsue/src/mac/CMakeLists.txt index 1aae8ffd6..fb5783b4d 100644 --- a/srsue/src/mac/CMakeLists.txt +++ b/srsue/src/mac/CMakeLists.txt @@ -19,5 +19,5 @@ # file(GLOB SOURCES "*.cc") -add_library(srsue_mac ${SOURCES}) -target_link_libraries(srsue_mac) +add_library(srsue_mac STATIC ${SOURCES}) +install(TARGETS srsue_mac DESTINATION ${LIBRARY_DIR}) diff --git a/srsue/src/phy/CMakeLists.txt b/srsue/src/phy/CMakeLists.txt index 590b51411..d3e4dee7d 100644 --- a/srsue/src/phy/CMakeLists.txt +++ b/srsue/src/phy/CMakeLists.txt @@ -19,9 +19,10 @@ # file(GLOB SOURCES "*.cc") -add_library(srsue_phy ${SOURCES}) -target_link_libraries(srsue_phy ${SRSLTE_PHY_LIBRARY}) +add_library(srsue_phy STATIC ${SOURCES}) if(ENABLE_GUI AND SRSGUI_FOUND) target_link_libraries(srsue_phy ${SRSGUI_LIBRARIES}) endif(ENABLE_GUI AND SRSGUI_FOUND) + +install(TARGETS srsue_phy DESTINATION ${LIBRARY_DIR}) diff --git a/srsue/src/upper/CMakeLists.txt b/srsue/src/upper/CMakeLists.txt index fec89c8e3..43e6acf4c 100644 --- a/srsue/src/upper/CMakeLists.txt +++ b/srsue/src/upper/CMakeLists.txt @@ -19,4 +19,5 @@ # file(GLOB SOURCES "*.cc") -add_library(srsue_upper SHARED ${SOURCES}) +add_library(srsue_upper STATIC ${SOURCES}) +install(TARGETS srsue_upper DESTINATION ${LIBRARY_DIR})