예제 #1
0
 def set_processing_mixer_state_all(cls, fcp, subunit_id, attr, fb_id,
                                    in_fb, data):
     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')
     for datum in data:
         if len(data) != 2:
             raise ValueError('Invalid argument for array of data array')
     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(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(len(data))  # The length of control data
     for datum in data:
         args.extend(datum)
     AvcGeneral.command_control(fcp, args)
예제 #2
0
 def set_feature_mute_state(cls, fcp, 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:
         val = 0x70
     else:
         val = 0x60
     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(0x01)  # Mute control
     args.append(0x01)  # Control data length is 1
     args.append(val)
     AvcGeneral.command_control(fcp, args)
예제 #3
0
 def set_processing_mixer_state(cls, fcp, subunit_id, attr, fb_id, in_fb,
                                in_ch, out_ch, data):
     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')
     if len(data) != 2:
         raise ValueError('Invalid argument for data array')
     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(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.extend(data)  # Higher and lower parts of setting
     AvcGeneral.command_control(fcp, args)
예제 #4
0
 def set_digital_channel_status(cls, fcp, spec, name, values):
     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')
     if attrs[name] != 1:
         if type(values) != '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] = cls.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)
예제 #5
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)
예제 #6
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)
예제 #7
0
 def set_selector_state(cls, fcp, subunit_id, attr, fb_id, value):
     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')
     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(cls.ATTRIBUTE_VALUES[attr])
     args.append(0x02)  # Selector length is 2
     args.append(value)
     args.append(0x01)  # Selector control
     AvcGeneral.command_control(fcp, args)
예제 #8
0
 def set_feature_lr_state(cls, fcp, subunit_id, attr, fb_id, ch, data):
     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')
     if len(data) != 2:
         raise ValueError('Invalid argument for data array')
     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(0x03)  # LR control
     args.append(0x02)  # Control data length is 2
     args.extend(data)  # Higher and lower parts of volume
     AvcGeneral.command_control(fcp, args)