1mod adaptive;
8mod js;
9mod mock;
10mod receiver;
11mod video;
12mod webusb;
13
14pub use adaptive::OpenIpcAdaptiveLink;
15pub use mock::{OpenIpcMockPayloadRuntime, OpenIpcMockRtpPipeline};
16pub use receiver::OpenIpcReceiver;
17pub use webusb::supported_usb_filters;
18#[cfg(target_arch = "wasm32")]
19pub use webusb::{
20 list_authorized_usb_devices, WebBbDbgportRead, WebFalseAlarmCounters, WebInitReport,
21 WebIqkReport, WebJaguar3PowerTrackingReport, WebPhydmWatchdogReport, WebPowerTrackingReport,
22 WebQueueDepth8814, WebThermalStatus, WebUsbPhydmWatchdog, WebUsbPowerTracking8812,
23 WebUsbPowerTracking8822c, WebUsbRealtekDevice,
24};
25
26use wasm_bindgen::prelude::*;
27
28#[wasm_bindgen(typescript_custom_section)]
29const OPENIPC_VIDEO_FRAME_TYPES: &'static str = r#"
30export type OpenIpcVideoFrame = {
31 data: Uint8Array;
32 codec: "h264" | "h265";
33 codecString: string;
34 isKeyFrame: boolean;
35 timestamp: number;
36 payloadType: number;
37 sequenceNumber: number;
38 nalType: number;
39 decoderConfigComplete: boolean;
40 codecConfig: OpenIpcCodecConfigState;
41};
42
43export type OpenIpcCodecConfigState = {
44 h264Sps: boolean;
45 h264Pps: boolean;
46 h265Vps: boolean;
47 h265Sps: boolean;
48 h265Pps: boolean;
49};
50
51export type OpenIpcRtpStatus = {
52 packets: number;
53 framesEmitted: number;
54 configWaitDrops: number;
55 keyframesWithPrependedConfig: number;
56 parameterSetsPrepended: number;
57 fragmentSequenceGaps: number;
58 fragmentOverflows: number;
59 unsupportedPayloads: number;
60 malformedPackets: number;
61 lastPayloadType: number | null;
62 lastSequenceNumber: number | null;
63 lastTimestamp: number | null;
64 lastCodec: "h264" | "h265" | null;
65 lastNalType: number | null;
66 codecConfig: OpenIpcCodecConfigState;
67 h264ConfigComplete: boolean;
68 h265ConfigComplete: boolean;
69 reorderBufferedPackets: number;
70 reorderedPackets: number;
71 latePackets: number;
72 forcedFlushes: number;
73};
74
75export type OpenIpcMockFrame = {
76 width: number;
77 height: number;
78 frameIndex: string;
79 timestamp: number;
80 rtpPackets: number;
81 rtpBytes: number;
82 rgba: Uint8Array;
83};
84
85export type OpenIpcRawPayload = {
86 data: Uint8Array;
87 packetSeq: string;
88 routeId: number;
89 channelId: number;
90};
91
92export type OpenIpcRxTransferProfile = {
93 frames: OpenIpcVideoFrame[];
94 rawPayloads: OpenIpcRawPayload[];
95 mavlinkPayloads: OpenIpcRawPayload[];
96 rawPayloadCount: number;
97 rawPayloadBytes: number;
98 transferBytes: number;
99 packets: number;
100 acceptedPackets: number;
101 droppedPackets: number;
102 crcDropped: number;
103 icvDropped: number;
104 reportDropped: number;
105 ignoredFrames: number;
106 sessions: number;
107 wfbPayloads: number;
108 rtpPackets: number;
109 videoFrames: number;
110 mavlinkPayloadCount: number;
111 mavlinkBytes: number;
112 parseMs: number;
113 pipelineMs: number;
114 totalMs: number;
115 rtpStatus: OpenIpcRtpStatus;
116};
117"#;