pub mod backend;
pub mod discovery;
mod error;
#[cfg(any(feature = "idn", feature = "lasercube-wifi"))]
mod net_utils;
pub mod presentation;
pub mod protocols;
pub(crate) mod reconnect;
mod scheduler;
pub mod stream;
pub mod types;
pub use error::{Error, Result};
pub use backend::{BackendKind, DacBackend, FifoBackend, FrameSwapBackend, WriteOutcome};
pub use discovery::{
DacDiscovery, DiscoveredDevice, DiscoveredDeviceInfo, ExternalDevice, ExternalDiscoverer,
};
pub use types::{
caps_for_dac_type,
ChunkRequest,
ChunkResult,
DacCapabilities,
DacConnectionState,
DacDevice,
DacInfo,
DacType,
EnabledDacTypes,
LaserPoint,
OutputModel,
ReconnectConfig,
RunExit,
StreamConfig,
StreamInstant,
StreamStats,
StreamStatus,
UnderrunPolicy,
};
pub use stream::{Dac, Stream, StreamControl};
pub use presentation::{
default_transition, Frame, FrameSession, FrameSessionConfig, TransitionFn, TransitionPlan,
};
#[cfg(feature = "helios")]
pub use backend::HeliosBackend;
#[cfg(feature = "helios")]
pub use protocols::helios;
#[cfg(feature = "ether-dream")]
pub use backend::EtherDreamBackend;
#[cfg(feature = "ether-dream")]
pub use protocols::ether_dream;
#[cfg(feature = "idn")]
pub use backend::IdnBackend;
#[cfg(feature = "idn")]
pub use protocols::idn;
#[cfg(feature = "lasercube-wifi")]
pub use backend::LasercubeWifiBackend;
#[cfg(feature = "lasercube-wifi")]
pub use protocols::lasercube_wifi;
#[cfg(feature = "lasercube-usb")]
pub use backend::LasercubeUsbBackend;
#[cfg(feature = "lasercube-usb")]
pub use protocols::lasercube_usb;
#[cfg(feature = "avb")]
pub use backend::AvbBackend;
#[cfg(feature = "avb")]
pub use protocols::avb;
#[cfg(feature = "lasercube-usb")]
pub use protocols::lasercube_usb::rusb;
use backend::Result as BackendResult;
pub fn list_devices() -> BackendResult<Vec<DacInfo>> {
list_devices_filtered(&EnabledDacTypes::all())
}
pub fn list_devices_filtered(enabled_types: &EnabledDacTypes) -> BackendResult<Vec<DacInfo>> {
let mut discovery = DacDiscovery::new(enabled_types.clone());
let devices = discovery
.scan()
.into_iter()
.map(|device| {
let info = device.info();
DacInfo {
id: info.stable_id(),
name: info.name(),
kind: device.dac_type(),
caps: caps_for_dac_type(&device.dac_type()),
}
})
.collect();
Ok(devices)
}
pub fn open_device(id: &str) -> BackendResult<Dac> {
let mut discovery = DacDiscovery::new(EnabledDacTypes::all());
let mut dac = discovery.open_by_id(id)?;
dac.reconnect_target = Some(reconnect::ReconnectTarget {
device_id: id.to_string(),
discovery_factory: None,
});
Ok(dac)
}