1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//! ETSI DVB-S2 / S2X / T2 BBFrame parser + builder.
//!
//! Supports both Normal Mode (NM) and High Efficiency Mode (HEM)
//! per EN 302 755 v1.4.1 §5.1.7.
//!
//! Entry points:
//! - [`header::Bbheader`] — the 10-byte BBHEADER with parse + serialize.
//! - [`packet::up_iter`] — user packet extraction from the data field.
//! - [`pump::BbframePump`] — per-PLP BBFrame→inner-TS pump (orchestrates header
//! parse + carry-over extraction).
//! - [`crc::crc8`] — CRC-8 encoder (EN 302 307-1 §5.1.4 / EN 302 755 Annex F).
//! - [`issy`] — ISSY field parser (EN 302 755 Annex C).
//!
//! # Quick start
//! ```
//! use dvb_bbframe::header::{Bbheader, Matype, Mode, TsGs, BBHEADER_LEN};
//!
//! let hdr = Bbheader {
//! matype: Matype { ts_gs: TsGs::Ts, sis: true, ccm: true, issyi: false, npd: false, ext: 0, isi: 0 },
//! upl: 1504, sync: 0x47, dfl: 1504, syncd: 0, mode: Mode::Normal, issy_in_header: None,
//! };
//! let bytes = hdr.serialize(); // 10-byte BBHEADER
//! assert_eq!(bytes.len(), BBHEADER_LEN);
//! assert_eq!(Bbheader::parse(&bytes).unwrap(), hdr); // byte-identical round-trip
//! ```
//! For recovering the inner TS carried in a T2-MI stream, see
//! `dvb_t2mi::inner_ts::InnerTsRecovery`, which drives this header + the
//! [`packet`] extractor for you.
//!
//! # Generic Stream (GSE) handoff
//!
//! When `Bbheader::parse` yields `matype.ts_gs == TsGs::Gse`, the data field
//! carries GSE (Generic Stream Encapsulation) packets (EN 302 307-1 / EN 302 755).
//! GSE parsing is out of scope for this crate — hand the data field to the
//! third-party `dvb-gse` crate:
//!
//! ```ignore
//! use dvb_bbframe::header::{Bbheader, TsGs, BBHEADER_LEN};
//!
//! let hdr = Bbheader::parse(df_bytes).unwrap();
//! let data_field = &df_bytes[BBHEADER_LEN..];
//! match hdr.matype.ts_gs {
//! TsGs::Ts => {
//! /* TS user packets: dvb_bbframe::packet::up_iter(data_field, &hdr) */
//! }
//! TsGs::Gse => {
//! /* GSE packets: hand `data_field` to the `dvb-gse` crate */
//! }
//! other => {
//! /* GFPS / GCS — generic continuous or packetized */
//! }
//! }
//! ```
//!
//! # RFU policy
//!
//! BBFrame `reserved_future_use` bits are **emitted as 1** and
//! `reserved_zero_future_use` bits as **0**, following the DVB convention.
//! Parsers accept any value (no rejection on non-zero RFU) for forward
//! compatibility.
// Runnable examples, embedded so they render on docs.rs and stay in sync with
// the actual `examples/*.rs` files (shown, not compiled).
extern crate alloc;
pub use ;