예제 #1
0
 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
예제 #2
0
    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