Example #1
0
 def set_processing_mixer_state(unit, subunit_id, attr, fb_id, in_fb,
                                in_ch, out_ch, setting):
     attrs = ('current', 'minimum', 'maximum', 'resolution', 'default')
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attrs.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if in_fb > 255:
         raise ValueError('Invalid argument for input function block ID')
     if in_ch > 255:
         raise ValueError('Invalid argument for input channel number')
     if out_ch > 255:
         raise ValueError('Invalid argument for output channel number')
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x82)   # Processing function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x04)   # Selector length is 4
     args.append(in_fb)
     args.append(in_ch)
     args.append(out_ch)
     args.append(0x03)   # Mixer control
     args.append(0x02)   # Control data is 2
     args.append(setting >> 8)   # Higher part of setting
     args.append(setting & 0xff) # Lower part of setting
     AvcGeneral.command_control(unit, args)
Example #2
0
 def set_digital_channel_status(unit, spec, name, values):
     if spec is 'con':
         attrs = BcoVendorDependent.supported_con_status
         subcmds = BcoVendorDependent._con_subcmds
     elif spec is 'pro':
         attrs = BcoVendorDependent.supported_pro_status
         subcmds = BcoVendorDependent._pro_subcmds
     else:
         raise ValueError('Invalid argument for specification name')
     if name not in attrs:
         raise ValueError('Invalid argument for attribute name')
     if attrs[name] != 1:
         if type(values) is not 'list' or len(values) != attrs[name]:
             raise ValueError('Invalid argument for attribute value length')
     args = bytearray(0xff for i in range(10))
     args[0] = 0x00
     args[1] = 0xff
     args[2] = 0x00
     args[3] = BcoVendorDependent.supported_spec.index(spec)
     args[4] = subcmds[name]
     args[5] = attrs[name]
     if attrs[name] == 1:
         args[6] = values
     else:
         for i in range(len(values)):
             args[6 + i] = values[i]
     AvcGeneral.command_control(unit, args)
Example #3
0
 def set_feature_mute_state(unit, subunit_id, attr, fb_id, ch, mute):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attr is not 'current':
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if ch > 255:
         raise ValueError('Invalid argument for channel number')
     if mute:
         mute = 0x70
     else:
         mute = 0x80
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x81)   # Feature function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x02)   # Selector length is 2
     args.append(ch)
     args.append(0x01)   # Mute control
     args.append(0x01)   # Control data length is 1
     args.append(mute)
     AvcGeneral.command_control(unit, args)
Example #4
0
 def set_processing_mixer_state(unit, subunit_id, attr, fb_id, in_fb, in_ch,
                                out_ch, setting):
     attrs = ('current', 'minimum', 'maximum', 'resolution', 'default')
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attrs.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if in_fb > 255:
         raise ValueError('Invalid argument for input function block ID')
     if in_ch > 255:
         raise ValueError('Invalid argument for input channel number')
     if out_ch > 255:
         raise ValueError('Invalid argument for output channel number')
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x82)  # Processing function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x04)  # Selector length is 4
     args.append(in_fb)
     args.append(in_ch)
     args.append(out_ch)
     args.append(0x03)  # Mixer control
     args.append(0x02)  # Control data is 2
     args.append(setting >> 8)  # Higher part of setting
     args.append(setting & 0xff)  # Lower part of setting
     AvcGeneral.command_control(unit, args)
Example #5
0
 def set_processing_mixer_state_all(unit, subunit_id, attr, fb_id, in_fb,
                                    states):
     attrs = ('current', 'minimum', 'maximum', 'resolution', 'default')
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attrs.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if in_fb > 255:
         raise ValueError('Invalid argument for input function block ID')
     data_count = len(states) // 2
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x82)  # Processing function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x04)  # Selector length is 4
     args.append(in_fb)
     args.append(0xff)
     args.append(0xff)
     args.append(0x03)  # Mixer control
     args.append(data_count)  # The length of control data
     for i in range(data_count):
         args.append((states[i * 2] << 8) | states[i * 2 + 1])
     AvcGeneral.command_control(unit, args)
Example #6
0
 def set_feature_mute_state(unit, subunit_id, attr, fb_id, ch, mute):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attr is not 'current':
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if ch > 255:
         raise ValueError('Invalid argument for channel number')
     if mute:
         mute = 0x70
     else:
         mute = 0x80
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x81)  # Feature function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x02)  # Selector length is 2
     args.append(ch)
     args.append(0x01)  # Mute control
     args.append(0x01)  # Control data length is 1
     args.append(mute)
     AvcGeneral.command_control(unit, args)
Example #7
0
 def set_digital_channel_status(cls, fcp, spec, name, values):
     if   spec is 'con':
         attrs = BcoVendorDependent.supported_con_status
         subcmds  = BcoVendorDependent._con_subcmds
     elif spec is 'pro':
         attrs = BcoVendorDependent.supported_pro_status
         subcmds = BcoVendorDependent._pro_subcmds
     else:
         raise ValueError('Invalid argument for specification name')
     if name not in attrs:
         raise ValueError('Invalid argument for attribute name')
     if attrs[name] != 1:
         if type(values) is not 'list' or len(values) != attrs[name]:
             raise ValueError('Invalid argument for attribute value length')
     args = bytearray(0xff for i in range(10))
     args[0] = 0x00
     args[1] = 0xff
     args[2] = 0x00
     args[3] = BcoVendorDependent.supported_spec.index(spec)
     args[4] = subcmds[name]
     args[5] = attrs[name]
     if attrs[name] == 1:
         args[6] = values
     else:
         for i in range(len(values)):
             args[6 + i] = values[i]
     AvcGeneral.command_control(fcp, args)
Example #8
0
 def set_processing_mixer_state_all(unit, subunit_id, attr, fb_id, in_fb,
                                    states):
     attrs = ('current', 'minimum', 'maximum', 'resolution', 'default')
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attrs.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if in_fb > 255:
         raise ValueError('Invalid argument for input function block ID')
     data_count = len(states) // 2
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x82)   # Processing function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x04)   # Selector length is 4
     args.append(in_fb)
     args.append(0xff)
     args.append(0xff)
     args.append(0x03)   		# Mixer control
     args.append(data_count)	# The length of control data
     for i in range(data_count):
         args.append((states[i * 2] << 8) | states[i * 2 + 1])
     AvcGeneral.command_control(unit, args)
Example #9
0
 def command_set_param(self, cmd, param):
     deps = bytearray()
     deps.append(0x46)
     deps.append(0x49)
     deps.append(0x31)
     deps.append(cmd)
     deps.append(param)
     AvcGeneral.set_vendor_dependent(unit, self.company_ids, deps)
Example #10
0
 def command_set_param(self, cmd, param):
     deps = bytearray()
     deps.append(0x46)
     deps.append(0x49)
     deps.append(0x31)
     deps.append(cmd)
     deps.append(param)
     AvcGeneral.set_vendor_dependent(unit, self.company_ids, deps)
Example #11
0
 def ask_signal_source(cls, fcp, src, dst):
     args = bytearray()
     args.append(0x02)
     args.append(0xff)
     args.append(0x1a)
     args.append(0xff)
     args.append(src[0])
     args.append(src[1])
     args.append(dst[0])
     args.append(dst[1])
     AvcGeneral.command_inquire(fcp, args)
Example #12
0
 def ask_signal_source(unit, src, dst):
     args = bytearray()
     args.append(0x02)
     args.append(0xff)
     args.append(0x1a)
     args.append(0xff)
     args.append(src[0])
     args.append(src[1])
     args.append(dst[0])
     args.append(dst[1])
     AvcGeneral.command_inquire(unit, args)
Example #13
0
 def command_set_param(self, cmd, param):
     deps = bytearray()
     deps.append(0x46)
     deps.append(0x49)
     deps.append(0x31)
     deps.append(cmd)
     deps.append(param)
     try:
         AvcGeneral.set_vendor_dependent(self.fcp, self.company_ids, deps)
     except Exception as e:
         if str(e) != 'Unknown status':
             raise e
Example #14
0
 def set_format(cls, fcp, direction, plug, fmt):
     args = bytearray()
     args.append(0x00)   # Control
     args.append(0xff)   # Addressing to unit
     args.append(0xbf)   # Extended stream format information command
     args.append(0xc0)   # SINGLE subfunction
     args.append(cls.plug_direction.index(direction))
     args.append(0x00)
     args.append(0x00)
     args.append(plug)
     args.append(0xff)
     args.append(0xff)
     args.extend(cls._build_format(fmt))
     AvcGeneral.command_control(fcp, args)
Example #15
0
 def __init__(self, path):
     super().__init__(path)
     for quad in self.get_config_rom():
         # Vendor ID
         if quad >> 24 == 0x03:
             vendor_id = quad & 0x00FFFFFF
             continue
         # Model ID
         if quad >> 24 == 0x17:
             model_id = quad & 0x00FFFFFF
             break
     else:
         raise ValueError("Invalid argument for Yamaha/Terratec unit")
     # Check vendor ID for Yamaha/Terratec OUI
     if vendor_id != 0x00A0DE and vendor_id != 0x000AAC:
         raise ValueError("Invalid argument for Yamaha/Terratec unit")
     # Yamaha GO 44 or Terratec Phase 24 FW
     if model_id == 0x10000B or model_id == 0x000005:
         self.name = "GO44"
         self._output_sink_labels = ("analog-1/2", "headphone-1/2", "digital-1/2")
         self._mixer_output_fb = 1
         self._input_level_labels = {"low": 0xF400, "middle": 0xFD00, "high": 0x0000}
         self._output_labels = ()
     # Yamaha GO 46 or Terratec Phase X24 FW
     elif model_id == 0x10000C or model_id == 0x000007:
         self.name = "GO46"
         self._output_sink_labels = ("analog-1/2", "analog-3/4", "digital-1/2")
         self._mixer_output_fb = 2
         self._output_fb = 1
         self._input_level_labels = {}
         self._output_labels = ("analog-1/2", "analog-3/4")
     else:
         raise ValueError("Invalid argument for Yamaha/Terratec unit")
     unit_info = AvcGeneral.get_unit_info(self.fcp)
     self._company_ids = unit_info["company-id"]
Example #16
0
 def get_formats(unit, direction, plug):
     if AvcGeneral.plug_direction.count(direction) == 0:
         raise ValueError('Invalid argument for plug direction')
     if plug > 255:
         raise ValueError('Invalid argument for plug number')
     fmts = []
     args = bytearray()
     args.append(0x01)
     args.append(0xff)
     args.append(0xbf)
     args.append(0xc1)
     args.append(AvcGeneral.plug_direction.index(direction))
     args.append(0x00)
     args.append(0x00)
     args.append(plug)
     args.append(0xff)
     args.append(0xff)
     args.append(0x00)
     args.append(0xff)
     for i in range(255):
         args[10] = i
         try:
             fmt = AvcGeneral.command_status(unit, args)
             fmts.append(fmt)
         except:
             break
     return fmts
Example #17
0
 def get_entry_list(cls, fcp, addr):
     fmts = []
     for i in range(0xff):
         # DM1500 tends to cause timeout.
         time.sleep(0.1)
         try:
             args = bytearray()
             args.append(0x01)
             args.append(addr[5])
             args.append(0x2f)   # Bco stream format support
             args.append(0xc1)   # List request
             args.append(addr[0])
             args.append(addr[1])
             args.append(addr[2])
             args.append(addr[3])
             args.append(addr[4])
             args.append(0xff)
             args.append(i)
             args.append(0xff)
             params = AvcGeneral.command_status(fcp, args)
             fmts.append(cls._parse_format(params[11:]))
         except OSError as e:
             if str(e) != 'Rejected':
                 raise
             else:
                 break
     return fmts
Example #18
0
    def get_plug_clusters(unit, addr):
        if addr[1] != BcoPlugInfo.addr_mode.index('unit') or \
           addr[2] != BcoPlugInfo.addr_unit_type.index('isoc'):
            raise ValueError('Isochronous unit plugs just support this')
        args = bytearray()
        args.append(0x01)
        args.append(addr[5])
        args.append(0x02)   # Plug info command
        args.append(0xc0)   # Bco plug info subcommand
        args.append(addr[0])
        args.append(addr[1])
        args.append(addr[2])
        args.append(addr[3])
        args.append(addr[4])
        args.append(0x03)   # Info type is 'channel position data'
        args.append(0xff)
        args.append(0xff)
        params = AvcGeneral.command_status(unit, args)
        data = params[10:]
        pos = 0
        clusters = [[] for i in range(data[pos])]
        pos += 1
        for cls in range(len(clusters)):
            num = data[pos]
            pos += 1
            if num == 0:
                break;

            clusters[cls] = [[0, 0] for j in range(num)]
            for e in range(len(clusters[cls])):
                clusters[cls][e][0] = data[pos];
                clusters[cls][e][1] = data[pos + 1];
                pos += 2
        return clusters
Example #19
0
 def get_feature_mute_state(unit, subunit_id, attr, fb_id, ch):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attr is not 'current':
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if ch > 255:
         raise ValueError('Invalid argument for channel number')
     args = bytearray()
     args.append(0x01)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x81)   # Feature function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x02)   # Selector length is 2
     args.append(ch)
     args.append(0x01)   # Mute control
     args.append(0x01)   # Control data length is 1
     args.append(0xff)   # Status
     params = AvcGeneral.command_status(unit, args)
     if params[10] == 0x70:
         return True
     elif params[10] == 0x60:
         return False
     else:
         raise OSError('Unexpected value in response')
Example #20
0
 def get_entry_list(fcp, addr):
     fmts = []
     for i in range(0xff):
         # DM1500 tends to cause timeout.
         time.sleep(0.1)
         try:
             args = bytearray()
             args.append(0x01)
             args.append(addr[5])
             args.append(0x2f)  # Bco stream format support
             args.append(0xc1)  # List request
             args.append(addr[0])
             args.append(addr[1])
             args.append(addr[2])
             args.append(addr[3])
             args.append(addr[4])
             args.append(0xff)
             args.append(i)
             args.append(0xff)
             params = AvcGeneral.command_status(fcp, args)
             fmts.append(BcoStreamFormatInfo._parse_format(params[11:]))
         except OSError as e:
             if str(e) != 'Rejected':
                 raise
             else:
                 break
     return fmts
Example #21
0
    def get_plug_clusters(unit, addr):
        if addr[1] != BcoPlugInfo.addr_mode.index('unit') or \
           addr[2] != BcoPlugInfo.addr_unit_type.index('isoc'):
            raise ValueError('Isochronous unit plugs just support this')
        args = bytearray()
        args.append(0x01)
        args.append(addr[5])
        args.append(0x02)  # Plug info command
        args.append(0xc0)  # Bco plug info subcommand
        args.append(addr[0])
        args.append(addr[1])
        args.append(addr[2])
        args.append(addr[3])
        args.append(addr[4])
        args.append(0x03)  # Info type is 'channel position data'
        args.append(0xff)
        args.append(0xff)
        params = AvcGeneral.command_status(unit, args)
        data = params[10:]
        pos = 0
        clusters = [[] for i in range(data[pos])]
        pos += 1
        for cls in range(len(clusters)):
            num = data[pos]
            pos += 1
            if num == 0:
                break

            clusters[cls] = [[0, 0] for j in range(num)]
            for e in range(len(clusters[cls])):
                clusters[cls][e][0] = data[pos]
                clusters[cls][e][1] = data[pos + 1]
                pos += 2
        return clusters
Example #22
0
 def get_subunit_fb_info(unit, subunit_type, subunit_id, page, fb_type):
     if AvcGeneral.subunit_types.count(subunit_type) == 0:
         raise ValueError('Invalid argument for subunit type')
     if subunit_id > 7:
         raise ValueError('Invalid argument for subunit id')
     args = bytearray(0xff for i in range(29))
     args[0] = 0x01
     args[1] = (
         AvcGeneral.subunit_types.index(subunit_type) << 3) | subunit_id
     args[2] = 0x31
     args[3] = page
     args[4] = 0xff
     params = AvcGeneral.command_status(unit, args)
     entries = []
     for i in range(5):
         if params[5 + 5 * i] == 0xff:
             continue
         entry = {}
         entry['fb-type'] = params[5 + 5 * i]
         entry['fb-id'] = params[6 + 5 * i]
         entry['fb-purpose'] = BcoSubunitInfo.fb_purpose[params[7 + 5 * i]]
         entry['inputs'] = params[8 + 5 * i]
         entry['outputs'] = params[9 + 5 * i]
         entries.append(entry)
     return entries
Example #23
0
    def get_plug_clusters(cls, fcp, addr):
        args = bytearray()
        args.append(0x01)
        args.append(addr[5])
        args.append(0x02)   # Plug info command
        args.append(0xc0)   # Bco plug info subcommand
        args.append(addr[0])
        args.append(addr[1])
        args.append(addr[2])
        args.append(addr[3])
        args.append(addr[4])
        args.append(0x03)   # Info type is 'channel position data'
        args.append(0xff)
        args.append(0xff)
        params = AvcGeneral.command_status(fcp, args)
        data = params[10:]
        pos = 0
        clusters = [[] for i in range(data[pos])]
        pos += 1
        for cls in range(len(clusters)):
            num = data[pos]
            pos += 1
            if num == 0:
                break;

            clusters[cls] = [[0, 0] for j in range(num)]
            for e in range(len(clusters[cls])):
                clusters[cls][e][0] = data[pos];
                clusters[cls][e][1] = data[pos + 1];
                pos += 2
        return clusters
Example #24
0
 def get_processing_mixer_state_all(unit, subunit_id, attr, fb_id, in_fb):
     attrs = ('current', 'minimum', 'maximum', 'resolution', 'default')
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attrs.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if in_fb > 255:
         raise ValueError('Invalid argument for input function block ID')
     args = bytearray()
     args.append(0x01)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x82)   # Processing function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x04)   # Selector length is 4
     args.append(in_fb)
     args.append(0xff)
     args.append(0xff)
     args.append(0x03)   # Mixer control
     args.append(0xff)   # The length of control data in response
     params = AvcGeneral.command_status(unit, args)
     count = params[11] // 2
     status = []
     for i in range(count):
         status.append((params[12 + i * 2] << 8) | params[13 + i * 2])
     return status
Example #25
0
 def get_processing_mixer_state_all(unit, subunit_id, attr, fb_id, in_fb):
     attrs = ('current', 'minimum', 'maximum', 'resolution', 'default')
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attrs.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if in_fb > 255:
         raise ValueError('Invalid argument for input function block ID')
     args = bytearray()
     args.append(0x01)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x82)  # Processing function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x04)  # Selector length is 4
     args.append(in_fb)
     args.append(0xff)
     args.append(0xff)
     args.append(0x03)  # Mixer control
     args.append(0xff)  # The length of control data in response
     params = AvcGeneral.command_status(unit, args)
     count = params[11] // 2
     status = []
     for i in range(count):
         status.append((params[12 + i * 2] << 8) | params[13 + i * 2])
     return status
Example #26
0
 def get_feature_mute_state(unit, subunit_id, attr, fb_id, ch):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attr is not 'current':
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if ch > 255:
         raise ValueError('Invalid argument for channel number')
     args = bytearray()
     args.append(0x01)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x81)  # Feature function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x02)  # Selector length is 2
     args.append(ch)
     args.append(0x01)  # Mute control
     args.append(0x01)  # Control data length is 1
     args.append(0xff)  # Status
     params = AvcGeneral.command_status(unit, args)
     if params[10] == 0x70:
         return True
     elif params[10] == 0x60:
         return False
     else:
         raise OSError('Unexpected value in response')
Example #27
0
 def command_get_param(self, cmd):
     deps = bytearray()
     deps.append(0x46)
     deps.append(0x49)
     deps.append(0x31)
     deps.append(cmd)
     deps.append(0xff)
     params = AvcGeneral.get_vendor_dependent(unit, self.company_ids, deps)
     return params[4]
Example #28
0
 def command_get_param(self, cmd):
     deps = bytearray()
     deps.append(0x46)
     deps.append(0x49)
     deps.append(0x31)
     deps.append(cmd)
     deps.append(0xff)
     params = AvcGeneral.get_vendor_dependent(unit, self.company_ids, deps)
     return params[4]
Example #29
0
 def set_selector_state(unit, subunit_id, attr, fb_id, value):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if ('current', 'minimum', 'maximum', 'default').count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if value > 255:
         raise ValueError('Invalid argument for selector value')
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x80)   # Selector function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attribute])
     args.append(0x02)   # Selector length is 2
     args.append(value)
     args.append(0x01)   # Selector control
     AvcGeneral.command_control(unit, args)
Example #30
0
 def set_signal_source(cls, fcp, src, dst):
     args = bytearray()
     args.append(0x00)
     args.append(0xff)
     args.append(0x1a)
     args.append(0x0f)
     args.append(src[0])
     args.append(src[1])
     args.append(dst[0])
     args.append(dst[1])
     return AvcGeneral.command_control(fcp, args)
Example #31
0
 def __init__(self, path):
     super().__init__(path)
     model_id = -1
     for quad in self.get_config_rom():
         if quad >> 24 == 0x17:
             model_id = quad & 0x00ffffff
             self._id = self._ids[model_id][0]
             info = AvcGeneral.get_unit_info(self.fcp)
             self._company_ids = info['company-id']
     if model_id < 0:
         raise OSError('Not supported')
Example #32
0
 def set_signal_souarce(unit, src, dst):
     args = bytearray()
     args.append(0x01)
     args.append(0xff)
     args.append(0x1a)
     args.append(0x0f)
     args.append(src[0])
     args.append(src[1])
     args.append(dst[0])
     args.append(dst[1])
     return AvcGeneral.command_control(unit, args)
Example #33
0
 def set_signal_souarce(unit, src, dst):
     args = bytearray()
     args.append(0x01)
     args.append(0xff)
     args.append(0x1a)
     args.append(0x0f)
     args.append(src[0])
     args.append(src[1])
     args.append(dst[0])
     args.append(dst[1])
     return AvcGeneral.command_control(unit, args)
Example #34
0
 def set_selector_state(unit, subunit_id, attr, fb_id, value):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if ('current', 'minimum', 'maximum', 'default').count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if value > 255:
         raise ValueError('Invalid argument for selector value')
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x80)  # Selector function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attribute])
     args.append(0x02)  # Selector length is 2
     args.append(value)
     args.append(0x01)  # Selector control
     AvcGeneral.command_control(unit, args)
Example #35
0
 def get_signal_source(unit, dst):
     args = bytearray()
     args.append(0x01)
     args.append(0xff)
     args.append(0x1a)
     args.append(0xff)
     args.append(0xff)
     args.append(0xfe)
     args.append(dst[0])
     args.append(dst[1])
     params = AvcGeneral.command_status(unit, args)
     return AvcCcm.parse_signal_addr(params[6:])
Example #36
0
 def get_signal_source(unit, dst):
     args = bytearray()
     args.append(0x01)
     args.append(0xff)
     args.append(0x1a)
     args.append(0xff)
     args.append(0xff)
     args.append(0xfe)
     args.append(dst[0])
     args.append(dst[1])
     params = AvcGeneral.command_status(unit, args)
     return AvcCcm.parse_signal_addr(params[6:])
Example #37
0
 def get_signal_source(cls, fcp, dst):
     args = bytearray()
     args.append(0x01)
     args.append(0xff)
     args.append(0x1a)
     args.append(0xff)
     args.append(0xff)
     args.append(0xfe)
     args.append(dst[0])
     args.append(dst[1])
     params = AvcGeneral.command_status(fcp, args)
     src = params[4:6]
     return cls.parse_signal_addr(src)
Example #38
0
 def set_feature_volume_state(cls, fcp, subunit_id, attr, fb_id, ch, vol):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if cls.attributes.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if ch > 255:
         raise ValueError('Invalid argument for channel number')
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x81)   # Feature function block
     args.append(fb_id)
     args.append(cls.attribute_values[attr])
     args.append(0x02)   # Selector length is 2
     args.append(ch)
     args.append(0x02)   # Volume control
     args.append(0x02)   # Control data length is 2
     args.append(vol >> 8)   # Higher part of volume
     args.append(vol & 0xff) # Lower part of volume
     AvcGeneral.command_control(fcp, args)
Example #39
0
 def set_feature_lr_state(unit, subunit_id, attr, fb_id, ch, balance):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if AvcAudio.attributes.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if ch > 255:
         raise ValueError('Invalid argument for channel number')
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x81)   # Feature function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x02)   # Selector length is 2
     args.append(ch)
     args.append(0x03)   # LR control
     args.append(0x02)   # Control data length is 2
     args.append(balance >> 8)   # Higher part of balance
     args.append(balance & 0xff) # Lower part of balance
     AvcGeneral.command_control(unit, args)
Example #40
0
 def set_feature_lr_state(unit, subunit_id, attr, fb_id, ch, balance):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if AvcAudio.attributes.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if ch > 255:
         raise ValueError('Invalid argument for channel number')
     args = bytearray()
     args.append(0x00)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x81)  # Feature function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x02)  # Selector length is 2
     args.append(ch)
     args.append(0x03)  # LR control
     args.append(0x02)  # Control data length is 2
     args.append(balance >> 8)  # Higher part of balance
     args.append(balance & 0xff)  # Lower part of balance
     AvcGeneral.command_control(unit, args)
Example #41
0
 def __init__(self, path):
     super().__init__(path)
     model_id = -1
     for quad in self.get_config_rom():
         if quad >> 24 == 0x17:
             model_id = quad & 0x00FFFFFF
             self._id = self._ids[model_id][0]
             info = AvcGeneral.get_unit_info(self.fcp)
             self._company_ids = info["company-id"]
     if model_id < 0:
         raise OSError("Not supported")
     # For process local cache.
     self._cache = [0x00000000] * 40
     # For permanent cache.
     self._filepath = "/tmp/hinawa-{0:08x}".format(self.get_property("guid"))
     self._load_cache()
Example #42
0
 def get_plug_channels(unit, addr):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)  # Plug info command
     args.append(0xc0)  # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x02)  # Info type is 'the number of channels'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(unit, args)
     return params[10]
Example #43
0
 def get_stream_detection(self, company_ids, dir, ext_plug):
     if BcoVendorDependent.addr_dir.count(dir) == 0:
         raise ValueError('Invalid argument for address direction')
     if ext_plug >= 255:
         raise ValueError('Invalid argument for external plug number')
     args = bytearray()
     args.append(0x00)
     args.append(BcoVendorDependent.addr_dir.index(dir))
     args.append(plug)
     args.append(0x00)
     params = AvcGeneral.get_vendor_dependent(self, company_ids, args)
     if params[0] != args[0] or params[1] != args[1] or params[2] != args[2]:
         raise OSError('Unexpected value in response')
     if params[3] == 0x00:
         return False
     return True
Example #44
0
 def get_plug_channels(cls, fcp, addr):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)   # Plug info command
     args.append(0xc0)   # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x02)   # Info type is 'the number of channels'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(fcp, args)
     return params[10]
Example #45
0
 def get_plug_input(cls, fcp, addr):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)   # Plug info command
     args.append(0xc0)   # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x05)   # Info type is 'input data'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(fcp, args)
     return cls.parse_plug_addr(params[10:])
Example #46
0
 def get_plug_input(unit, addr):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)  # Plug info command
     args.append(0xc0)  # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x05)  # Info type is 'input data'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(unit, args)
     return BcoPlugInfo.parse_plug_addr(params[10:])
Example #47
0
 def get_stream_detection(cls, fcp, company_ids, dir, ext_plug):
     if BcoVendorDependent.addr_dir.count(dir) == 0:
         raise ValueError('Invalid argument for address direction')
     if ext_plug >= 255:
         raise ValueError('Invalid argument for external plug number')
     args = bytearray()
     args.append(0x00)
     args.append(BcoVendorDependent.addr_dir.index(dir))
     args.append(ext_plug)
     args.append(0xff)
     params = AvcGeneral.get_vendor_dependent(fcp, company_ids, args)
     if params[0] != args[0] or params[1] != args[1] or params[2] != args[2]:
         raise OSError('Unexpected value in response')
     if params[3] == 0x00:
         return False
     return True
Example #48
0
 def get_plug_cluster_info(cls, fcp, addr, cluster):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)   # Plug info command
     args.append(0xc0)   # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x07)   # Info type is 'cluster info'
     args.append(cluster)
     args.append(0xff)
     params = AvcGeneral.command_status(fcp, args)
     length = params[12]
     return params[13:13+length].decode()
Example #49
0
 def get_plug_ch_name(unit, addr, pos):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)  # Plug info command
     args.append(0xc0)  # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x04)  # Info type is 'channel position name'
     args.append(pos)
     args.append(0xff)
     params = AvcGeneral.command_status(unit, args)
     length = params[11]
     return params[12:12 + length].decode()
Example #50
0
 def get_plug_ch_name(cls, fcp, addr, pos):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)   # Plug info command
     args.append(0xc0)   # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x04)   # Info type is 'channel position name'
     args.append(pos)
     args.append(0xff)
     params = AvcGeneral.command_status(fcp, args)
     length = params[11]
     return params[12:12+length].decode()
Example #51
0
 def get_plug_type(unit, addr):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)  # Plug info command
     args.append(0xc0)  # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x00)  # Info type is 'type'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(unit, args)
     if params[10] > len(BcoPlugInfo.plug_type):
         raise OSError('Unexpected value in response')
     return BcoPlugInfo.plug_type[params[10]]
Example #52
0
 def get_plug_name(unit, addr):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)  # Plug info command
     args.append(0xc0)  # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x01)  # Info type is 'name'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(unit, args)
     length = params[10]
     if length == 0:
         return ""
     return params[11:11 + length].decode()
Example #53
0
 def get_subunits(unit):
     args = bytearray()
     args.append(0x01)
     args.append(0xff)
     args.append(0x31)
     args.append(0x00)  # Any values are approved.
     args.append(0xff)
     args.append(0xff)
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(unit, args)
     subunits = []
     for i in range(4, 7):
         if params[i] is not 0xff:
             subunit = {}
             subunit['type'] = AvcGeneral.subunit_types[params[i] >> 3]
             subunit['id'] = params[i] & 0x7
             subunits.append(subunit)
     return subunits
Example #54
0
 def get_digital_channel_status(unit, spec, name):
     if spec is 'con':
         attrs = BcoVendorDependent.supported_con_status
         subcmds = BcoVendorDependent._con_subcmds
     elif spec is 'pro':
         attrs = BcoVendorDependent.supported_pro_status
         subcmds = BcoVendorDependent._pro_subcmds
     else:
         raise ValueError('Invalid argument for specification name')
     if name not in attrs:
         raise ValueError('Invalid argumetn for attribute name')
     args = bytearray(0xff for i in range(10))
     args[0] = 0x01
     args[1] = 0xff
     args[2] = 0x00
     args[3] = BcoVendorDependent.supported_spec.index(spec)
     args[4] = subcmds[name]
     args[5] = attrs[name]
     params = AvcGeneral.command_status(unit, args)
     return params[6:6 + attrs[name]]
Example #55
0
 def get_plug_cluster_info(unit, addr, cls):
     if addr[1] != BcoPlugInfo.addr_mode.index('unit') or \
        addr[2] != BcoPlugInfo.addr_unit_type.index('isoc'):
         raise ValueError('Isochronous unit plugs just support this')
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)  # Plug info command
     args.append(0xc0)  # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x07)  # Info type is 'cluster info'
     args.append(cls)
     args.append(0xff)
     params = AvcGeneral.command_status(unit, args)
     length = params[12]
     return params[13:13 + length].decode()
Example #56
0
 def get_plug_outputs(unit, addr):
     args = bytearray()
     args.append(0x01)
     args.append(addr[5])
     args.append(0x02)  # Plug info command
     args.append(0xc0)  # Bco plug info subcommand
     args.append(addr[0])
     args.append(addr[1])
     args.append(addr[2])
     args.append(addr[3])
     args.append(addr[4])
     args.append(0x06)  # Info type is 'output data'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(unit, args)
     info = []
     plugs = params[10]
     if plugs != 0xff:
         for i in range(plugs):
             addr = BcoPlugInfo.parse_plug_addr(params[11 + i * 7:])
             info.append(addr)
     return info
Example #57
0
 def get_feature_volume_state(unit, subunit_id, attr, fb_id, ch):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if AvcAudio.attributes.count(attr) == 0:
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     if ch > 255:
         raise ValueError('Invalid argument for channel number')
     args = bytearray()
     args.append(0x01)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x81)  # Feature function block
     args.append(fb_id)
     args.append(AvcAudio.attribute_values[attr])
     args.append(0x02)  # Selector length is 2
     args.append(ch)
     args.append(0x02)  # Volume control
     args.append(0x02)  # Control data length is 2
     args.append(0xff)  # Higher part of volume
     args.append(0xff)  # Lower part of volume
     params = AvcGeneral.command_status(unit, args)
     return (params[10] << 8) | params[11]
Example #58
0
 def _parse_unit_info(self, fcp):
     return AvcGeneral.get_unit_info(fcp)