diff --git a/cuvis/AcquisitionContext.py b/cuvis/AcquisitionContext.py index d8b48b2..691d8d9 100644 --- a/cuvis/AcquisitionContext.py +++ b/cuvis/AcquisitionContext.py @@ -14,6 +14,7 @@ import asyncio as a + class AcquisitionContext(object): def __init__(self, base: Union[Calibration, SessionFile], *, simulate: bool = False): self._handle = None @@ -38,7 +39,6 @@ def __init__(self, base: Union[Calibration, SessionFile], *, simulate: bool = Fa "Could not interpret input of type {}.".format(type(base))) pass - @property @copydoc(cuvis_il.cuvis_acq_cont_get_state) def state(self) -> HardwareState: @@ -46,8 +46,7 @@ def state(self) -> HardwareState: if cuvis_il.status_ok != cuvis_il.cuvis_acq_cont_get_state( self._handle, val): raise SDKException() - return internal.__HardwareState__[ cuvis_il.p_cuvis_hardware_state_t_value(val)] - + return internal.__HardwareState__[cuvis_il.p_cuvis_hardware_state_t_value(val)] @property @copydoc(cuvis_il.cuvis_acq_cont_get_component_count) @@ -62,7 +61,7 @@ def component_count(self) -> int: def _get_component_online(self, idref: int) -> bool: val = cuvis_il.new_p_int() if cuvis_il.status_ok != cuvis_il.cuvis_comp_online_get( - self._handle,idref, val): + self._handle, idref, val): raise SDKException() return bool(cuvis_il.p_int_value(val)) @@ -73,7 +72,6 @@ def _get_component_info(self, idref: int) -> ComponentInfo: self._handle, idref, ci): raise SDKException() return ComponentInfo._from_internal(ci) - @property @copydoc(cuvis_il.cuvis_acq_cont_queue_size_get) @@ -122,7 +120,7 @@ def operation_mode(self) -> OperationMode: if cuvis_il.status_ok != cuvis_il.cuvis_acq_cont_operation_mode_get( self._handle, val): raise SDKException() - return internal.__OperationMode__[cuvis_il.p_cuvis_operation_mode_t_value(val)] + return internal.__OperationMode__[cuvis_il.p_cuvis_operation_mode_t_value(val)] @operation_mode.setter @copydoc(cuvis_il.cuvis_acq_cont_operation_mode_set) @@ -236,29 +234,30 @@ def set_fps_async(self, val: float) -> Async: return Async(cuvis_il.p_int_value(_pasync)) @property - @copydoc(cuvis_il.cuvis_acq_cont_get_pixel_format_swig) - def pixel_format(self, id: int) -> str: - return cuvis_il.cuvis_acq_cont_get_pixel_format_swig(self._handle, id) + @copydoc(cuvis_il.cuvis_comp_pixel_format_get_swig) + def _comp_pixel_format(self, id: int) -> str: + return cuvis_il.cuvis_comp_pixel_format_get_swig(self._handle, id) - @pixel_format.setter - @copydoc(cuvis_il.cuvis_acq_cont_fps_set) - def pixel_format(self, id: int, val: str) -> None: - if cuvis_il.status_ok != cuvis_il.cuvis_acq_cont_set_pixel_format( - self._handle, val): + @_comp_pixel_format.setter + @copydoc(cuvis_il.cuvis_comp_pixel_format_set) + def _comp_pixel_format(self, id: int, val: str) -> None: + if cuvis_il.status_ok != cuvis_il.cuvis_comp_pixel_format_set( + self._handle, id, val): raise SDKException() pass @property - @copydoc(cuvis_il.cuvis_acq_cont_get_pixel_format_swig) - def available_pixel_formats(self, id: int) -> list[str]: + @copydoc(cuvis_il.cuvis_comp_available_pixel_format_get_swig) + def _comp_available_pixel_formats(self, id: int) -> list[str]: pCount = cuvis_il.new_p_int() - if cuvis_il.status_ok != cuvis_il.cuvis_acq_cont_get_available_pixel_format_count( + if cuvis_il.status_ok != cuvis_il.cuvis_comp_available_pixel_format_count_get( self._handle, id, pCount): raise SDKException() count = cuvis_il.p_int_value(pCount) formats = [] for i in range(count): - formats.append(str(cuvis_il.cuvis_acq_cont_get_available_pixel_format_swig(self._handle, id, i))) + formats.append( + str(cuvis_il.cuvis_comp_available_pixel_format_get_swig(self._handle, id, i))) return formats @copydoc(cuvis_il.cuvis_acq_cont_has_next_measurement) @@ -404,7 +403,7 @@ def bandwidth(self) -> int: @property @copydoc(cuvis_il.cuvis_acq_cont_auto_exp_get) - def auto_exp(self) -> bool : + def auto_exp(self) -> bool: _ptr = cuvis_il.new_p_int() if cuvis_il.status_ok != cuvis_il.cuvis_acq_cont_auto_exp_get( self._handle, _ptr): @@ -426,10 +425,10 @@ def set_auto_exp_async(self, val: bool) -> Async: self._handle, _pasync, int(val)): raise SDKException() return Async(cuvis_il.p_int_value(_pasync)) - + @property @copydoc(cuvis_il.cuvis_acq_cont_auto_exp_comp_get) - def auto_exp_comp(self) -> float : + def auto_exp_comp(self) -> float: _ptr = cuvis_il.new_p_double() if cuvis_il.status_ok != cuvis_il.cuvis_acq_cont_auto_exp_comp_get( self._handle, _ptr): @@ -476,39 +475,39 @@ def set_binning_async(self, val: bool) -> Async: self._handle, _pasync, int(val)): raise SDKException() return Async(cuvis_il.p_int_value(_pasync)) - - def register_state_change_callback(self, callback: Callable[[HardwareState, list[tuple[str,bool]]], Awaitable[None]]) -> None: + + def register_state_change_callback(self, callback: Callable[[HardwareState, list[tuple[str, bool]]], Awaitable[None]]) -> None: """ """ self.reset_state_change_callback() - + async def _internal_state_loop(): - poll_time = 0.5 - last_state = HardwareState.Offline - last_component_states = [(cmp.info.display_name, False) - for cmp in self.components()] - first_pending = True - while True: - state_changed = first_pending - first_pending = False - - current_state = self.state - if last_state != current_state: + poll_time = 0.5 + last_state = HardwareState.Offline + last_component_states = [(cmp.info.display_name, False) + for cmp in self.components()] + first_pending = True + while True: + state_changed = first_pending + first_pending = False + + current_state = self.state + if last_state != current_state: + state_changed = True + last_state = current_state + for i, cmp in enumerate(self.components()): + comp_state = cmp.online() + last_comp_state = last_component_states[i][1] + + if comp_state != last_comp_state: state_changed = True - last_state = current_state - for i, cmp in enumerate(self.components()): - comp_state = cmp.online() - last_comp_state = last_component_states[i][1] - - if comp_state != last_comp_state: - state_changed = True - last_component_states[i] = last_component_states[i][0] , comp_state + last_component_states[i] = last_component_states[i][0], comp_state - if state_changed: - await callback(last_state, last_component_states) - else: - await a.sleep(poll_time) + if state_changed: + await callback(last_state, last_component_states) + else: + await a.sleep(poll_time) self._state_poll_task = a.create_task(_internal_state_loop()) @@ -520,17 +519,12 @@ def reset_state_change_callback(self) -> None: self._state_poll_task.cancel() self._state_poll_task = None - - - - - def components(self): """ Returns an iterator over all components """ for i in range(0, self.component_count): - yield Component(self,i) + yield Component(self, i) pass def __del__(self): @@ -544,6 +538,7 @@ class Component: """ """ + def __init__(self, acq: AcquisitionContext, idx: int): self._acq = acq self._idx = idx @@ -553,29 +548,55 @@ def __init__(self, acq: AcquisitionContext, idx: int): @copydoc(cuvis_il.cuvis_comp_online_get) def online(self) -> bool: return self._acq._get_component_online(self._idx) - + @property @copydoc(cuvis_il.cuvis_comp_temperature_get) def temperature(self) -> float: return self._acq._get_temperature(self._idx) - + @property @copydoc(cuvis_il.cuvis_comp_gain_get) def gain(self) -> float: return self._acq._get_gain(self._idx) - + @gain.setter @copydoc(cuvis_il.cuvis_comp_gain_set) def gain(self, val: float) -> None: return self._acq._set_gain(self._idx, val) - + @property @copydoc(cuvis_il.cuvis_comp_integration_time_factor_get) def integration_time_factor(self) -> float: return self._acq._get_integration_time_factor(self._idx) - + @integration_time_factor.setter @copydoc(cuvis_il.cuvis_comp_integration_time_factor_set) def integration_time_factor(self, val: float) -> None: return self._acq._set_integration_time_factor(self._idx, val) - \ No newline at end of file + + @property + @copydoc(cuvis_il.cuvis_comp_pixel_format_get_swig) + def pixel_format(self) -> str: + return cuvis_il.cuvis_comp_pixel_format_get_swig(self._handle, self._idx) + + @pixel_format.setter + @copydoc(cuvis_il.cuvis_comp_pixel_format_set) + def pixel_format(self, val: str) -> None: + if cuvis_il.status_ok != cuvis_il.cuvis_comp_pixel_format_set( + self._handle, self._idx, val): + raise SDKException() + pass + + @property + @copydoc(cuvis_il.cuvis_comp_available_pixel_format_get_swig) + def available_pixel_formats(self) -> list[str]: + pCount = cuvis_il.new_p_int() + if cuvis_il.status_ok != cuvis_il.cuvis_comp_available_pixel_format_count_get( + self._handle, self._idx, pCount): + raise SDKException() + count = cuvis_il.p_int_value(pCount) + formats = [] + for i in range(count): + formats.append( + str(cuvis_il.cuvis_comp_available_pixel_format_get_swig(self._handle, self._idx, i))) + return formats diff --git a/cuvis/FileWriteSettings.py b/cuvis/FileWriteSettings.py index aa11f8d..d8ed69a 100644 --- a/cuvis/FileWriteSettings.py +++ b/cuvis/FileWriteSettings.py @@ -19,6 +19,7 @@ class GeneralExportSettings(object): pan_scale: float = 0.0 pan_sharpening_interpolation_type: PanSharpeningInterpolationType = PanSharpeningInterpolationType.Linear pan_sharpening_algorithm: PanSharpeningAlgorithm = PanSharpeningAlgorithm.CubertMacroPixel + pre_pan_sharpen_cube: bool = False add_pan: bool = False add_fullscale_pan: bool = False permissive: bool = False @@ -33,6 +34,7 @@ def _get_internal(self): self.pan_sharpening_interpolation_type] ge.pan_algorithm = internal.__CuvisPanSharpeningAlgorithm__[ self.pan_sharpening_algorithm] + ge.pre_pan_sharpen_cube = int(self.pre_pan_sharpen_cube) ge.add_pan = int(self.add_pan) ge.add_fullscale_pan = int(self.add_fullscale_pan) ge.permissive = int(self.permissive) @@ -47,6 +49,7 @@ def _from_internal(cls, ge): ge.pan_interpolation_type], pan_sharpening_algorithm=internal.__PanSharpeningAlgorithm__[ ge.pan_algorithm], + pre_pan_sharpen_cube=ge.pre_pan_sharpen_cube, add_pan=bool(ge.add_pan), add_fullscale_pan=bool(ge.add_fullscale_pan), permissive=bool(ge.permissive))