pub struct MockCaDevice {
pub inbound: VecDeque<Vec<u8>>,
pub ops: Vec<DeviceOp>,
pub slot: SlotInfo,
}Expand description
In-memory CaDevice for tests and the differential harness.
inboundis a scripted queue of frames the “module” (mock CAM) sends up; eachreadpops one.- every host-side operation is appended to
opsso a test (or a differential comparison against an external reference) can assert the exact emittedwrite/ioctl sequence.
Fields§
§inbound: VecDeque<Vec<u8>>Scripted frames the module sends to the host (FIFO).
ops: Vec<DeviceOp>Recorded host-side operations, in order.
slot: SlotInfoSlot status returned by slot_info.
Implementations§
Source§impl MockCaDevice
impl MockCaDevice
Sourcepub fn new(inbound: impl IntoIterator<Item = Vec<u8>>) -> Self
pub fn new(inbound: impl IntoIterator<Item = Vec<u8>>) -> Self
New mock with a ready module in slot 0 and the given inbound script.
Examples found in repository?
examples/mock_cam_session.rs (line 17)
15fn main() -> std::io::Result<()> {
16 // Script a module that accepts the transport connection (C_T_C_Reply).
17 let dev = MockCaDevice::new([vec![tags::C_T_C_REPLY, 0x01, 0x01]]);
18 let mut driver = Driver::new(dev);
19
20 // Bring the interface up: reset + open the transport connection.
21 driver.init()?;
22 println!("init: sent {} device op(s)", driver.device().ops.len());
23
24 // Pump the device. When readable it reads a frame and feeds the stack;
25 // otherwise it advances the EN 50221 poll cadence by the timeout.
26 for step in 0..5 {
27 let read = driver.pump(Duration::from_millis(100))?;
28 println!("pump {step}: processed_frame={read}");
29 }
30
31 // Anything the host application needs to act on surfaces as a Notification.
32 for note in driver.take_notifications() {
33 match note {
34 Notification::CamReady => println!("note: CAM ready — safe to send ca_pmt"),
35 Notification::ApplicationInfo { menu, .. } => {
36 println!("note: application_information menu={menu:?}")
37 }
38 Notification::CaInfo { ca_system_ids } => {
39 println!("note: ca_info system_ids={ca_system_ids:?}")
40 }
41 other => println!("note: {other:?}"),
42 }
43 }
44
45 // The mock records every device op (writes/ioctls) — handy for assertions.
46 println!("total recorded device ops: {}", driver.device().ops.len());
47 Ok(())
48}Trait Implementations§
Source§impl CaDevice for MockCaDevice
impl CaDevice for MockCaDevice
Source§impl Debug for MockCaDevice
impl Debug for MockCaDevice
Source§impl Default for MockCaDevice
impl Default for MockCaDevice
Source§fn default() -> MockCaDevice
fn default() -> MockCaDevice
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for MockCaDevice
impl RefUnwindSafe for MockCaDevice
impl Send for MockCaDevice
impl Sync for MockCaDevice
impl Unpin for MockCaDevice
impl UnsafeUnpin for MockCaDevice
impl UnwindSafe for MockCaDevice
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more