Пример #1
0
 def get_formats(cls, fcp, direction, plug):
     if direction not in cls.plug_direction:
         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(cls.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:
             params = AvcGeneral.command_status(fcp, args)
             fmt = cls._parse_format(params[11:])
             fmts.append(fmt)
         except Exception as e:
             break
     return fmts
Пример #2
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
Пример #3
0
 def get_feature_mute_state(cls, fcp, 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(cls.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(fcp, args)
     val = params[10]
     if val == 0x70:
         return True
     elif val == 0x60:
         return False
     else:
         raise OSError('Unexpected value in response')
Пример #4
0
 def get_feature_lr_state(cls, fcp, subunit_id, attr, fb_id, ch):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attr not in cls.ATTRIBUTES:
         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(cls.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(0xff)  # Higher part of balance
     args.append(0xff)  # Lower part of balance
     params = AvcGeneral.command_status(fcp, args)
     data = params[10:12]
     return data
Пример #5
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
Пример #6
0
 def get_processing_mixer_state(cls, fcp, subunit_id, attr, fb_id, in_fb,
                                in_ch, out_ch):
     attrs = ('current', 'minimum', 'maximum', 'resolution', 'default')
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attr not in attrs:
         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(0x01)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x82)  # Processing function block
     args.append(fb_id)
     args.append(cls.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(0xff)  # Higher part of setting
     args.append(0xff)  # Lower part of setting
     params = AvcGeneral.command_status(fcp, args)
     data = params[12:14]
     return data
Пример #7
0
 def get_processing_mixer_state_all(cls, fcp, 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 attr not in attrs:
         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(cls.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(fcp, args)
     count = params[11] // 2
     data = []
     params = params[12:]
     for i in range(0, count, 2):
         data.append(params[i * 2:i * 2 + 1])
     return data
Пример #8
0
 def get_subunit_fb_info(cls, fcp, subunit_type, subunit_id, page, fb_type):
     if subunit_type not in AvcGeneral.SUBUNIT_TYPES:
         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(30))
     args[0] = 0x01
     args[1] = (
         AvcGeneral.SUBUNIT_TYPES.index(subunit_type) << 3) | subunit_id
     args[2] = 0x31
     args[3] = page
     args[4] = 0xff
     try:
         params = AvcGeneral.command_status(fcp, args)
     except Exception as e:
         if str(e) == 'Not implemented':
             return []
         raise
     entries = []
     for i in range(5):
         if params[5 + 5 * i] == 0xff:
             continue
         entry = {}
         entry['type'] = params[5 + 5 * i]
         entry['id'] = params[6 + 5 * i]
         entry['purpose'] = cls.FB_PURPOSE[params[7 + 5 * i]]
         entry['inputs'] = params[8 + 5 * i]
         entry['outputs'] = params[9 + 5 * i]
         entries.append(entry)
     return entries
Пример #9
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)
Пример #10
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]
Пример #11
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:])
Пример #12
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()
Пример #13
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()
Пример #14
0
 def get_plug_type(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(0x00)  # Info type is 'type'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(fcp, args)
     if params[10] > len(cls.PLUG_TYPE):
         raise OSError('Unexpected value in response')
     return cls.PLUG_TYPE[params[10]]
Пример #15
0
 def get_selector_state(cls, fcp, subunit_id, attr, fb_id):
     if subunit_id > 0x07:
         raise ValueError('Invalid argument for subunit ID')
     if attr not in ('current', 'minimum', 'maximum', 'default'):
         raise ValueError('Invalid argument for attribute')
     if fb_id > 255:
         raise ValueError('Invalid argument for function block ID')
     args = bytearray()
     args.append(0x01)
     args.append(0x08 | (subunit_id & 0x07))
     args.append(0xb8)
     args.append(0x80)  # Selector function block
     args.append(fb_id)
     args.append(cls.ATTRIBUTE_VALUES[attr])
     args.append(0x02)  # Selector length is 2
     args.append(0xff)
     args.append(0x01)  # Selector control
     params = AvcGeneral.command_status(fcp, args)
     return params[7]
Пример #16
0
 def get_plug_name(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(0x01)  # Info type is 'name'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(fcp, args)
     length = params[10]
     if length == 0:
         return ""
     return params[11:11 + length].decode()
Пример #17
0
 def get_digital_channel_status(cls, fcp, spec, name):
     if spec == 'con':
         attrs = cls.SUPPORTED_CON_STATUS
         subcmds = cls.__CON_SUBCMDS
     elif spec == 'pro':
         attrs = cls.SUPPORTED_PRO_STATUS
         subcmds = cls.__PRO_SUBCMDS
     else:
         raise ValueError('Invalid argument for specification name')
     if name not in attrs:
         raise ValueError('Invalid argument for attribute name')
     args = bytearray(0xff for i in range(10))
     args[0] = 0x01
     args[1] = 0xff
     args[2] = 0x00
     args[3] = cls.SUPPORTED_SPEC.index(spec)
     args[4] = subcmds[name]
     args[5] = attrs[name]
     params = AvcGeneral.command_status(fcp, args)
     return params[6:6 + attrs[name]]
Пример #18
0
    def get_format(cls, fcp, direction, plug):
        if direction not in cls.plug_direction:
            raise ValueError('Invalid argument for plug direction')
        if plug > 255:
            raise ValueError('Invalid argument for plug number')
        args = bytearray()
        args.append(0x01)
        args.append(0xff)
        args.append(0xbf)
        args.append(0xc0)
        args.append(cls.plug_direction.index(direction))
        args.append(0x00)
        args.append(0x00)
        args.append(plug)
        args.append(0xff)
        args.append(0xff)
        args.append(0xff)
        args.append(0xff)
        params = AvcGeneral.command_status(fcp, args)

        return cls._parse_format(params[10:len(params)])
Пример #19
0
 def get_plug_outputs(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(0x06)  # Info type is 'output data'
     args.append(0xff)
     args.append(0xff)
     params = AvcGeneral.command_status(fcp, args)
     info = []
     plugs = params[10]
     if plugs != 0xff:
         for i in range(plugs):
             addr = cls.parse_plug_addr(params[11 + i * 7:])
             info.append(addr)
     return info