def _parse_signal_sources(self): srcs = [] candidates = [] # This is internal clock source. for subunit_id, subunit_id_plugs in self.subunit_plugs['music'].items( ): for i, plug in subunit_id_plugs['output'].items(): if plug['type'] == 'Sync': addr = AvcCcm.get_subunit_signal_addr('music', 0, i) candidates.append((addr, plug)) # External source is available. for i, plug in self.unit_plugs['external']['input'].items(): if plug['type'] in ('Sync', 'Digital', 'Clock'): addr = AvcCcm.get_unit_signal_addr('external', i) candidates.append((addr, plug)) # SYT-match is available, but not practical. for i, plug in self.unit_plugs['isoc']['input'].items(): if plug['type'] == 'Sync': addr = AvcCcm.get_unit_signal_addr('isoc', i) candidates.append((addr, plug)) # BeBoBv3 has. # Inquire these are able to connect to destination. for params in candidates: addr = params[0] plug = params[1] try: AvcCcm.ask_signal_source(self.fcp, addr, self.signal_destination) except: continue srcs.append(params) return srcs
def get_avail_connections(cls, fcp, unit_plug_list, subunit_plug_list): src_candidates = {} dst_candidates = {} avail = {} for seqid, info in unit_plug_list.items(): data = info['data'] addr = AvcCcm.get_unit_signal_addr(data['unit-type'], data['plug']) if info['dir'] == 'output': target = dst_candidates else: target = src_candidates target[seqid] = addr for seqid, info in subunit_plug_list.items(): data = info['data'] addr = AvcCcm.get_subunit_signal_addr(data['subunit-type'], data['subunit-id'], data['plug']) # Inverse direction against plugs of unit. if info['dir'] == 'output': target = src_candidates else: target = dst_candidates target[seqid] = addr for dst_seqid, dst_addr in dst_candidates.items(): try: curr_src_info = AvcCcm.get_signal_source(fcp, dst_addr) except Exception: curr_src_info = None for src_seqid, src_addr in src_candidates.items(): try: AvcCcm.ask_signal_source(fcp, src_addr, dst_addr) except Exception: continue if dst_seqid not in avail: avail[dst_seqid] = [] src_info = AvcCcm.parse_signal_addr(src_addr) avail[dst_seqid].append((src_seqid, src_info == curr_src_info)) return avail