Use more early returns to further simplify callbacks.

This commit is contained in:
Martin Ling
2022-08-07 17:30:30 +01:00
parent bcaebc00c3
commit 85a86b8baa

View File

@ -439,32 +439,8 @@ int rx_callback(hackrf_transfer* transfer)
transfer->buffer[i] ^= (uint8_t) 0x80; transfer->buffer[i] ^= (uint8_t) 0x80;
} }
} }
if (stream_size > 0) {
#ifndef _WIN32 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);
}
#endif
return 0;
} else {
bytes_written = fwrite(transfer->buffer, 1, bytes_to_write, file); bytes_written = fwrite(transfer->buffer, 1, bytes_to_write, file);
if ((bytes_written != bytes_to_write) || if ((bytes_written != bytes_to_write) ||
(limit_num_samples && (bytes_to_xfer == 0))) { (limit_num_samples && (bytes_to_xfer == 0))) {
@ -474,6 +450,31 @@ int rx_callback(hackrf_transfer* transfer)
return 0; return 0;
} }
} }
#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;
} }
int tx_callback(hackrf_transfer* transfer) int tx_callback(hackrf_transfer* transfer)
@ -527,23 +528,20 @@ int tx_callback(hackrf_transfer* transfer)
stop_main_loop(); stop_main_loop();
return -1; return -1;
} }
if (bytes_read != bytes_to_read) {
if (repeat) {
fprintf(stderr, "Input file end reached. Rewind to beginning.\n");
rewind(file);
fread(transfer->buffer + bytes_read,
1,
bytes_to_read - bytes_read,
file);
return 0;
} else {
stop_main_loop();
return -1; /* not repeat mode, end of file */
}
} else { if (bytes_read == bytes_to_read) {
return 0; return 0;
} }
if (repeat) {
fprintf(stderr, "Input file end reached. Rewind to beginning.\n");
rewind(file);
fread(transfer->buffer + bytes_read, 1, bytes_to_read - bytes_read, file);
return 0;
} else {
stop_main_loop();
return -1; /* not repeat mode, end of file */
}
} }
static int update_stats(hackrf_device* device, hackrf_m0_state* state, stats_t* stats) static int update_stats(hackrf_device* device, hackrf_m0_state* state, stats_t* stats)