esp-sdr-zephyr
Raw I/Q receive and transmit on the ESP32-S3/C6 Wi-Fi radio, for Zephyr
Loading...
Searching...
No Matches
esp_sdr_tx.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: GPL-3.0-or-later
3 */
4
20
21#ifndef ESP_SDR_ESP_SDR_TX_H_
22#define ESP_SDR_ESP_SDR_TX_H_
23
24#include <stdbool.h>
25#include <stddef.h>
26#include <stdint.h>
27
28#include <esp_sdr/esp_sdr.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
38
39#if defined(CONFIG_SOC_SERIES_ESP32S3)
51int esp_sdr_tx_set_gain(int index);
52
55
58
63int esp_sdr_tx_gain_power(int index);
64#endif
65
77int esp_sdr_tx_set_lpf(int code_a, int code_b);
78
79#if defined(CONFIG_SOC_SERIES_ESP32S3)
81uint32_t esp_sdr_tx_rate_hz(enum esp_sdr_rate rate);
82#endif
83
85static inline uint32_t esp_sdr_tx_word(int16_t i, int16_t q)
86{
87 return ((uint32_t)i & 0x3ffU) | (((uint32_t)q & 0x3ffU) << 10);
88}
89
90#if defined(CONFIG_SOC_SERIES_ESP32S3)
111int esp_sdr_tx_play(enum esp_sdr_rate rate, const uint32_t *words, size_t count);
112
114#define ESP_SDR_TX_PLAY_MAX_MS 5000U
115
136int esp_sdr_tx_play_for(enum esp_sdr_rate rate, const uint32_t *words, size_t count,
137 uint32_t duration_ms, uint32_t *bursts);
138
142 uint32_t segments;
144 uint32_t samples;
146 uint32_t elapsed_ms;
147};
148
170int esp_sdr_tx_sweep(enum esp_sdr_rate rate, float f0_hz, float f1_hz, uint32_t duration_ms,
171 int amp, struct esp_sdr_tx_sweep_stats *stats);
172
183
192
198uint32_t *esp_sdr_tx_loop_buf(int bank, size_t *words);
199
208int esp_sdr_tx_loop_start(int bank, size_t count);
209
212
215
217#endif /* CONFIG_SOC_SERIES_ESP32S3 */
218
222 const char *name;
224 int (*start)(uint64_t freq_hz, uint32_t rate_hz);
226 int (*write)(const struct esp_sdr_iq16 *samples, size_t count);
228 int (*stop)(void);
229};
230
233 uint64_t samples;
234 uint32_t writes;
235 uint32_t errors;
236};
237
238#if defined(CONFIG_ESP_SDR_TX)
246
249
257int esp_sdr_tx_start(uint64_t freq_hz, uint32_t rate_hz);
258
264int esp_sdr_tx_write(const struct esp_sdr_iq16 *samples, size_t count);
265
268
271
274
277#endif /* CONFIG_ESP_SDR_TX */
278
282 uint64_t played, dropped;
284 uint32_t underruns, overruns;
286 uint32_t switches, errors;
288 uint32_t interp, elapsed_us;
290 uint32_t fill_us[2], fill_blocks[2], fill_cpu[2];
292 bool simd;
294 uint32_t switch_us_sum, switch_us_max;
298 uint32_t restarts;
300 uint32_t fill_us_max, wake_late_us_max, idle_us_max;
303};
304
305#if defined(CONFIG_ESP_SDR_TX_DAC)
314
317
326typedef void (*esp_sdr_tx_dac_gen_t)(void *user, uint32_t *dst, uint64_t index, uint32_t n);
327
341int esp_sdr_tx_dac_play_gen(esp_sdr_tx_dac_gen_t gen, void *user, uint64_t samples);
342
349#endif
350
352
353#ifdef __cplusplus
354}
355#endif
356
357#endif /* ESP_SDR_ESP_SDR_TX_H_ */
ESP-SDR: raw I/Q receive and transmit on the ESP32-S3 Wi-Fi radio.
esp_sdr_rate
Definition esp_sdr.h:84
int esp_sdr_tx_loop_begin(enum esp_sdr_rate rate)
Take the radio and switch the front end to TX at the selected step.
int esp_sdr_tx_loop_start(int bank, size_t count)
(Re)start looping over the first count words of bank.
void esp_sdr_tx_loop_halt(void)
Stop playback at once; the session stays open.
void esp_sdr_tx_loop_end(void)
Stop playback, back to RX, release the radio.
uint32_t * esp_sdr_tx_loop_buf(int bank, size_t *words)
void esp_sdr_tx_get_stats(struct esp_sdr_tx_stats *stats)
void esp_sdr_tx_dac_get_stats(struct esp_sdr_tx_dac_stats *stats)
uint32_t esp_sdr_tx_rate_hz(enum esp_sdr_rate rate)
int esp_sdr_tx_play_for(enum esp_sdr_rate rate, const uint32_t *words, size_t count, uint32_t duration_ms, uint32_t *bursts)
Replay one burst back to back for a while, like esp_sdr_tx_play().
int esp_sdr_tx_play(enum esp_sdr_rate rate, const uint32_t *words, size_t count)
Play one burst of complex samples out through the TX DAC.
int esp_sdr_tx_get_gain(void)
static uint32_t esp_sdr_tx_word(int16_t i, int16_t q)
Definition esp_sdr_tx.h:85
int esp_sdr_tx_start(uint64_t freq_hz, uint32_t rate_hz)
Start streaming.
int esp_sdr_tx_gain_power(int index)
int esp_sdr_tx_write(const struct esp_sdr_iq16 *samples, size_t count)
Hand samples to the backend.
int esp_sdr_tx_set_lpf(int code_a, int code_b)
Select the TX baseband low-pass capacitor codes (experimental).
int esp_sdr_tx_set_gain(int index)
Select a transmit power step, picked up by the next transmission.
int esp_sdr_tx_sweep(enum esp_sdr_rate rate, float f0_hz, float f1_hz, uint32_t duration_ms, int amp, struct esp_sdr_tx_sweep_stats *stats)
Transmit a linear frequency sweep at fixed power.
int esp_sdr_tx_stop(void)
Stop streaming; no-op when stopped.
const struct esp_sdr_tx_backend esp_sdr_tx_stub_backend
const struct esp_sdr_tx_backend esp_sdr_tx_dac_backend
int esp_sdr_tx_dac_play_gen(esp_sdr_tx_dac_gen_t gen, void *user, uint64_t samples)
Play samples generated DAC samples gapless at the current LO.
int esp_sdr_tx_set_backend(const struct esp_sdr_tx_backend *backend)
Select the streaming backend; NULL restores the default (DAC if built, else the stub).
const struct esp_sdr_tx_backend * esp_sdr_tx_get_backend(void)
int esp_sdr_tx_gain_max(void)
uint32_t esp_sdr_tx_dac_queued(void)
void(* esp_sdr_tx_dac_gen_t)(void *user, uint32_t *dst, uint64_t index, uint32_t n)
Definition esp_sdr_tx.h:326
bool esp_sdr_tx_active(void)
Definition esp_sdr.h:95
Definition esp_sdr_tx.h:220
int(* start)(uint64_t freq_hz, uint32_t rate_hz)
Definition esp_sdr_tx.h:224
int(* stop)(void)
Definition esp_sdr_tx.h:228
const char * name
Definition esp_sdr_tx.h:222
int(* write)(const struct esp_sdr_iq16 *samples, size_t count)
Definition esp_sdr_tx.h:226
Definition esp_sdr_tx.h:280
int32_t slack_us_min
Definition esp_sdr_tx.h:296
uint32_t switches
Definition esp_sdr_tx.h:286
uint32_t restarts
Definition esp_sdr_tx.h:298
uint32_t switch_us_sum
Definition esp_sdr_tx.h:294
uint64_t played
Definition esp_sdr_tx.h:282
uint32_t fill_us[2]
Definition esp_sdr_tx.h:290
bool simd
Definition esp_sdr_tx.h:292
uint32_t fill_us_max
Definition esp_sdr_tx.h:300
int32_t start_margin_us
Definition esp_sdr_tx.h:302
uint32_t interp
Definition esp_sdr_tx.h:288
uint32_t underruns
Definition esp_sdr_tx.h:284
Definition esp_sdr_tx.h:232
Definition esp_sdr_tx.h:140
uint32_t segments
Definition esp_sdr_tx.h:142
uint32_t samples
Definition esp_sdr_tx.h:144
uint32_t elapsed_ms
Definition esp_sdr_tx.h:146