use crate::wrapper::{HeliosDacWrapper, HeliosError};
use crate::frame::Frame;
use crate::DeviceStatus;
type Result<T> = std::result::Result<T, HeliosError>;
pub struct HeliosDacController {
wrapper: HeliosDacWrapper
}
impl HeliosDacController {
pub fn new() -> Self {
HeliosDacController {
wrapper: HeliosDacWrapper::new()
}
}
pub fn devices(&mut self) -> Result<Vec<HeliosDacDevice>> {
let device_count = self.wrapper.open_devices()?;
let mut devices = vec![];
for i in 0..device_count {
let name = self.wrapper.name(i)?;
let device = HeliosDacDevice {
device_number: i,
name,
};
devices.push(device);
}
Ok(devices)
}
}
pub struct HeliosDacDevice {
device_number: u32,
pub name: String,
}
impl std::fmt::Debug for HeliosDacDevice {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct("HeliosDacDevice")
.field("name", &self.name)
.finish()
}
}
impl HeliosDacDevice {
pub fn write_frame(&self, controller: &mut HeliosDacController, frame: Frame) -> Result<()> {
controller.wrapper.write_frame(self.device_number, frame)
}
pub fn status(&self, controller: &mut HeliosDacController) -> Result<DeviceStatus> {
controller.wrapper.status(self.device_number)
}
pub fn firmware_version(&self, controller: &mut HeliosDacController) -> Result<u32> {
controller.wrapper.firmware_version(self.device_number)
}
pub fn set_name(&mut self, controller: &mut HeliosDacController, name: String) -> Result<()> {
controller.wrapper.set_name(self.device_number, name.clone())?;
self.name = name;
Ok(())
}
pub fn stop(&self, controller: &mut HeliosDacController) -> Result<()> {
controller.wrapper.stop(self.device_number)
}
pub fn set_shutter(&self, controller: &mut HeliosDacController, level: bool) -> Result<()> {
controller.wrapper.set_shutter(self.device_number, level)
}
pub fn erase_firmware(&self, controller: &mut HeliosDacController) -> Result<()> {
controller.wrapper.erase_firmware(self.device_number)
}
}