Skip to main content

openipc_web/
lib.rs

1//! WebAssembly bindings for the OpenIPC receiver pipeline and WebUSB driver.
2//!
3//! The Rust types in this crate wrap `openipc-core` and `openipc-rtl88xx` for
4//! browser and Tauri-webview frontends. JavaScript receives typed video frames,
5//! raw route payloads, diagnostics, and WebUSB helpers through wasm-bindgen.
6
7mod adaptive;
8mod js;
9mod receiver;
10mod video;
11mod webusb;
12
13pub use adaptive::OpenIpcAdaptiveLink;
14pub use receiver::OpenIpcReceiver;
15pub use webusb::supported_usb_filters;
16#[cfg(target_arch = "wasm32")]
17pub use webusb::{
18    list_authorized_usb_devices, WebBbDbgportRead, WebFalseAlarmCounters, WebInitReport,
19    WebIqkReport, WebJaguar3PowerTrackingReport, WebPhydmWatchdogReport, WebPowerTrackingReport,
20    WebQueueDepth8814, WebThermalStatus, WebUsbPhydmWatchdog, WebUsbPowerTracking8812,
21    WebUsbPowerTracking8822c, WebUsbRealtekDevice,
22};
23
24use wasm_bindgen::prelude::*;
25
26#[wasm_bindgen(typescript_custom_section)]
27const OPENIPC_VIDEO_FRAME_TYPES: &'static str = r#"
28export type OpenIpcVideoFrame = {
29    data: Uint8Array;
30    codec: "h264" | "h265";
31    codecString: string;
32    isKeyFrame: boolean;
33    timestamp: number;
34};
35
36export type OpenIpcRawPayload = {
37    data: Uint8Array;
38    packetSeq: string;
39    routeId: number;
40    channelId: number;
41};
42
43export type OpenIpcRxTransferProfile = {
44    frames: OpenIpcVideoFrame[];
45    rawPayloads: OpenIpcRawPayload[];
46    mavlinkPayloads: OpenIpcRawPayload[];
47    rawPayloadCount: number;
48    rawPayloadBytes: number;
49    transferBytes: number;
50    packets: number;
51    acceptedPackets: number;
52    droppedPackets: number;
53    crcDropped: number;
54    icvDropped: number;
55    reportDropped: number;
56    ignoredFrames: number;
57    sessions: number;
58    wfbPayloads: number;
59    rtpPackets: number;
60    videoFrames: number;
61    mavlinkPayloadCount: number;
62    mavlinkBytes: number;
63    parseMs: number;
64    pipelineMs: number;
65    totalMs: number;
66};
67"#;