/* VERSIONE PULITA E COSTRUITA PER LA SOLA 0xb39 - 0xb38 */ #include "main.h" using namespace std; // Entry of main function int main(int argc, char *argv[]){ bool b_overrun = false; // buffer overrun flag bool b_RFI = false; char cp_filename[64]; // data file name char cp_agc_filename[64]; // agc data file name (when agc_on = 1) char version; // version of modules unsigned char uc_flags[5]; /* Control Variable */ int i_col_mode = 32; // Data collection mode, default value is 32 int i_AGC = 1; // int i_col_time = 0; int i_tmp = 0; int i_ch = -1; // Command parameter buffer; int i_decimate = 1; int i_RFI_det = 0; /* State variable */ unsigned int ui_agc_count = 0; // AGC data collected size unsigned int ui_pack = 1; // Pack mode unsigned int ui_time_to_collect = 2; // Data collection time unsigned int agc_on = 0; // AGC logging on/off flag unsigned int ul_buf_size = 1048576*32; unsigned int ul_agc_buf_size = 320; unsigned int ul_num_bytes_written = 0; bool b_run = true; // Main loop control variable unsigned int k = 0; // Main loop numbers unsigned int ui_agc_tot = 0; // unsigned int ui_agc_buf_pos = 0; // float ul_kmax; // Size of data buffered timeval tv_max, tv_now, tv_start; /* Clear date file name */ strcpy(cp_agc_filename," "); strcpy(cp_filename," "); /* Timer */ timeval st_cpu_time; string str; /* Device */ Fx2_dev fx2_d = Fx2_dev(0); /************************* Look for a device*****************************/ fx2_d = Fx2_dev(0); // Looking for device with PID 0x0b38 -> CORREGERE Fx2_dev(0). if (fx2_d.usb_fx2_find() != 0) version = 0; else{ printf("\t no GNSS frontend found\n"); fx2_d.close(); return(0); } /************************ Display the help information according to module 0x0b39 **************/ while ( (i_ch = getopt (argc,argv,"ho:s:")) != EOF ){ switch(i_ch){ case 'h': // help help_lv(); return 0; case 's': // size(sec) sscanf(optarg, "%u", &ui_time_to_collect); break; case 'o': // filename strcpy(cp_filename, optarg); i_tmp = strlen(optarg); if (i_tmp>4){ memcpy(cp_agc_filename,(const char*)optarg,(i_tmp-2)); memcpy((cp_agc_filename+i_tmp-4),"_agc.bin\0",sizeof("_agc.bin\0")); }else{ strcpy(cp_agc_filename,"test_agc.bin"); } break; default: break; } } /*********************** Create init file *******************************************/ if (strlen(cp_filename)<2){ strcpy(cp_filename, "test.bin"); strcpy(cp_agc_filename,"test_agc.bin"); } FileSaver fs = FileSaver(cp_filename); fs.open_file(cp_filename); fs.set_fid(1); fs.set_decimate(i_decimate); fs.set_pack(ui_pack); FileSaver fs_agc =FileSaver(cp_agc_filename); fs_agc.open_file(cp_agc_filename); fs_agc.set_fid(100); fs_agc.set_pack(1); fs_agc.set_decimate(1); if(agc_on == 0){ fs_agc.close_file(); remove(cp_agc_filename); } /*****************************INIT USB **********************************/ fx2_d.usb_fx2_init(); fx2_d.usrp_xfer (VRQ_AGC,0); fx2_d.usrp_xfer (VRQ_CMODE,132 ); fx2_d.usrp_xfer (VRQ_XFER, 0 ); fx2_d.usrp_xfer (VRQ_XFER, 1); fx2_d.usrp_xfer2(VRQ_FLAGS, 0, uc_flags, 5); fx2_d.usrp_xfer (VRQ_XFER, 0 ); /******************************INIT Buffers ************************/ short *shp_agc_data; short *shp_agc_data_store; char *ch_if_data; timeval tv; fs.set_decimate(i_decimate); // Allocate buffer ch_if_data = new char[BUFSIZE]; shp_agc_data = new short[100]; // Initiate buffer for(int t = 0; t< 100; t++) shp_agc_data[t] = 0; for(int t = 0; t= ui_time_to_collect){ // Set the current cursor to the right position printf("%3.0f%% data collected",100.0); b_run = false; } // Print capture information at the start if(k==0){ printf("\n"); switch(i_col_mode){ case 32: ul_kmax = 16.368 * ui_time_to_collect/i_decimate; printf("Attemping to collect %dsecs/%.1fMB of data\n",ui_time_to_collect,ul_kmax); break; case 36: ul_kmax = 8.184 * ui_time_to_collect/i_decimate; printf("Attemping to collect %dsecs/%.1fMB of data\n",ui_time_to_collect,ul_kmax); break; case 38: ul_kmax = 5.456 * ui_time_to_collect/i_decimate; printf("Attemping to collect %dsecs/%.1fMB of data\n",ui_time_to_collect,ul_kmax); break; case 42: ul_kmax = 4.092 * ui_time_to_collect/i_decimate; printf("Attemping to collect %dsecs/%.1fMB of data\n",ui_time_to_collect,ul_kmax); break; case 132: ul_kmax = 16.368 * ui_time_to_collect/i_decimate; printf("Attemping to collect %dsecs/%.1fMB of data\n",ui_time_to_collect,ul_kmax); break; case 136: ul_kmax = 8.184 * ui_time_to_collect/i_decimate; printf("Attemping to collect %dsecs/%.1fMB of data\n",ui_time_to_collect,ul_kmax); break; case 138: ul_kmax = 5.456 * ui_time_to_collect/i_decimate; printf("Attemping to collect %dsecs/%.1fMB of data\n",ui_time_to_collect,ul_kmax); break; case 142: ul_kmax = 4.092 * ui_time_to_collect/i_decimate; printf("Attemping to collect %dsecs/%.1fMB of data\n",ui_time_to_collect,ul_kmax); break; default: break; } printf("%3.0f%% date collected\n",1.0); } k++; // Print progress information if ((k%250)==0){ switch(i_col_mode){ case 32: if ((k%1000) == 0){ percentage = k/10/ui_time_to_collect; (percentage>1)?printf("%3.0f%% date collected\n",percentage):printf("%3.0f%% date collected\n",1.0); } break; case 36: if ((k%500) == 0){ percentage = k/10*2/ui_time_to_collect; (percentage>1)?printf("%3.0f%% date collected\n",percentage):printf("%3.0f%% date collected\n",1.0); } break; case 38: percentage = k/10*3/ui_time_to_collect; (percentage>1)?printf("%3.0f%% date collected\n",percentage):printf("%3.0f%% date collected\n",1.0); break; case 42: percentage = k/10*4/ui_time_to_collect; (percentage>1)?printf("%3.0f%% date collected\n",percentage):printf("%3.0f%% date collected\n",1.0); break; case 132: if ((k%1000) == 0){ percentage = k/10/ui_time_to_collect; (percentage>1)?printf("%3.0f%% date collected\n",percentage):printf("%3.0f%% date collected\n",1.0); } break; case 136: if ((k%500) == 0){ percentage = k/10*2/ui_time_to_collect; (percentage>1)?printf("%3.0f%% date collected\n",percentage):printf("%3.0f%% date collected\n",1.0); } break; case 138: percentage = k/10*3/ui_time_to_collect; (percentage>1)?printf("%3.0f%% date collected\n",percentage):printf("%3.0f%% date collected\n",1.0); break; case 142: percentage = k/10*4/ui_time_to_collect; (percentage>1)?printf("%3.0f%% date collected\n",percentage):printf("%3.0f%% date collected\n",1.0); break; default: break; } } // Check buffer overrun fx2_d.check_rx_overrun (&b_overrun ); if ( b_overrun==true ){ gettimeofday(&tv_now,NULL); printf("Buffer Overrun!\n"); delete []ch_if_data; delete []shp_agc_data; if(agc_on == 1) fs_agc.close_file(); fs.close_file(); switch(i_col_mode){ case 32: currK = int(k/1000);break; case 36: currK = int(k/1000*2);break; case 38: currK = int(k/1000*3);break; case 42: currK = int(k/1000*4);break; case 132: currK = int(k/1000); break; case 136: currK = int(k/1000*2);break; case 138: currK = int(k/1000*3);break; case 142: currK = int(k/1000*4);break; default: break; } printf("%dsec/%dMB data collected\n",currK,(int)(ul_num_bytes_written/1e6)); fs_agc.close_file(); remove(cp_agc_filename); fx2_d.close(); fx2_d.~Fx2_dev(); return(EXIT_FAILURE); } // Read data j = fx2_d.read_IF(ch_if_data); if ((j>0)){ ul_num_bytes_written +=j; // Number of data collection update fs.save_data(ch_if_data,j,i_col_mode); // Write data buffered to disc } // Get current time gettimeofday(&tv_now,NULL); } gettimeofday(&tv_now,NULL); printf("\n"); // To modify std::cout<<"Total time = "<< (float)((tv_now.tv_sec+tv_now.tv_usec/1e6) - (tv_start.tv_sec+tv_start.tv_usec/1e6))+(tv_now.tv_usec-tv_start.tv_usec)/1e6<<"s"<