Example #1
0
 def get_sampling_rate(self):
     in_rate = AvcConnection.get_plug_signal_format(self.unit.fcp, 'input',
                                                    0)
     out_rate = AvcConnection.get_plug_signal_format(
         self.unit.fcp, 'output', 0)
     if in_rate != out_rate:
         raise OSError('Unexpected state of the unit: {0}!={1}'.format(
             in_rate, out_rate))
     return in_rate
Example #2
0
 def get_sampling_rate_labels(self):
     rates = []
     for rate in AvcConnection.SAMPLING_RATES:
         if not AvcConnection.ask_plug_signal_format(
                 self.unit.fcp, 'input', 0, rate):
             continue
         if not AvcConnection.ask_plug_signal_format(
                 self.unit.fcp, 'output', 0, rate):
             continue
         rates.append(rate)
     return rates
Example #3
0
 def set_sampling_rate(self, rate):
     if self.unit.get_property('streaming'):
         raise ValueError('Packet streaming already runs.')
     if rate not in self.get_sampling_rate_labels():
         raise ValueError('Invalid argument for sampling rate')
     old_timeout = self.unit.fcp.get_property('timeout')
     # The unit tends to respond with larger interval from these requests.
     self.unit.fcp.set_property('timeout', 500)
     AvcConnection.set_plug_signal_format(self.unit.fcp, 'input', 0, rate)
     AvcConnection.set_plug_signal_format(self.unit.fcp, 'output', 0, rate)
     self.unit.fcp.set_property('timeout', old_timeout)
 def set_sampling_rate(self, rate):
     if self.get_property('streaming'):
         raise OSError('Packet streaming starts')
     curr_rate = AvcConnection.get_plug_signal_format(self.fcp, 'input', 0)
     for mode, rates in self._RATE_MODES.items():
         if curr_rate in rates:
             break
     else:
         raise OSError('Invalid state for sampling rate.')
     if rate not in rates:
         raise ValueError('Invalid argument for sampling rate.')
     AvcConnection.set_plug_signal_format(self.fcp, 'input', 0, rate)
     AvcConnection.set_plug_signal_format(self.fcp, 'output', 0, rate)
Example #5
0
    def get_subunit_plug_info(cls, fcp):
        subunits = {}
        for page in range(AvcGeneral.MAXIMUM_SUBUNIT_PAGE + 1):
            try:
                info = AvcGeneral.get_subunit_info(fcp, page)
            except Exception:
                break

            for entry in info:
                subunit_type = entry['type']
                maximum_id = entry['maximum-id']

                for subunit_id in range(maximum_id + 1):
                    try:
                        data = AvcConnection.get_subunit_plug_info(
                            fcp, subunit_type, subunit_id)
                    except Exception:
                        continue

                    id = (subunit_type, subunit_id)
                    if id not in subunits:
                        subunits[id] = {}
                    for direction, count in data.items():
                        subunits[id][direction] = count

        return subunits
 def set_16bit_mode(self, target):
     if target != 'none':
         rate = AvcConnection.get_plug_signal_format(self.fcp, 'output', 0)
         if rate not in (44100, 48000):
             raise ValueError('Sampling rate should be 44100 or 48000.')
     HwCmd.set_16bit_mode(self.__cache, self.fcp, target)
     self.__save_cache()
Example #7
0
    def __parse_subunit_plugs(self):
        subunit_plugs = {}
        for page in range(AvcGeneral.MAXIMUM_SUBUNIT_PAGE + 1):
            try:
                subunits = AvcGeneral.get_subunit_info(self.fcp, page)
            except:
                break

            for entry in subunits:
                type = entry['type']
                maximum_id = entry['maximum-id']
                if type not in subunit_plugs:
                    subunit_plugs[type] = {}
                for id in range(maximum_id + 1):
                    if id not in subunit_plugs[type]:
                        subunit_plugs[type][id] = {}
                        subunit_plugs[type][id]['output'] = {}
                        subunit_plugs[type][id]['input'] = {}

                info = AvcConnection.get_subunit_plug_info(self.fcp, type, 0)
                for dir, num in info.items():
                    for i in range(num):
                        plug = self.__parse_subunit_plug(dir, type, 0, i)
                        subunit_plugs[type][id][dir][i] = plug
        return subunit_plugs
 def get_supported_sampling_rates(self):
     rate = AvcConnection.get_plug_signal_format(self.fcp, 'input', 0)
     for mode, rates in self._RATE_MODES.items():
         if rate in rates and mode in self._caps['rate-modes']:
             break
     else:
         raise OSError('Invalid state for sampling rate.')
     return rates
Example #9
0
 def _parse_supported_sampling_rates(self):
     sampling_rates = {}
     playback = []
     capture = []
     # Assume that PCM playback is available for all of models.
     for rate in AvcConnection.SAMPLING_RATES:
         if AvcConnection.ask_plug_signal_format(self.fcp, 'input', 0, rate):
             playback.append(rate)
     sleep(0.02)
     # PCM capture is not always available depending on models.
     for rate in AvcConnection.SAMPLING_RATES:
         if AvcConnection.ask_plug_signal_format(self.fcp, 'output', 0, rate):
             capture.append(rate)
     self._playback_only = (len(capture) == 0)
     for rate in AvcConnection.SAMPLING_RATES:
         if rate in playback or rate in capture:
             sampling_rates[rate] = True
     return sampling_rates
 def set_cd_mode(self, enable):
     if enable:
         if self.__cache['hw']['16bit'] != 'spdif-coax-out-1/2':
             raise ValueError('16bit-mode should be spdif-coax-out-1/2.')
         rate = AvcConnection.get_plug_signal_format(self.fcp, 'output', 0)
         if rate != 44100:
             raise ValueError('Sampling rate should be 44100.')
     HwCmd.set_cd_mode(self.__cache, self.fcp, enable)
     self.__save_cache()
Example #11
0
 def set_stream_formats(self, playback, capture):
     if playback not in self.supported_stream_formats['playback']:
         raise ValueError('Invalid argument for playback stream format')
     if capture:
         if self._playback_only:
             raise ValueError('This unit is playback only')
         if capture not in self.supported_stream_formats['capture']:
             raise ValueError('Invalid argument for capture stream format')
         if playback['sampling-rate'] != capture['sampling-rate']:
             raise ValueError(
                 'Sampling rate mis-match between playback and capture')
     if self._assumed:
         rate = playback['sampling-rate']
         AvcConnection.set_plug_signal_format(self.fcp, 'output', 0, rate)
         AvcConnection.set_plug_signal_format(self.fcp, 'input', 0, rate)
     else:
         AvcStreamFormatInfo.set_format(self.fcp, 'input', 0, playback)
         if not self._playback_only:
             AvcStreamFormatInfo.set_format(self.fcp, 'output', 0, capture)
 def __get_clock_plugs(self):
     plugs = {}
     info = AvcConnection.get_subunit_plug_info(self.fcp, 'music', 0)
     for direction in ('input', 'output'):
         for i in range(info[direction]):
             addr = BcoPlugInfo.get_subunit_addr(direction, 'music', 0, i)
             plug_type = BcoPlugInfo.get_plug_type(self.fcp, addr)
             if plug_type == 'Sync':
                 plugs[direction] = \
                     AvcCcm.get_subunit_signal_addr('music', 0, i)
                 break
         else:
             raise OSError('Unexpected state of device for clock source.')
     return plugs
Example #13
0
 def _parse_unit_plugs(self):
     unit_plugs = {}
     info = AvcConnection.get_unit_plug_info(self.fcp)
     for type, params in info.items():
         if type not in unit_plugs:
             unit_plugs[type] = {}
             unit_plugs[type]['output'] = {}
             unit_plugs[type]['input'] = {}
         for dir, num in params.items():
             for i in range(num + 1):
                 try:
                     plug = self._parse_unit_plug(dir, type, i)
                     unit_plugs[type][dir][i] = plug
                 except:
                     continue
     return unit_plugs
Example #14
0
 def parse_unit_plugs(cls, fcp):
     unit_plugs = {}
     info = AvcConnection.get_unit_plug_info(fcp)
     for type, params in info.items():
         if type not in unit_plugs:
             unit_plugs[type] = {}
             unit_plugs[type]['output'] = {}
             unit_plugs[type]['input'] = {}
         for dir, num in params.items():
             for i in range(num + 1):
                 try:
                     plug = cls.parse_unit_plug(fcp, dir, type, i)
                     unit_plugs[type][dir][i] = plug
                 except Exception:
                     continue
     return unit_plugs
Example #15
0
    def _parse_subunit_plugs(self):
        subunit_plugs = {}
        subunits = BcoSubunitInfo.get_subunits(self.fcp)
        for subunit in subunits:
            type = subunit['type']
            id = subunit['id']
            if type not in subunit_plugs:
                subunit_plugs[type] = {}
            if id not in subunit_plugs[type]:
                subunit_plugs[type][id] = {}
                subunit_plugs[type][id]['output'] = {}
                subunit_plugs[type][id]['input'] = {}

            info = AvcConnection.get_subunit_plug_info(self.fcp, type, 0)
            for dir, num in info.items():
                for i in range(num):
                    plug = self._parse_subunit_plug(dir, type, 0, i)
                    subunit_plugs[type][id][dir][i] = plug
        return subunit_plugs
Example #16
0
    def get_unit_plug_list(cls, fcp):
        plugs = {}
        seqid = 0

        units = AvcConnection.get_unit_plug_info(fcp)
        for type, data in units.items():
            for direction, count in data.items():
                for plug_id in range(count):
                    # Use the same format as Plug Input/Output Specific Data
                    # to keep enough informaton.
                    plug_info = {
                        'dir': direction,
                        'mode': 'unit',
                        'data': {
                            'unit-type': type,
                            'plug': plug_id,
                        },
                    }
                    plugs['unit_{0}'.format(seqid)] = plug_info
                    seqid += 1

        return plugs
 def get_sampling_rate(self):
     in_rate = AvcConnection.get_plug_signal_format(self.fcp, 'input', 0)
     out_rate = AvcConnection.get_plug_signal_format(self.fcp, 'output', 0)
     if in_rate != out_rate:
         raise OSError('Sampling rate mismatch: ', in_rate, out_rate)
     return in_rate
Example #18
0
 def get_sampling_rate(self):
     return AvcConnection.get_plug_signal_format(self.fcp, 'output', 0)
Example #19
0
 def get_sampling_rate(self):
     # Current rate is correctly returned from a plug 0 for output direction
     # only.
     return AvcConnection.get_plug_signal_format(self.unit.fcp, 'output', 0)
Example #20
0
 def set_sampling_rate(self, rate):
     if rate not in self.__SUPPORTED_SAMPLING_RATES:
         raise ValueError('Invalid argument for sampling rate')
     AvcConnection.set_plug_signal_format(self.fcp, 'input', 0, rate)
     AvcConnection.set_plug_signal_format(self.fcp, 'output', 0, rate)