Skip to main content

openipc_core/
lib.rs

1//! Shared OpenIPC FPV receiver logic.
2//!
3//! Native and WebAssembly frontends feed bytes into these parsers and keep their
4//! platform-specific device code at the edge.
5
6/// Adaptive-link quality estimation and WFB feedback TX helpers.
7pub mod adaptive;
8/// OpenIPC/WFB link and channel identifiers.
9pub mod channel;
10/// Legacy WFB ChaCha20-Poly1305 compatibility helpers.
11pub mod crypto;
12/// First-valid-copy packet diversity for multiple receive adapters.
13pub mod diversity;
14/// Reed-Solomon forward-error-correction helpers.
15pub mod fec;
16mod fec_simd;
17/// Minimal 802.11 frame parsing and construction helpers.
18pub mod ieee80211;
19/// Synthetic RTP source for no-hardware development.
20pub mod mock;
21/// Single-channel WFB payload recovery pipeline.
22pub mod pipeline;
23/// Radiotap TX metadata builders and parsers.
24pub mod radiotap;
25/// Realtek USB RX aggregate parsing.
26pub mod realtek;
27/// Higher-level receive runtime for video and payload routes.
28pub mod receiver;
29/// Multi-route raw payload fanout manager.
30pub mod routes;
31/// RTP parsing and H.264/H.265 depacketization.
32pub mod rtp;
33/// WFB packet, session, crypto, and FEC assembly logic.
34pub mod wfb;
35/// WFB uplink packet transmitter.
36pub mod wfb_tx;
37/// WiFi channel/frequency helpers and sweep-list parsing.
38pub mod wifi;
39
40pub use adaptive::{AdaptiveLink, AdaptiveLinkSender, LinkQuality};
41pub use channel::{ChannelId, RadioPort};
42pub use diversity::{
43    DiversityCombiner, DiversityDecision, DiversitySourceId, DiversitySourceStats, DiversityStats,
44};
45pub use fec::{FecCode, FecError};
46pub use ieee80211::{FrameLayout, WifiFrame};
47pub use mock::{MockRtpFrame, MockRtpPipeline};
48pub use pipeline::{MockPayloadPipeline, PayloadPipeline, PayloadPipelineEvent, RecoveredPayload};
49pub use radiotap::{
50    build_stream_radiotap, build_stream_radiotap_on_channel, parse_radiotap_tx_channel,
51    parse_radiotap_tx_metadata, parse_tx_mode_str, try_parse_tx_mode_str, ChannelBandwidth,
52    RadiotapTxMetadata, TxMode, TxModeKind, TxRadioParams, FRAME_TYPE_DATA, FRAME_TYPE_RTS,
53};
54pub use realtek::{
55    parse_rx_aggregate, parse_rx_aggregate_with_kind, RealtekRxPacket, RxDescriptorKind,
56    RxPacketAttrib,
57};
58pub use receiver::{
59    ReceiverBatch, ReceiverBatchCounters, ReceiverBatchOptions, ReceiverRuntime, RoutePayload,
60    RtpPayloadTap,
61};
62pub use routes::{
63    PayloadChannelRuntime, PayloadRouteError, PayloadRouteEvent, PayloadRouteId,
64    PayloadRouteManager, PayloadRuntimeKey,
65};
66pub use rtp::{
67    Codec, CodecConfigState, DamagedFramePolicy, DepacketizedFrame, FrameDamage, RtpDepacketizer,
68    RtpDepacketizerStatus, RtpHeader, RtpReorderBuffer, RtpReorderStatus,
69};
70pub use wfb::{
71    FecCounters, PlainAssembler, WfbKeypair, WfbOutput, WfbPacket, WfbReceiver, WfbSession,
72};
73pub use wfb_tx::{WfbTransmitter, WfbTxKeypair};
74pub use wifi::{channel_to_frequency, frequency_to_channel, parse_channel_sweep};