def test_has_camera_ports(): ports = list_connected_cameras() assert isinstance(ports, list) for port in ports: assert port.startswith('usb:')
def test_list_connected_cameras(): ports = list_connected_cameras() assert isinstance(ports, list)
def _create_cameras(self, **kwargs): """Creates a camera object(s) Loads the cameras via the configuration. Creates a camera for each camera item listed in the config. Ensures the appropriate camera module is loaded. Note: We are currently only operating with one camera and the `take_pic.sh` script automatically discovers the ports. Note: This does not actually make a usb connection to the camera. To do so, call the 'camear.connect()' explicitly. Args: **kwargs (dict): Can pass a camera_config object that overrides the info in the configuration file. Can also pass `auto_detect`(bool) to try and automatically discover the ports. Returns: list: A list of created camera objects. Raises: error.CameraNotFound: Description error.PanError: Description """ if kwargs.get('camera_info') is None: camera_info = self.config.get('cameras') self.logger.debug("Camera config: \n {}".format(camera_info)) a_simulator = 'camera' in self.config.get('simulator', []) if a_simulator: self.logger.debug("Using simulator for camera") ports = list() # Lookup the connected ports if not using a simulator auto_detect = kwargs.get('auto_detect', camera_info.get('auto_detect', False)) if not a_simulator and auto_detect: self.logger.debug("Auto-detecting ports for cameras") try: ports = list_connected_cameras() except Exception as e: self.logger.warning(e) if len(ports) == 0: raise error.PanError( msg= "No cameras detected. Use --simulator=camera for simulator." ) else: self.logger.debug("Detected Ports: {}".format(ports)) for cam_num, camera_config in enumerate(camera_info.get('devices', [])): cam_name = 'Cam{:02d}'.format(cam_num) if not a_simulator: camera_model = camera_config.get('model') # Assign an auto-detected port. If none are left, skip if auto_detect: try: camera_port = ports.pop() except IndexError: self.logger.warning( "No ports left for {}, skipping.".format(cam_name)) continue else: try: camera_port = camera_config['port'] except KeyError: raise error.CameraNotFound( msg="No port specified and auto_detect=False") camera_focuser = camera_config.get('focuser', None) camera_readout = camera_config.get('readout_time', 6.0) else: # Set up a simulated camera with fully configured simulated # focuser camera_model = 'simulator' camera_port = '/dev/camera/simulator' camera_focuser = { 'model': 'simulator', 'focus_port': '/dev/ttyFAKE', 'initial_position': 20000, 'autofocus_range': (40, 80), 'autofocus_step': (10, 20), 'autofocus_seconds': 0.1, 'autofocus_size': 500 } camera_readout = 0.5 camera_set_point = camera_config.get('set_point', None) camera_filter = camera_config.get('filter_type', None) self.logger.debug('Creating camera: {}'.format(camera_model)) try: module = load_module('pocs.camera.{}'.format(camera_model)) self.logger.debug('Camera module: {}'.format(module)) except ImportError: raise error.CameraNotFound(msg=camera_model) else: # Create the camera object cam = module.Camera(name=cam_name, model=camera_model, port=camera_port, set_point=camera_set_point, filter_type=camera_filter, focuser=camera_focuser, readout_time=camera_readout) is_primary = '' if camera_info.get('primary', '') == cam.uid: self.primary_camera = cam is_primary = ' [Primary]' self.logger.debug("Camera created: {} {} {}".format( cam.name, cam.uid, is_primary)) self.cameras[cam_name] = cam # If no camera was specified as primary use the first if self.primary_camera is None: self.primary_camera = self.cameras['Cam00'] if len(self.cameras) == 0: raise error.CameraNotFound(msg="No cameras available. Exiting.", exit=True) self.logger.debug("Cameras created")