mirror of
https://github.com/greatscottgadgets/hackrf.git
synced 2026-03-12 18:30:11 +01:00
Support compiling with Visual Studio
This commit is contained in:
@@ -379,26 +379,28 @@ int rx_callback(hackrf_transfer* transfer) {
|
||||
}
|
||||
}
|
||||
if (stream_size>0){
|
||||
if ((stream_size-1+stream_head-stream_tail)%stream_size <bytes_to_write){
|
||||
stream_drop++;
|
||||
}else{
|
||||
if(stream_tail+bytes_to_write <= stream_size){
|
||||
memcpy(stream_buf+stream_tail,transfer->buffer,bytes_to_write);
|
||||
}else{
|
||||
memcpy(stream_buf+stream_tail,transfer->buffer,(stream_size-stream_tail));
|
||||
memcpy(stream_buf,transfer->buffer+(stream_size-stream_tail),bytes_to_write-(stream_size-stream_tail));
|
||||
};
|
||||
__atomic_store_n(&stream_tail,(stream_tail+bytes_to_write)%stream_size,__ATOMIC_RELEASE);
|
||||
#ifndef _WIN32
|
||||
if ((stream_size-1+stream_head-stream_tail)%stream_size <bytes_to_write) {
|
||||
stream_drop++;
|
||||
} else {
|
||||
if(stream_tail+bytes_to_write <= stream_size) {
|
||||
memcpy(stream_buf+stream_tail,transfer->buffer,bytes_to_write);
|
||||
} else {
|
||||
memcpy(stream_buf+stream_tail,transfer->buffer,(stream_size-stream_tail));
|
||||
memcpy(stream_buf,transfer->buffer+(stream_size-stream_tail),bytes_to_write-(stream_size-stream_tail));
|
||||
};
|
||||
__atomic_store_n(&stream_tail,(stream_tail+bytes_to_write)%stream_size,__ATOMIC_RELEASE);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}else{
|
||||
bytes_written = fwrite(transfer->buffer, 1, bytes_to_write, fd);
|
||||
if ((bytes_written != bytes_to_write)
|
||||
|| (limit_num_samples && (bytes_to_xfer == 0))) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
bytes_written = fwrite(transfer->buffer, 1, bytes_to_write, fd);
|
||||
if ((bytes_written != bytes_to_write)
|
||||
|| (limit_num_samples && (bytes_to_xfer == 0))) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
@@ -490,7 +492,10 @@ static void usage() {
|
||||
printf("\t[-s sample_rate_hz] # Sample rate in Hz (4/8/10/12.5/16/20MHz, default %sMHz).\n",
|
||||
u64toa((DEFAULT_SAMPLE_RATE_HZ/FREQ_ONE_MHZ),&ascii_u64_data1));
|
||||
printf("\t[-n num_samples] # Number of samples to transfer (default is unlimited).\n");
|
||||
#ifndef _WIN32
|
||||
/* The required atomic load/store functions aren't available when using C with MSVC */
|
||||
printf("\t[-S buf_size] # Enable receive streaming with buffer size buf_size.\n");
|
||||
#endif
|
||||
printf("\t[-c amplitude] # CW signal source mode, amplitude 0-127 (DC value to DAC).\n");
|
||||
printf("\t[-R] # Repeat TX mode (default is off) \n");
|
||||
printf("\t[-b baseband_filter_bw_hz] # Set baseband filter bandwidth in Hz.\n\tPossible values: 1.75/2.5/3.5/5/5.5/6/7/8/9/10/12/14/15/20/24/28MHz, default < sample_rate_hz.\n" );
|
||||
@@ -1041,48 +1046,49 @@ int main(int argc, char** argv) {
|
||||
uint32_t byte_count_now;
|
||||
struct timeval time_now;
|
||||
float time_difference, rate;
|
||||
if (stream_size>0){
|
||||
if(stream_head==stream_tail){
|
||||
usleep(10000); // queue empty
|
||||
}else{
|
||||
ssize_t len;
|
||||
ssize_t bytes_written;
|
||||
uint32_t _st= __atomic_load_n(&stream_tail,__ATOMIC_ACQUIRE);
|
||||
if(stream_head<_st)
|
||||
len=_st-stream_head;
|
||||
else
|
||||
len=stream_size-stream_head;
|
||||
bytes_written = fwrite(stream_buf+stream_head, 1, len, fd);
|
||||
if (len != bytes_written){
|
||||
printf("write failed");
|
||||
do_exit=true;
|
||||
};
|
||||
stream_head=(stream_head+len)%stream_size;
|
||||
if (stream_size>0) {
|
||||
#ifndef _WIN32
|
||||
if(stream_head==stream_tail) {
|
||||
usleep(10000); // queue empty
|
||||
} else {
|
||||
ssize_t len;
|
||||
ssize_t bytes_written;
|
||||
uint32_t _st= __atomic_load_n(&stream_tail,__ATOMIC_ACQUIRE);
|
||||
if(stream_head<_st)
|
||||
len=_st-stream_head;
|
||||
else
|
||||
len=stream_size-stream_head;
|
||||
bytes_written = fwrite(stream_buf+stream_head, 1, len, fd);
|
||||
if (len != bytes_written) {
|
||||
printf("write failed");
|
||||
do_exit=true;
|
||||
};
|
||||
stream_head=(stream_head+len)%stream_size;
|
||||
}
|
||||
if(stream_drop>0){
|
||||
uint32_t drops= __atomic_exchange_n (&stream_drop,0,__ATOMIC_SEQ_CST);
|
||||
printf("dropped frames: [%d]\n",drops);
|
||||
if(stream_drop>0) {
|
||||
uint32_t drops= __atomic_exchange_n (&stream_drop,0,__ATOMIC_SEQ_CST);
|
||||
printf("dropped frames: [%d]\n",drops);
|
||||
}
|
||||
}else{
|
||||
sleep(1);
|
||||
|
||||
gettimeofday(&time_now, NULL);
|
||||
|
||||
byte_count_now = byte_count;
|
||||
byte_count = 0;
|
||||
|
||||
time_difference = TimevalDiff(&time_now, &time_start);
|
||||
rate = (float)byte_count_now / time_difference;
|
||||
fprintf(stderr, "%4.1f MiB / %5.3f sec = %4.1f MiB/second\n",
|
||||
(byte_count_now / 1e6f), time_difference, (rate / 1e6f) );
|
||||
#endif
|
||||
} else {
|
||||
sleep(1);
|
||||
gettimeofday(&time_now, NULL);
|
||||
|
||||
byte_count_now = byte_count;
|
||||
byte_count = 0;
|
||||
|
||||
time_difference = TimevalDiff(&time_now, &time_start);
|
||||
rate = (float)byte_count_now / time_difference;
|
||||
fprintf(stderr, "%4.1f MiB / %5.3f sec = %4.1f MiB/second\n",
|
||||
(byte_count_now / 1e6f), time_difference, (rate / 1e6f) );
|
||||
|
||||
time_start = time_now;
|
||||
time_start = time_now;
|
||||
|
||||
if (byte_count_now == 0) {
|
||||
exit_code = EXIT_FAILURE;
|
||||
fprintf(stderr, "\nCouldn't transfer any bytes for one second.\n");
|
||||
break;
|
||||
}
|
||||
if (byte_count_now == 0) {
|
||||
exit_code = EXIT_FAILURE;
|
||||
fprintf(stderr, "\nCouldn't transfer any bytes for one second.\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user