129 Commits

Author SHA1 Message Date
Michael Ossmann
f4202d1163 hackrf_transfer: Don't skip preload stats in RX
Fixes a bug introduced in 8a9af7a: Statistics skipped for initial
buffers not only when preloaded in TX mode but also in RX mode with no
preloading.

The total bytes transferred may appear inflated in RX mode when
receiving a small number of samples with -n, but the stats represent
data transferred over USB, some of which may have been discarded by the
host.
2022-09-18 13:27:51 -04:00
Michael Ossmann
82ecfce414 hackrf_transfer: simplify hardware sync mode logic
The -H option now requires no argument.
2022-09-18 05:49:03 -04:00
Michael Ossmann
9181cbe049 hackrf_transfer: send signal to own PID
Instead of sending a signal to the process group, get our own process ID
and send the signal to it. This fixes a bug that prevented termination
when called from a script.
2022-09-18 05:07:09 -04:00
Martin Ling
55fdddd81e Merge remote-tracking branch 'origin/master' into tx-transfer-sizing 2022-09-15 15:32:20 +01:00
Martin Ling
09c6030ec9 Start TX/RX in hackrf_transfer after all other requests.
This avoids glitches and lost samples at the start of a transmission.
2022-09-15 09:51:11 +01:00
Martin Ling
f1e34b7cea Correct the calculation of dBfs signal level.
dBFS is defined in AES Standard AES17-1998, IEC 61606, and ITU-T Recs.
P.381 and P.382, such that the RMS value of a full-scale sine wave is
designated 0 dBFS.

A full scale sine wave on HackRF has the range -127 to 127.

We calculate the full scale ratio relative to a signal in which both I
and Q are held at 127. This represents a signal with sqrt(2) times
the amplitude, and thus twice the power, of a full scale sine wave.

Therefore to obtain dBfs by the above definition, we add 3dB.
2022-09-14 18:21:07 +01:00
Martin Ling
66fa76c550 In CW mode, set only the I component to the specified amplitude. 2022-09-14 18:14:59 +01:00
Martin Ling
d5d2b09fe8 Restrict CW mode amplitude to 127. 2022-09-14 18:14:23 +01:00
Martin Ling
f2d00adab8 Add commentary to TX callback. 2022-09-14 15:55:07 +01:00
Martin Ling
e38534b99d Don't return -1 from the TX callback that provides the last data. 2022-09-14 15:55:07 +01:00
Martin Ling
5ad08cfd96 Set valid_length correctly in hackrf_transfer TX callback. 2022-09-14 15:55:04 +01:00
Martin Ling
9905e960a4 Rearrange to avoid duplicating sample limit return path. 2022-09-14 15:16:18 +01:00
Martin Ling
16f93d9b27 Move duplicated code to one place. 2022-09-14 15:15:34 +01:00
Martin Ling
29787cd291 Clarify variables used in TX callback.
The power measurement depends on the number of bytes that were valid
from the previous use of the transfer buffer.

The number of bytes to be read to fill the next transfer, is the full
size of the buffer.
2022-09-14 15:10:13 +01:00
Michael Ossmann
fdfe310f9a Merge pull request #1139 from martinling/tx-flush
Support flushing the device TX buffer before ending transmission
2022-09-14 05:45:40 -04:00
Martin Ling
7650236839 Flush buffer when CW mode is used with -n. 2022-09-12 16:50:53 +01:00
Martin Ling
0142ae6da9 Don't await buffer flush if interrupted by Ctrl-C. 2022-09-12 16:32:11 +01:00
Michael Ossmann
8a9af7a1ad hackrf_transfer: report on only actual transfers
The statistics reported to the user now reflect only completed USB
transfers and do not include information about the empty buffers that
are preloaded with data at the start of a TX operation.
2022-09-09 16:32:07 -04:00
Michael Ossmann
e7b19ef2c2 hackrf_transfer: accept CW amplitude up to 128 2022-09-09 05:17:28 -04:00
Michael Ossmann
755ca960e5 hackrf_transfer: report power, not amplitude
improve accuracy and reliability of digital signal power measurement
2022-09-09 05:15:15 -04:00
Martin Ling
8f60e6b66f Wait for TX buffer flush at end of hackrf_transfer. 2022-08-24 23:48:24 +01:00
Martin Ling
9b6a0259a7 Remove message when rewinding input file.
For small input files this may be printed a very large number of times.
2022-08-23 09:30:04 +01:00
Martin Ling
0c35cff05b In repeat mode, rewind file as many times as needed to fill buffer.
Fixes #720.
2022-08-23 09:30:04 +01:00
Martin Ling
06a0c2b189 One more early return to simplify TX callback. 2022-08-23 09:30:02 +01:00
Martin Ling
85a86b8baa Use more early returns to further simplify callbacks. 2022-08-23 09:29:13 +01:00
Martin Ling
bcaebc00c3 Use some early returns to reduce deeply indented callbacks. 2022-08-23 09:26:00 +01:00
Martin Ling
344af5094b Merge pull request #1131 from martinling/hackrf-transfer-validation
Additional argument validation for hackrf_transfer
2022-08-23 08:57:17 +01:00
Michael Ossmann
c703a72ac0 add parentheses to avoid compiler warning
avoids a warning from -Wparentheses
2022-08-23 08:44:29 +01:00
Martin Ling
a09e9a20ed Overhaul timing in hackrf_transfer.
Rather than using sleep() for 1s at a time, set up an interval timer
that will fire once per second, and wait in the main loop for either
this or some other event.

On POSIX, the timing is set up with setitimer(), which generates a
SIGALRM signal each time the timer fires. The main loop runs pause() to
wait for any signal.

On Windows, the timing is set up using CreateWaitableTimer, which
provides an event handle that is set each time the timer fires. The main
loop runs WaitForMultipleObjects() to wait on this and an interrupt
event.

The TX and RX callbacks can now stop the main loop immediately when they
stop streaming. This fixes #1019.
2022-08-17 13:05:03 +01:00
Martin Ling
eeaaaf3b9b Make use of Win32 functions conditional on _WIN32, not _MSC_VER.
Using _MSC_VER here means that the choice of signal() versus
SetConsoleCtrlHandler depends on the compiler being used, rather
than the OS being targeted. When built with MinGW rather than MSVC,
this happens to work because MinGW's signal emulation is used, but
that emulation is quite limited.

Instead, be consistent and use the Win32 API when building for that
platform, regardless of compiler.

Note that if building for Cygwin, _WIN32 is not defined and POSIX
APIs are used.
2022-08-17 12:54:22 +01:00
Martin Ling
e88a0387cb Extend force option to frequency ranges outside 1MHz-6GHz. 2022-08-15 21:47:49 +01:00
Martin Ling
2e1f55c2d5 Add hackrf_transfer -F option to force unsupported sample rates. 2022-08-15 21:47:49 +01:00
Martin Ling
8c12fa6007 Validate sample rates passed to hackrf_transfer. 2022-08-15 21:47:42 +01:00
Martin Ling
2fe3185f9d Use an array of buffers for u64->ASCII conversions. 2022-08-15 21:46:36 +01:00
Martin Ling
c3fdf402d7 Reformat all code to new clang-format standard. 2022-08-03 23:46:44 +01:00
Martin Ling
ebb9e43fde Move some trailing comments on long lines. 2022-08-03 23:42:55 +01:00
Martin Ling
414b4a98da hackrf_transfer: Split a long line in usage(). 2022-08-03 23:03:15 +01:00
Martin Ling
7f5ae870ec hackrf_transfer: Clean up WAV headers. 2022-08-03 23:03:15 +01:00
colt
b5057b87e8 Report an amplitude of value -INFINITY as is instead of showing it as
-0.0 dBfs
2022-08-02 18:44:28 -05:00
colt
b47a808eaa Do dB ratio check BEFORE it's used 2022-07-11 13:25:14 -05:00
colt
151b431c64 Fix #902 - Report transmit amplitude 2022-07-06 22:34:26 -05:00
Yan
19a9074039 Avoid warnings by using PRIu64 2022-03-21 13:53:40 +00:00
Martin Ling
2c86f493d9 Keep track of longest shortfall.
This adds six cycles to the TX and RX shortfall paths.
2022-02-13 16:46:12 +00:00
Martin Ling
a7bd1e3ede Keep count of number of shortfalls.
To enable this, we keep a count of the current shortfall length. Each
time an SGPIO read/write cannot be completed due to a shortfall, we
increase this length. Each time an SGPIO read/write is completed
successfully, we reset the shortfall length to zero.

When a shortfall occurs and the existing shortfall length is zero, this
indicates a new shortfall, and the shortfall count is incremented.

This change adds one cycle to the normal RX & TX paths, to zero the
shortfall count. To enable this to be done in a single cycle, we keep a
zero handy in a high register.

The extra accounting adds 10 cycles to the TX and RX shortfall paths,
plus an additional 3 cycles to the RX shortfall path since there are
now two branches involved: one to the shortfall handler, and another
back to the main loop.
2022-02-13 16:46:12 +00:00
Martin Ling
c8d120ff6c Display total M0 and M4 counts at end of hackrf_transfer.
Doing this requires keeping track of when the 32-bit counters wrap, and
updating 64-bit running totals.
2022-02-13 16:46:12 +00:00
Martin Ling
eb2be7995c Add hackrf_transfer option to display buffer stats.
This adds the `hackrf_transfer -B` option, which displays the number of
bytes currently in the buffer along with the existing per-second stats.

The number of bytes in the buffer is indicated by the difference between
the M0 and M4 byte counters. In TX, the M4 count should lead the M0 count.
In RX, the M0 count should lead the M4 count.
2022-02-13 16:46:12 +00:00
Michael Ossmann
aa0485d4df Revert "Cleanup of host software CMake build system (#664)"
This reverts commit d60fb83320cea49fd20305f22838f948557f1b81.
2021-12-08 16:59:05 -07:00
Jamie Smith
d60fb83320 Cleanup of host software CMake build system (#664)
* Clean up the CMake build system and improve the FindFFTW3 module.

* Fixes for Linux build

* Include winsock.h to get struct timeval

* Couple more fixes for MSVC, also add new FindMath module

* Update host build README for new CMake changes (esp. Windows)

* Try to fix Travis OS X build error

* Add docs about pthread-win32

* Whoops, AppVeyor caught a bug in FindFFTW where the includes not being found weren't generating a fatal error.

* Travis rebuild bump

* One more fix: replace hardcoded include paths with a PATH_SUFFIX to standard include paths

* Invert Windows preprocessor flag so it's only needed when using a static build.  This preserves compatibility with the previous system.

* Fix copy-paste error

* Update cmake modules from amber-cmake upstream, incorporate TryLinkLibrary into FindUSB1

* Fix missing include
2021-12-03 14:11:04 -05:00
Clifford Heath
a9945ffaa3 Report amplitude once per second during receive (#890)
* Report amplitude once per second during receive

* Added missing M_LN10 for Windoze, fixed short frame detection for RSSI

* Tweaks to math expressions

* Tweaks to math expressions
2021-06-13 11:59:26 -06:00
Michael Ossmann
2ca991e1df Flush output streams. Do not fclose stdout/stdin. 2021-01-27 12:12:45 -07:00