def are_configured_cdaq_sync_ports_disconnected( self, chassis_devices_ports="", timeout=WAIT_INFINITELY): """ Verifies configured cDAQ Sync connections between devices. Failures generally indicate a wiring issue or that a device has been powered off or removed. Stop all NI-DAQmx tasks running on the devices prior to running this function because any running tasks cause the verification process to fail. Args: chassis_devices_ports (Optional[str]): Specifies the names of the CompactDAQ chassis, C Series modules, or cDAQ Sync ports in comma separated form to search. If no names are specified, all cDAQ Sync ports on connected, non-simulated devices are scanned. timeout (Optional[float]): Specifies the time in seconds to wait for the device to respond before timing out. Returns: List[nidaqmx.types.CDAQSyncConnection]: Returns the port-to-port connections that failed verification. """ disconnected_ports_exist = c_bool32() cfunc = lib_importer.windll.DAQmxAreConfiguredCDAQSyncPortsDisconnected if cfunc.argtypes is None: with cfunc.arglock: if cfunc.argtypes is None: cfunc.argtypes = [ ctypes_byte_str, ctypes.c_double, ctypes.POINTER(c_bool32)] error_code = cfunc( chassis_devices_ports, timeout, ctypes.byref(disconnected_ports_exist)) check_for_error(error_code) cfunc = lib_importer.windll.DAQmxGetDisconnectedCDAQSyncPorts if cfunc.argtypes is None: with cfunc.arglock: if cfunc.argtypes is None: cfunc.argtypes = [ ctypes.c_char_p, ctypes.POINTER(ctypes.c_uint)] port_list_size = ctypes.c_uint() while True: size_or_code = cfunc( None, ctypes.byref(port_list_size)) if size_or_code < 0: break port_list = ctypes.create_string_buffer(size_or_code) size_or_code = cfunc( port_list, ctypes.byref(port_list_size)) if is_string_buffer_too_small(size_or_code): # Buffer size must have changed between calls; check again. continue else: break check_for_error(size_or_code) ports = unflatten_channel_string(port_list.value.decode('ascii')) output_ports = ports[::2] input_ports = ports[1::2] connections = [] for output_port, input_port in zip(output_ports, input_ports): connections.append( CDAQSyncConnection(output_port=output_port, input_port=input_port)) return connections
def auto_configure_cdaq_sync_connections( self, chassis_devices_ports="", timeout=WAIT_INFINITELY): """ Detects and configures cDAQ Sync connections between devices. Stop all NI-DAQmx tasks running on the devices prior to running this function because any running tasks cause auto-configuration to fail. Args: chassis_devices_ports (Optional[str]): Specifies the names of the CompactDAQ chassis, C Series modules, or cDAQ Sync ports in comma separated form to search. If no names are specified, all cDAQ Sync ports on connected, non-simulated devices are scanned. timeout (Optional[float]): Specifies the time in seconds to wait for the device to respond before timing out. If a timeout occurs, no configuration is changed. Returns: List[nidaqmx.types.CDAQSyncConnection]: Returns the configured port-to-port connections. """ cfunc = lib_importer.windll.DAQmxAutoConfigureCDAQSyncConnections cfunc.argtypes = [ ctypes_byte_str, ctypes.c_double] error_code = cfunc( chassis_devices_ports, timeout) check_for_error(error_code) cfunc = lib_importer.windll.DAQmxGetAutoConfiguredCDAQSyncConnections cfunc.argtypes = [ ctypes.c_char_p, ctypes.POINTER(ctypes.c_uint)] port_list_size = ctypes.c_uint() while True: size_or_code = cfunc( None, ctypes.byref(port_list_size)) if size_or_code < 0: break port_list = ctypes.create_string_buffer(size_or_code) size_or_code = cfunc( port_list, ctypes.byref(port_list_size)) if is_string_buffer_too_small(size_or_code): # Buffer size must have changed between calls; check again. continue else: break check_for_error(size_or_code) ports = unflatten_channel_string(port_list.value.decode('ascii')) output_ports = ports[::2] input_ports = ports[1::2] connections = [] for output_port, input_port in zip(output_ports, input_ports): connections.append( CDAQSyncConnection(output_port=output_port, input_port=input_port)) return connections