diff options
Diffstat (limited to 'src/qhyccd')
-rw-r--r-- | src/qhyccd/mod.rs | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/src/qhyccd/mod.rs b/src/qhyccd/mod.rs index ac590af..bda6822 100644 --- a/src/qhyccd/mod.rs +++ b/src/qhyccd/mod.rs @@ -4,18 +4,12 @@ pub use self::QHYCCDCam::Control; use self::QHYCCDCam::*; -use std::alloc::{alloc, dealloc, Layout}; -use std::collections::HashMap; use std::ffi::CStr; use std::os; -use std::fs::File; -use std::io::BufWriter; -use std::path::Path; use std::time::Duration; use crossbeam_channel::unbounded; use crossbeam_channel::{Sender, Receiver, TryRecvError}; -use crossbeam_channel::select; use png::HasParameters; @@ -29,6 +23,15 @@ pub struct Camera { frame_size: usize, handle: *mut os::raw::c_void, settings: Settings, + parameters: Parameters, +} + +#[derive(Debug)] +pub struct Parameters { + bpp: u32, + pixel_dimensions: (f64, f64), + image_dimensions: (u32, u32), + chip_dimensions: (f64, f64), } #[derive(Debug, Default, Copy, Clone)] @@ -115,7 +118,6 @@ static mut INITIALIZED: bool = false; pub fn fix_channels_and_endianness(dataslice: &mut [u8]) { for i in 0..(dataslice.len() / 6) { let (b_low, b_high) = (dataslice[i * 6], dataslice[i * 6 + 1]); - let tmp2 = dataslice[i * 6 + 1]; dataslice[i * 6 + 1] = dataslice[i * 6 + 4]; dataslice[i * 6] = dataslice[i * 6 + 5]; dataslice[i * 6 + 4] = b_high; @@ -164,6 +166,7 @@ pub fn connect(camera_idx: i32) -> Result<(Receiver<QHYResponse>, Sender<QHYMess let mut camera = match acquire(camera_idx) { Ok(camera) => camera, Err(e) => { + eprintln!("camera setup error: {:?}", e); response_sender.send(QHYResponse::InitializationError).unwrap(); return; }, @@ -334,12 +337,27 @@ fn acquire(camera_idx: i32) -> Result<Camera> { check(QHYCCDCam::SetQHYCCDStreamMode(handle, 0))?; // 0 means single frame mode... check(QHYCCDCam::InitQHYCCD(handle))?; check(QHYCCDCam::CancelQHYCCDExposingAndReadout(handle))?; - Ok(Camera { + let mut camera = Camera { buffer: vec![], frame_size: 0, handle: handle, - settings: Settings::default() - }) + settings: Settings::default(), + parameters: Parameters { + chip_dimensions: (0.0, 0.0), + image_dimensions: (0, 0), + pixel_dimensions: (0.0, 0.0), + bpp: 0, + } + }; + let (chip_dimensions, image_dimensions, pixel_dimensions, bpp) = camera.get_dimensions()?; + let parameters = Parameters { + chip_dimensions, + image_dimensions, + pixel_dimensions, + bpp, + }; + camera.parameters = parameters; + Ok(camera) } } @@ -448,8 +466,6 @@ impl Camera { } pub fn set_defaults(&mut self) -> Result<()> { unsafe { - println!("Hey wait gotta get dimensions first"); - let ((chipw, chiph), (imagew, imageh), (pixelw, pixelh), bpp) = self.get_dimensions()?; match QHYCCDCam::IsQHYCCDControlAvailable(self.handle, Control::Color as i32) { 1 | 2 | 3 | 4 => { self.set_color_mode(false)?; @@ -463,14 +479,14 @@ impl Camera { return Err(CameraError::QHYError) } } - self.set_roi(0, 0, imagew, imageh)?; + self.set_roi(0, 0, self.parameters.image_dimensions.0, self.parameters.image_dimensions.1)?; self.set_bin_mode(1)?; if self.has_control(Control::TransferBit) { check(QHYCCDCam::SetQHYCCDBitsMode(self.handle, 16))?; self.settings.bpp = 16; println!("set tp 16bpp"); } - println!("roi set to {} x {} ???", imagew, imageh); + println!("roi set to {} x {} ???", self.parameters.image_dimensions.0, self.parameters.image_dimensions.1); println!("gain limits: {:?}", self.get_control_limits(Control::Gain)?); println!("exposure limits: {:?}", self.get_control_limits(Control::Exposure)?); println!("offset: {:?}", self.get_control_limits(Control::Offset)?); |