pub struct LinuxCiDataDevice { /* private fields */ }linux only.Expand description
A CiDataDevice backed by a Linux DVB CI TS data-plane device
(/dev/dvb/adapterN/ciM). The host writes scrambled TS and reads the
descrambled TS back; I/O is in whole 188-byte packets.
§Duplex versus split (Digital Devices CXD2099)
Most drivers accept the node opened O_RDWR. The Digital Devices
CXD2099 ci0 (dddvb, Ubuntu 5.15 kernel, verified on hardware) rejects
O_RDWR with EINVAL and only works as two one-direction descriptors.
open therefore tries O_RDWR first and falls back to the
split open on EINVAL (and only EINVAL); open_split
/ from_split pick it directly.
Implementations§
Source§impl LinuxCiDataDevice
impl LinuxCiDataDevice
Sourcepub fn open(adapter: u32, ci: u32) -> Result<Self>
pub fn open(adapter: u32, ci: u32) -> Result<Self>
Open /dev/dvb/adapter{adapter}/ci{ci}: O_RDWR | O_NONBLOCK, and on
EINVAL (the Digital Devices CXD2099 ci0 — see the type docs) the
split open. Any other error is returned as is.
Sourcepub fn open_split(adapter: u32, ci: u32) -> Result<Self>
pub fn open_split(adapter: u32, ci: u32) -> Result<Self>
Open /dev/dvb/adapter{adapter}/ci{ci} as two one-direction
descriptors (write O_WRONLY, read O_RDONLY | O_NONBLOCK), for
drivers that reject O_RDWR (Digital Devices CXD2099).
Sourcepub fn from_file(file: File) -> Self
pub fn from_file(file: File) -> Self
Wrap an already-open CI data-plane device file. The caller is
responsible for having opened it O_NONBLOCK — see
open_path for why a blocking fd here hangs
feed_ts (#1066).
Sourcepub fn from_split(write: File, read: File) -> Self
pub fn from_split(write: File, read: File) -> Self
Wrap an already-open pair of one-direction descriptors: write
(O_WRONLY) and read (O_RDONLY). The caller is responsible for
having opened read with O_NONBLOCK — a blocking read fd makes
feed_ts’s drain loop hang (#1066) — see open_path.
Trait Implementations§
Source§impl CiDataDevice for LinuxCiDataDevice
impl CiDataDevice for LinuxCiDataDevice
Source§fn write(&mut self, ts: &[u8]) -> Result<()>
fn write(&mut self, ts: &[u8]) -> Result<()>
ts must be a whole number of
TS_PACKET_LEN-byte packets. Read more