diff --git a/firmware/hackrf_usb/usb_api_sweep.c b/firmware/hackrf_usb/usb_api_sweep.c index 581faacc..503e7f6a 100644 --- a/firmware/hackrf_usb/usb_api_sweep.c +++ b/firmware/hackrf_usb/usb_api_sweep.c @@ -34,6 +34,7 @@ #define MIN_FREQ 1 #define MAX_FREQ 6000 #define MAX_FREQ_COUNT 1000 +#define THROWAWAY_BUFFERS 2 volatile bool start_sweep_mode = false; static uint64_t sweep_freq; @@ -89,16 +90,18 @@ void sweep_mode(void) { if (transfer) { *(uint16_t*)buffer = 0x7F7F; *(uint16_t*)(buffer+2) = sweep_freq; - usb_transfer_schedule_block( - &usb_endpoint_bulk_in, - buffer, - 0x4000, - NULL, NULL - ); + if (blocks_queued > THROWAWAY_BUFFERS) { + usb_transfer_schedule_block( + &usb_endpoint_bulk_in, + buffer, + 0x4000, + NULL, NULL + ); + } transfer = false; } - if (blocks_queued >= dwell_blocks) { + if ((dwell_blocks + THROWAWAY_BUFFERS) <= blocks_queued) { if(++ifreq >= frequency_count) ifreq = 0; sweep_freq = frequencies[ifreq]; diff --git a/host/hackrf-tools/src/hackrf_sweep.c b/host/hackrf-tools/src/hackrf_sweep.c index 6c044203..13a9c64d 100644 --- a/host/hackrf-tools/src/hackrf_sweep.c +++ b/host/hackrf-tools/src/hackrf_sweep.c @@ -243,7 +243,7 @@ static void usage() { fprintf(stderr, "\t[-l gain_db] # RX LNA (IF) gain, 0-40dB, 8dB steps\n"); fprintf(stderr, "\t[-g gain_db] # RX VGA (baseband) gain, 0-62dB, 2dB steps\n"); fprintf(stderr, "\t[-x gain_db] # TX VGA (IF) gain, 0-47dB, 1dB steps\n"); - fprintf(stderr, "\t[-n num_samples] # Number of samples per frequency, 0-4294967296\n"); + fprintf(stderr, "\t[-n num_samples] # Number of samples per frequency, 16384-4294967296\n"); } static hackrf_device* device = NULL; @@ -355,6 +355,11 @@ int main(int argc, char** argv) { return EXIT_FAILURE; } + if (num_samples < 0x4000) { + fprintf(stderr, "warning: num_samples (-n) must be at least 16384\n"); + return EXIT_FAILURE; + } + if( amp ) { if( amp_enable > 1 ) { fprintf(stderr, "argument error: amp_enable shall be 0 or 1.\n");