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, WebPhydmWatchdogReport, WebPowerTrackingReport, WebQueueDepth8814,
20    WebThermalStatus, WebUsbPhydmWatchdog, WebUsbPowerTracking8812, WebUsbRealtekDevice,
21};
22
23use wasm_bindgen::prelude::*;
24
25#[wasm_bindgen(typescript_custom_section)]
26const OPENIPC_VIDEO_FRAME_TYPES: &'static str = r#"
27export type OpenIpcVideoFrame = {
28    data: Uint8Array;
29    codec: "h264" | "h265";
30    codecString: string;
31    isKeyFrame: boolean;
32    timestamp: number;
33};
34
35export type OpenIpcRawPayload = {
36    data: Uint8Array;
37    packetSeq: string;
38    routeId: number;
39    channelId: number;
40};
41
42export type OpenIpcRxTransferProfile = {
43    frames: OpenIpcVideoFrame[];
44    rawPayloads: OpenIpcRawPayload[];
45    mavlinkPayloads: OpenIpcRawPayload[];
46    rawPayloadCount: number;
47    rawPayloadBytes: number;
48    transferBytes: number;
49    packets: number;
50    acceptedPackets: number;
51    droppedPackets: number;
52    crcDropped: number;
53    icvDropped: number;
54    reportDropped: number;
55    ignoredFrames: number;
56    sessions: number;
57    wfbPayloads: number;
58    rtpPackets: number;
59    videoFrames: number;
60    mavlinkPayloadCount: number;
61    mavlinkBytes: number;
62    parseMs: number;
63    pipelineMs: number;
64    totalMs: number;
65};
66"#;