Commit graph

232 commits

Author SHA1 Message Date
Simon Ruderich 52f45cb433 layer2: check return values when adding empty packets 2024-07-24 20:20:36 +02:00
Simon Ruderich 4e2815923c layer2: handle invalid message types just in case 2024-07-23 09:24:32 +02:00
Simon Ruderich 766caf7e07 layer2/packet_structs: use variable to reduce duplication 2024-07-23 09:15:56 +02:00
Simon Ruderich b3a49fe0ba layer2: update comments, use constant 2024-07-23 09:15:34 +02:00
Simon Ruderich 8aacbaf8c3 layer2/packet_queue: remove unused function packet_queue_can_add_packet() 2024-07-23 08:41:42 +02:00
Simon Ruderich 9845514a46 layer2/packet_queue: permit using full queue size
Previously, only PACKET_QUEUE_SIZE - 1 elements could be stored.
2024-07-23 08:41:25 +02:00
Thomas Kolb 10a869d1a2 Layer 2: send Empty Packet acknowledgements if there’s nothing else to transmit 2024-07-22 22:19:23 +02:00
Thomas Kolb c9916c08da Add a simple interleaver implementation (not used yet) 2024-07-21 17:23:15 +02:00
Thomas Kolb 04f29b94bf rx: show AGC gain after preamble, header and data 2024-07-20 22:33:08 +02:00
Thomas Kolb 576cdbfac5 Added ham64.c/.h to CMakeLists.txt 2024-07-20 22:32:01 +02:00
Thomas Kolb 77b24cf591 tests: Added variant of rx_file test for layer2 debugging 2024-07-20 22:31:13 +02:00
Thomas Kolb 38010ea672 rx-debugging: always dump symbols on packet boundaries 2024-07-20 22:30:27 +02:00
Thomas Kolb 12e727be00 packet_structs: add function to dump a packet header to the log 2024-07-20 22:29:04 +02:00
Thomas Kolb 3068db1d50 Handle retransmit timeouts 2024-07-20 01:04:03 +02:00
Thomas Kolb fe684f7a1d Fixed stack overflow in transmit() 2024-07-20 01:03:31 +02:00
Thomas Kolb db2700c0f7 layer2_decode_packet_header: fixed rx_seq_nr readout 2024-07-20 01:02:42 +02:00
Thomas Kolb bfe1cce6e3 packet_queue: wrap sequence number in packet_queue_delete() 2024-07-20 01:01:55 +02:00
Thomas Kolb ac0fb54623 layer2_tx: fixed logging 2024-07-20 01:01:35 +02:00
Thomas Kolb 3b7d6baa74 layer2_tx: fixed packet size 2024-07-20 01:01:01 +02:00
Thomas Kolb bcbcf5aeff Layer 2: Added logging for retransmit handling 2024-07-20 00:26:53 +02:00
Thomas Kolb d449e31586 logger: show module name 2024-07-20 00:04:32 +02:00
Thomas Kolb 041255e15f layer2_tx: Fixed stack-use-after-return 2024-07-19 22:26:02 +02:00
Thomas Kolb 725a0ffd21 Ignore the squelch while receiving a packet
Before this commit, samples could be dropped during packet reception, which for
sure destroys the current packet and potentially the following one. Now samples
are stored even if the squelch „closes“, and decoding will potentially fail due
to high noise, but not due to missing samples.
2024-07-19 22:11:29 +02:00
Thomas Kolb 60d7fbf373 setup_tundev: limit TX queue len to 16 2024-07-19 21:59:38 +02:00
Thomas Kolb 48f061e334 Handle sequence numbers
This should enable basic retransmission handling.
2024-07-18 23:26:57 +02:00
Thomas Kolb 93aa429f4f Fixed unused variable warning 2024-07-18 22:58:13 +02:00
Thomas Kolb 9bbac6ae95 Add new files to CMakeLists.txt 2024-07-18 22:57:22 +02:00
Thomas Kolb a6464a28b8 Layer 2 received packet handling 2024-07-18 22:56:42 +02:00
Thomas Kolb 7381c7e808 Integrate new layer2 TX packet handling 2024-07-18 22:23:24 +02:00
Thomas Kolb 5adbbca786 Added functions for basic layer 2 transmission handling 2024-07-18 21:55:05 +02:00
Thomas Kolb 2348cd0c88 Implement a packet queue (incl. tests) 2024-07-11 23:23:18 +02:00
Thomas Kolb 402e36dda5 packet_structs: check data length in layer2_decode_packet_header() 2024-07-04 21:37:05 +02:00
Simon Ruderich 153ff61dcd ham64: apply improvements suggested by rudi_s 2024-07-04 21:18:57 +02:00
Simon Ruderich 62d81fc2cc test_ham64: check results using assertions 2024-07-04 21:16:20 +02:00
Thomas Kolb 9a151e0cbb Rename layer2_structs -> packet_structs 2024-07-02 20:09:56 +02:00
Thomas Kolb f17d5649fc layer2_structs: use the new HAM-64 address structure 2024-07-01 21:25:49 +02:00
Thomas Kolb 4bb4017623 HAM-64 address format implementation 2024-07-01 21:03:43 +02:00
Thomas Kolb 546d86ffb0 Implement layer 2 header packing and unpacking 2024-07-01 21:03:43 +02:00
Thomas Kolb 27e2859090 Start defining layer2 structures 2024-07-01 21:03:43 +02:00
Thomas Kolb 090dff13d6 Tune TX back-off times
See comments in config.h for background info.
2024-07-01 21:02:53 +02:00
Simon Ruderich 6032cd471d Fix compiler warnings
- implicit declaration of function ‘isprint’ [-Wimplicit-function-declaration]
- comparison between ‘result_t’ and ‘enum <anonymous>’ [-Wenum-compare]
2024-06-23 07:56:53 +02:00
Simon Ruderich d54cd8a9a8 Remove unused variable debug_fd 2024-06-23 07:46:54 +02:00
Thomas Kolb fd17ef3c1e Use full preamble for frequency estimation 2024-06-08 01:57:43 +02:00
Thomas Kolb 26a2558535 Add differential part to coarse frequency control 2024-06-08 01:54:42 +02:00
Thomas Kolb 2f2834026e Fix size of transmitted packets 2024-06-01 16:47:10 +02:00
Thomas Kolb de0f3620e6 Move hexdump() function to utils 2024-06-01 16:04:17 +02:00
Thomas Kolb 692780b313 setup_tundev.sh: fix shebang 2024-05-31 20:09:53 +02:00
Thomas Kolb 24bc1f8140 Fixed packet size with appended CRC 2024-05-31 18:36:16 +02:00
Thomas Kolb f6404dd0ea Move payload CRC to layer 2
Layer 1 only does decoding of the FEC, but the CRC check for data integrity is
done in layer 2 now.
2024-05-31 17:25:50 +02:00
Thomas Kolb 0e8e049e0a Replace all perror() calls with LOG() 2024-05-30 11:02:08 +02:00
Thomas Kolb 65daa182ef Use the new logging system everywhere 2024-05-30 10:49:43 +02:00
Thomas Kolb d6eaef91cd Switch to new logging system
The new system supports:

- time-tagging of log messages
- message priority levels with a threshold below which they are not printed
- colored output of the message priority for easy identification
- compile-time disabling of all logging per C module

So far, it is integrated in the main and rx modules which generate most
messages. Other modules will be migrated in the future.
2024-05-28 23:53:11 +02:00
Thomas Kolb d60788b6ad Config changes known to work with two directly connected HackRFs 2024-05-28 20:00:46 +02:00
Thomas Kolb 91facbf699 rx: reset internal state when restarting after a transmission 2024-05-28 19:55:21 +02:00
Simon Ruderich d5aeb6c0bc visualizer: make it optional to dup JSON to file 2024-05-28 08:59:06 +02:00
Simon Ruderich 570c379bc5 visualizer: always use === for comparisons 2024-05-28 08:51:56 +02:00
Simon Ruderich 21220deed7 visualizer: draw marker in history plot after selecting a packet 2024-05-28 08:51:56 +02:00
Simon Ruderich 7024964cae visualizer: use multiple plots for history 2024-05-28 08:51:56 +02:00
Simon Ruderich a2e23fceff visualizer: limit history plot to 300 packets
The drawing gets slow with too many points.
2024-05-28 08:51:56 +02:00
Simon Ruderich bc2f5ca76c visualizer: assign id to identify packets
The id is displayed in the graph, the packet information and in the
trace (on mouse over).
2024-05-28 08:51:56 +02:00
Simon Ruderich c5024a0b30 visualizer: skip redraws when they take too long 2024-05-28 08:51:56 +02:00
Simon Ruderich c63f7e8b57 visualizer: treat -1e38 as NaN
I considered updating jsonlogger.c to represent NaN as "null" in the
JSON. However, this makes the hand-written JSON generator much more
complicated.
2024-05-28 08:51:56 +02:00
Simon Ruderich 53190cd17c visualizer: don't use fixed scales
We might get (unexpected) input which is outside of the usual range.
2024-05-28 08:51:56 +02:00
Simon Ruderich 6fc4df205c Add HTML/JS visualizer with plots and graphs 2024-05-28 08:51:56 +02:00
Simon Ruderich 5fb5a2908d jsonlogger: increase pipe buffer to reduce likelihood of corrupted messages
Our JSON messages can get rather large which can cause a buffer overrun
when the reading program is not scheduled at the same time. When the
kernel returns EAGAIN we abort writing the current JSON message.
However, the unfinished (and thus invalid) JSON message is still in the
pipe and will be processed by the reading program.

Increase the pipe buffer from the default 65536 to reduce the likelihood
of this happening. It's difficult to completely prevent the issue as we
don't want to slow down the main program due to slow logging.
2024-05-28 08:51:56 +02:00
Simon Ruderich 657ac4faa3 test_rx_file: add JSON logging (controllable via JSONLOGGER define) 2024-05-28 08:51:56 +02:00
Thomas Kolb 33df7132ef rx: tag most debug messages with the sample index 2024-05-25 18:24:40 +02:00
Thomas Kolb 5f8346d290 agc: update squelch threshold more often
This fixes the noise level tracking in test cases like the loopback
test where the signal has already ramped up before the first noise level
update.
2024-05-25 18:16:24 +02:00
Thomas Kolb ca241f266b rx: add monotonic sample counter for debug messages 2024-05-25 18:15:23 +02:00
Simon Ruderich 0237ea6494 tests: fix compile 2024-05-09 18:32:51 +02:00
Simon Ruderich a4e55f781b Always NUL-terminate path in jsonlogger_init() 2024-05-09 18:32:26 +02:00
Simon Ruderich f689c4ec15 Fix compiler warnings
- implicit declaration of built-in function 'strncpy'
- control reaches end of non-void function
- assignment to 'void (*)(int,  siginfo_t *, void *)' from incompatible pointer type 'void (*)(int)'
2024-05-09 14:37:39 +02:00
Thomas Kolb a42d795002 Dump debug info from the RX via jsonlogger 2024-05-07 21:40:29 +02:00
Thomas Kolb 5bcd3a6933 jsonlogger: add test file and improve open/close behaviour 2024-05-05 18:40:50 +02:00
Thomas Kolb 251aca7738 Basic implementation of a JSON logger module 2024-05-05 18:09:00 +02:00
Thomas Kolb 033c26bcae preamble: invert symbols to match BPSK convention 2024-04-27 22:42:32 +02:00
Thomas Kolb c6ea578808 sdr: fix loss of samples due to unaligned buffer reads
sdr_rf_to_baseband() processes samples in blocks of size SDR_OVERSAMPLING. If
the total number of samples does not align with this block size, the leftover
samples are lost and phase and timing glitches result.

To mitigate this, sdr_receive() now has an additional parameter that specifies
the alignment of the returned data. The number of samples returned is always a
multiple of this alignment factor. This feature is used to ensure that the
number of returned samples is a multiple of SDR_OVERSAMPLING and therefore no
samples are lost in sdr_rf_to_baseband().

sdr_rf_to_baseband() now has an additional check that makes the function fail
if the alignment is incorrect.
2024-04-27 20:08:04 +02:00
Simon Ruderich a3928d0ad0 Fix compiler warnings
- passing argument 2 of 'crc_generate_key' discards ‘const’ qualifier;
  a bit ugly but signature of crc_generate_key() is wrong
- variable 'linearized_history' set but not used
- typedef is unused
- superfluous arguments to DEBUG_LOG() and fprintf()
- implicit declaration of function 'memset'
- unused arguments
2024-04-27 12:22:33 +02:00
Simon Ruderich b3ceb50b23 Fix one-byte buffer-overflow in layer1_rx_process() 2024-04-27 12:17:58 +02:00
Thomas Kolb c250944d79 transmission: fix ramp-down length calculation 2024-04-26 22:40:41 +02:00
Thomas Kolb e22b9ed4c5 rx: fix squelch level tracking
Thanks to rudi_s for reporting this.
2024-04-26 21:50:07 +02:00
Thomas Kolb d3b0ac1e0a rx: signal busy as long as squelch is open 2024-04-26 21:47:41 +02:00
Thomas Kolb 90ed7dc0a8 Re-add accidentally removed constants 2024-04-20 01:31:21 +02:00
Simon Ruderich 2768e21849 test_rx_file: set nco frequency 2024-04-20 01:14:17 +02:00
Simon Ruderich 79fc1c4f59 utils: fix numpy deprecation warnings 2024-04-20 01:14:17 +02:00
Thomas Kolb 7d1a927425 Calculate HackRF center frequency correctly 2024-04-20 01:07:21 +02:00
Thomas Kolb 32632914df Prevent TX exception in QPSK mode
QPSK-modulated packets require more samples, which must be available in the TX
buffer. Therefore we increase the required free space.
2024-04-20 01:04:13 +02:00
Thomas Kolb 11f19c03a0 Fix TX handling for multiple packets
- (only) time-based end-of-transmission tracking
  - removed tx_done flag
  - count zero-buffers correctly in time-tracking
  - add 10 ms of headroom so the transmission does not stop before buffer was
    completely transmitted (race condition)
  - fix race condition with tx_start_time in sdr_start_tx()
- simplified packet queuing (no chunking)
- read multiple packets before starting transmission (to fill buffers initially)

Thanks to rudi_s!
2024-04-20 00:55:39 +02:00
Thomas Kolb 1f5f922cdf Adjust squelch level and rampup 2024-04-12 21:50:49 +02:00
Thomas Kolb 91db4e1f75 rx: implement squelch + symsync reset
Whenever the squelch opens, the symsync is reset to prevent lock-up in
that module due to noise.
2024-04-08 22:03:09 +02:00
Thomas Kolb 4b46d87edb Add missing variable declaration 2024-03-31 22:26:34 +02:00
Thomas Kolb 93fd8aebbc Lock TX to RX frequency for clients
Central nodes (“base stations”) do no longer do coarse frequency estimation,
but do only use the preamble + PLL for fine offset tracking.
2024-03-31 22:23:04 +02:00
Thomas Kolb 4f4128fbd3 test: fixed build errors 2024-03-31 18:01:00 +02:00
Thomas Kolb 8441b12fbd rx: delay frequency estimation until history was fully refreshed 2024-03-30 22:10:13 +01:00
Thomas Kolb 171a4a369c rx: fix header checksum verification 2024-03-30 22:07:08 +01:00
Thomas Kolb 79d7f74dfc rx: use different PLL BW for header and data 2024-03-30 22:06:13 +01:00
Thomas Kolb bbf7bcf2f0 test/freq_est: add channel simulation 2024-03-30 22:05:02 +01:00
Thomas Kolb 66c88bf889 Improvements to debug scripts 2024-03-30 22:04:26 +01:00
Thomas Kolb d9707ac4a9 test: add test_rx_file 2024-03-30 21:56:00 +01:00
Thomas Kolb dd5712eada Add options parsing module 2024-03-30 21:51:27 +01:00