diff --git a/host/hackrf-tools/src/hackrf_sweep.c b/host/hackrf-tools/src/hackrf_sweep.c index 8b038841..3d4fd043 100644 --- a/host/hackrf-tools/src/hackrf_sweep.c +++ b/host/hackrf-tools/src/hackrf_sweep.c @@ -102,10 +102,13 @@ int gettimeofday(struct timeval *tv, void* ignored) { #define THROWAWAY_BLOCKS 2 #if defined _WIN32 - #define sleep(a) Sleep( (a*1000) ) + #define m_sleep(a) Sleep( (a) ) +#else + #define m_sleep(a) usleep((a*1000)) #endif uint32_t num_samples = SAMPLES_PER_BLOCK; +uint32_t num_sweeps = 0; int num_ranges = 0; uint16_t frequencies[MAX_SWEEP_RANGES*2]; int step_count; @@ -179,6 +182,7 @@ uint32_t antenna_enable; bool binary_output = false; bool ifft_output = false; bool one_shot = false; +bool finite_mode = false; volatile bool sweep_started = false; int fftSize = 20; @@ -245,6 +249,9 @@ int rx_callback(hackrf_transfer* transfer) { if(one_shot) { do_exit = true; } + else if(finite_mode && sweep_count == num_sweeps) { + do_exit = true; + } } sweep_started = true; time_stamp = usb_transfer_time; @@ -352,6 +359,7 @@ static void usage() { fprintf(stderr, "\t[-n num_samples] # Number of samples per frequency, 8192-4294967296\n"); fprintf(stderr, "\t[-w bin_width] # FFT bin width (frequency resolution) in Hz\n"); fprintf(stderr, "\t[-1] # one shot mode\n"); + fprintf(stderr, "\t[-N num_sweeps] # Number of sweeps to perform\n"); fprintf(stderr, "\t[-B] # binary output\n"); fprintf(stderr, "\t[-I] # binary inverse FFT output\n"); fprintf(stderr, "\t-r filename # output file\n"); @@ -393,7 +401,7 @@ int main(int argc, char** argv) { uint32_t requested_fft_bin_width; - while( (opt = getopt(argc, argv, "a:f:p:l:g:d:n:w:1BIr:h?")) != EOF ) { + while( (opt = getopt(argc, argv, "a:f:p:l:g:d:n:N:w:1BIr:h?")) != EOF ) { result = HACKRF_SUCCESS; switch( opt ) { @@ -450,6 +458,11 @@ int main(int argc, char** argv) { result = parse_u32(optarg, &num_samples); break; + case 'N': + finite_mode = true; + result = parse_u32(optarg, &num_sweeps); + break; + case 'w': result = parse_u32(optarg, &requested_fft_bin_width); fftSize = DEFAULT_SAMPLE_RATE_HZ / requested_fft_bin_width; @@ -693,8 +706,8 @@ int main(int argc, char** argv) { fprintf(stderr, "Stop with Ctrl-C\n"); while((hackrf_is_streaming(device) == HACKRF_TRUE) && (do_exit == false)) { float time_difference; - sleep(1); - + m_sleep(50); + gettimeofday(&time_now, NULL); time_difference = TimevalDiff(&time_now, &t_start);