Changeset 1217

Show
Ignore:
Timestamp:
05/25/08 07:43:32 (13 years ago)
Author:
ppalmers
Message:

merge libffado-2.0 changes r1213:1216 to trunk (svn merge -r 1213:HEAD svn+ssh://ffadosvn@ffado.org/ffado/branches/libffado-2.0)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/src/ffadodevice.cpp

    r1158 r1217  
    6565        if(!m_genericContainer->addElement(new Control::ClockSelect(*this))) { 
    6666            debugWarning("failed to add clock source control to container\n"); 
     67        } 
     68        // add a generic control for the sample rate selection 
     69        if(!m_genericContainer->addElement(new Control::SamplerateSelect(*this))) { 
     70            debugWarning("failed to add sample rate control to container\n"); 
    6771        } 
    6872        // add a generic control for the nickname 
  • trunk/libffado/src/libcontrol/ClockSelect.cpp

    r1178 r1217  
    170170} 
    171171 
     172// --- samplerate selection --- 
     173 
     174SamplerateSelect::SamplerateSelect(FFADODevice &d) 
     175: Discrete(&d) 
     176, m_Device( d ) 
     177{ 
     178    setName("SamplerateSelect"); 
     179    setLabel("Samplerate Select"); 
     180    setDescription("Select the device sample rate"); 
     181} 
     182 
     183bool 
     184SamplerateSelect::setValue(int v) 
     185{ 
     186    return m_Device.setSamplingFrequency(v); 
     187} 
     188 
     189int 
     190SamplerateSelect::getValue() 
     191{ 
     192    return m_Device.getSamplingFrequency(); 
     193} 
     194 
     195bool 
     196SamplerateSelect::setValue(int idx, int v) 
     197{ 
     198    return m_Device.setSamplingFrequency(v); 
     199} 
     200 
     201int 
     202SamplerateSelect::getValue(int idx) 
     203{ 
     204    return m_Device.getSamplingFrequency(); 
     205} 
     206 
     207int 
     208SamplerateSelect::getMinimum() 
     209{ 
     210    return 32000; 
     211} 
     212 
     213int 
     214SamplerateSelect::getMaximum() 
     215{ 
     216    return 192000; 
     217} 
     218 
    172219} // namespace Control 
  • trunk/libffado/src/libcontrol/ClockSelect.h

    r958 r1217  
    6464}; 
    6565 
     66/*! 
     67@brief Samplerate selection control element 
     68@note this is a workaround and should be done more elegant 
     69*/ 
     70class SamplerateSelect 
     71: public Discrete 
     72{ 
     73public: 
     74    SamplerateSelect(FFADODevice &); 
     75    virtual ~SamplerateSelect() {}; 
     76 
     77    virtual bool setValue(int v); 
     78    virtual int getValue(); 
     79    virtual bool setValue(int idx, int v); 
     80    virtual int getValue(int idx); 
     81 
     82    virtual int getMinimum(); 
     83    virtual int getMaximum(); 
     84protected: 
     85    FFADODevice &m_Device; 
     86}; 
     87 
    6688}; // namespace Control 
    6789 
  • trunk/libffado/support/mixer/ffadomixer.in

    r1205 r1217  
    4040from mixer_phase88 import * 
    4141from mixer_phase24 import * 
    42 from mixer_saffirepro import * 
    4342from mixer_saffire import * 
    4443from mixer_saffirele import * 
     44from mixer_saffirepro import * 
    4545from mixer_af2 import * 
    4646from mixer_bcoaudio5 import * 
     
    368368        l = QVBoxLayout( w ) 
    369369 
     370        # create a control object 
     371        hw = ControlInterface(server, basepath+'/DeviceManager/'+path) 
     372 
    370373        # 
    371374        # Generic elements for all mixers follow here: 
    372375        # 
    373  
    374376        tmp = GlobalMixer( w ) 
    375377        tmp.clockselect = ClockSelectInterface( server, basepath+"/DeviceManager/"+path ) 
    376378        tmp.nickname = TextInterface( server, basepath+"/DeviceManager/"+path+"/Generic/Nickname" ) 
     379        tmp.hw = hw 
    377380        tmp.initValues() 
    378381        l.addWidget( tmp, 1 ) 
     
    388391        if dev != None: 
    389392            mixerapp = dev[1] 
    390             # hack for the focusrite devices 
    391             # Saffire:        0x130e010001???? 
    392             # SaffireLE:    0x130e010004???? 
    393             if thisdev == (0x00130e, 0x00000000): 
    394                 if int(GUID, 16) < 0x130e0100040000: 
     393            if vendorId == 0x00130e: 
     394                is_saffirele = False 
     395                is_saffirepro = False 
     396 
     397                # hack for the focusrite devices 
     398                # Saffire:        0x130e010001???? 
     399                # SaffireLE:    0x130e010004???? 
     400                if modelId == 0x00000000: 
     401                    if int(GUID, 16) >= 0x130e0100040000: 
     402                        is_saffirele = True 
     403                        print "Found SaffireLE GUID" 
     404                    else: 
     405                        is_saffirele = False 
     406                        print "Found Saffire GUID" 
     407 
     408                # different panel for different clock frequency 
     409                samplerate = hw.getDiscrete('/Generic/SamplerateSelect') 
     410 
     411                # adat on PRO26 makes a difference 
     412                have_adat = False 
     413                if modelId == 0x00000003: # PRO26 
     414                    is_saffirepro = True 
     415                    state = hw.getDiscrete('/Control/ADATDisable') 
     416                    if state: 
     417                        have_adat = False 
     418                        print "detected PRO26, ADAT disabled" 
     419                    else: 
     420                        have_adat = True 
     421                        print "detected PRO26, ADAT enabled" 
     422                elif modelId == 0x00000006: # PRO10 
     423                    is_saffirepro = True 
     424 
     425                suffix = '' 
     426                if samplerate <= 48000: 
     427                    suffix = "Large" 
     428                # on the saffire pro 26, the large panel can be used 
     429                # at 96k when adat is disabled. pro10 = pro26 w/o ADAT 
     430                elif samplerate <= 96000 and is_saffirepro and have_adat: 
     431                    suffix = "Small" 
     432                elif samplerate <= 96000 and is_saffirepro: 
     433                    suffix = "Large" 
     434                # higher samplerates need the small panel 
     435                else: 
     436                    suffix = "Small" 
     437 
     438                if is_saffirepro: 
     439                    mixerapp = "SaffireProMixer" + suffix 
     440                elif is_saffirele: 
     441                    mixerapp = "SaffireLEMixer" + suffix 
     442                else: 
    395443                    mixerapp = "SaffireMixer" 
    396                 else: 
    397                     mixerapp = "SaffireLEMixer" 
    398444 
    399445            exec( "mixerwidget = "+mixerapp+"( w )" ) 
     
    407453        # 
    408454        l.addWidget( mixerwidget, 10 ) 
    409         mixerwidget.hw = ControlInterface(server, basepath+'/DeviceManager/'+path) 
     455        mixerwidget.hw = hw 
    410456        mixerwidget.configrom = cfgrom 
    411457        mixerwidget.clockselect = ClockSelectInterface(server, basepath+'/DeviceManager/'+path) 
  • trunk/libffado/support/mixer/mixer_saffire.py

    r1106 r1217  
    2222 
    2323from qt import * 
    24 from mixer_saffireui import * 
     24from mixer_saffire_base import SaffireMixerBase 
     25from mixer_saffireui import SaffireMixerUI 
    2526 
    26 class SaffireMixer(SaffireMixerUI): 
     27class SaffireMixer(SaffireMixerUI, SaffireMixerBase): 
    2728    def __init__(self,parent = None,name = None,fl = 0): 
    2829        SaffireMixerUI.__init__(self,parent,name,fl) 
     30        SaffireMixerBase.__init__(self) 
    2931 
    3032    def init(self): 
    31             print "Init Saffire mixer window" 
     33        print "Init large Saffire mixer window" 
    3234 
    33             self.VolumeControls={ 
    34                     self.sldPC12Out12: ['/Mixer/PCMix', 0, 0], 
    35                     self.sldPC12Out34: ['/Mixer/PCMix', 0, 1], 
    36                     self.sldPC12Out56: ['/Mixer/PCMix', 0, 2], 
    37                     self.sldPC12Out78: ['/Mixer/PCMix', 0, 3], 
    38                     self.sldPC12Out910: ['/Mixer/PCMix', 0, 4], 
    39                     self.sldPC34Out12: ['/Mixer/PCMix', 1, 0], 
    40                     self.sldPC34Out34: ['/Mixer/PCMix', 1, 1], 
    41                     self.sldPC34Out56: ['/Mixer/PCMix', 1, 2], 
    42                     self.sldPC34Out78: ['/Mixer/PCMix', 1, 3], 
    43                     self.sldPC34Out910: ['/Mixer/PCMix', 1, 4], 
    44                     self.sldPC56Out12: ['/Mixer/PCMix', 2, 0], 
    45                     self.sldPC56Out34: ['/Mixer/PCMix', 2, 1], 
    46                     self.sldPC56Out56: ['/Mixer/PCMix', 2, 2], 
    47                     self.sldPC56Out78: ['/Mixer/PCMix', 2, 3], 
    48                     self.sldPC56Out910: ['/Mixer/PCMix', 2, 4], 
    49                     self.sldPC78Out12: ['/Mixer/PCMix', 3, 0], 
    50                     self.sldPC78Out34: ['/Mixer/PCMix', 3, 1], 
    51                     self.sldPC78Out56: ['/Mixer/PCMix', 3, 2], 
    52                     self.sldPC78Out78: ['/Mixer/PCMix', 3, 3], 
    53                     self.sldPC78Out910: ['/Mixer/PCMix', 3, 4], 
    54                     self.sldPC910Out12: ['/Mixer/PCMix', 4, 0], 
    55                     self.sldPC910Out34: ['/Mixer/PCMix', 4, 1], 
    56                     self.sldPC910Out56: ['/Mixer/PCMix', 4, 2], 
    57                     self.sldPC910Out78: ['/Mixer/PCMix', 4, 3], 
    58                     self.sldPC910Out910: ['/Mixer/PCMix', 4, 4], 
    59                     self.sldIN1Out1: ['/Mixer/InputMix', 0, 0], 
    60                     self.sldIN1Out3: ['/Mixer/InputMix', 0, 2], 
    61                     self.sldIN1Out5: ['/Mixer/InputMix', 0, 4], 
    62                     self.sldIN1Out7: ['/Mixer/InputMix', 0, 6], 
    63                     self.sldIN1Out9: ['/Mixer/InputMix', 0, 8], 
    64                     self.sldIN2Out2: ['/Mixer/InputMix', 1, 1], 
    65                     self.sldIN2Out4: ['/Mixer/InputMix', 1, 3], 
    66                     self.sldIN2Out6: ['/Mixer/InputMix', 1, 5], 
    67                     self.sldIN2Out8: ['/Mixer/InputMix', 1, 7], 
    68                     self.sldIN2Out10: ['/Mixer/InputMix', 1, 9], 
    69                     self.sldIN3Out1: ['/Mixer/InputMix', 2, 0], 
    70                     self.sldIN3Out3: ['/Mixer/InputMix', 2, 2], 
    71                     self.sldIN3Out5: ['/Mixer/InputMix', 2, 4], 
    72                     self.sldIN3Out7: ['/Mixer/InputMix', 2, 6], 
    73                     self.sldIN3Out9: ['/Mixer/InputMix', 2, 8], 
    74                     self.sldIN4Out2: ['/Mixer/InputMix', 3, 1], 
    75                     self.sldIN4Out4: ['/Mixer/InputMix', 3, 3], 
    76                     self.sldIN4Out6: ['/Mixer/InputMix', 3, 5], 
    77                     self.sldIN4Out8: ['/Mixer/InputMix', 3, 7], 
    78                     self.sldIN4Out10: ['/Mixer/InputMix', 3, 9], 
    79                     self.sldREV1Out1: ['/Mixer/InputMix', 4, 0], 
    80                     self.sldREV1Out3: ['/Mixer/InputMix', 4, 2], 
    81                     self.sldREV1Out5: ['/Mixer/InputMix', 4, 4], 
    82                     self.sldREV1Out7: ['/Mixer/InputMix', 4, 6], 
    83                     self.sldREV1Out9: ['/Mixer/InputMix', 4, 8], 
    84                     self.sldREV2Out2: ['/Mixer/InputMix', 5, 1], 
    85                     self.sldREV2Out4: ['/Mixer/InputMix', 5, 3], 
    86                     self.sldREV2Out6: ['/Mixer/InputMix', 5, 5], 
    87                     self.sldREV2Out8: ['/Mixer/InputMix', 5, 7], 
    88                     self.sldREV2Out10: ['/Mixer/InputMix', 5, 9], 
    89                    
     35        self.VolumeControls={ 
     36                self.sldPC12Out12: ['/Mixer/PCMix', 0, 0], 
     37                self.sldPC12Out34: ['/Mixer/PCMix', 0, 1], 
     38                self.sldPC12Out56: ['/Mixer/PCMix', 0, 2], 
     39                self.sldPC12Out78: ['/Mixer/PCMix', 0, 3], 
     40                self.sldPC12Out910: ['/Mixer/PCMix', 0, 4], 
     41                self.sldPC34Out12: ['/Mixer/PCMix', 1, 0], 
     42                self.sldPC34Out34: ['/Mixer/PCMix', 1, 1], 
     43                self.sldPC34Out56: ['/Mixer/PCMix', 1, 2], 
     44                self.sldPC34Out78: ['/Mixer/PCMix', 1, 3], 
     45                self.sldPC34Out910: ['/Mixer/PCMix', 1, 4], 
     46                self.sldPC56Out12: ['/Mixer/PCMix', 2, 0], 
     47                self.sldPC56Out34: ['/Mixer/PCMix', 2, 1], 
     48                self.sldPC56Out56: ['/Mixer/PCMix', 2, 2], 
     49                self.sldPC56Out78: ['/Mixer/PCMix', 2, 3], 
     50                self.sldPC56Out910: ['/Mixer/PCMix', 2, 4], 
     51                self.sldPC78Out12: ['/Mixer/PCMix', 3, 0], 
     52                self.sldPC78Out34: ['/Mixer/PCMix', 3, 1], 
     53                self.sldPC78Out56: ['/Mixer/PCMix', 3, 2], 
     54                self.sldPC78Out78: ['/Mixer/PCMix', 3, 3], 
     55                self.sldPC78Out910: ['/Mixer/PCMix', 3, 4], 
     56                self.sldPC910Out12: ['/Mixer/PCMix', 4, 0], 
     57                self.sldPC910Out34: ['/Mixer/PCMix', 4, 1], 
     58                self.sldPC910Out56: ['/Mixer/PCMix', 4, 2], 
     59                self.sldPC910Out78: ['/Mixer/PCMix', 4, 3], 
     60                self.sldPC910Out910: ['/Mixer/PCMix', 4, 4], 
     61                self.sldIN1Out1: ['/Mixer/InputMix', 0, 0], 
     62                self.sldIN1Out3: ['/Mixer/InputMix', 0, 2], 
     63                self.sldIN1Out5: ['/Mixer/InputMix', 0, 4], 
     64                self.sldIN1Out7: ['/Mixer/InputMix', 0, 6], 
     65                self.sldIN1Out9: ['/Mixer/InputMix', 0, 8], 
     66                self.sldIN2Out2: ['/Mixer/InputMix', 1, 1], 
     67                self.sldIN2Out4: ['/Mixer/InputMix', 1, 3], 
     68                self.sldIN2Out6: ['/Mixer/InputMix', 1, 5], 
     69                self.sldIN2Out8: ['/Mixer/InputMix', 1, 7], 
     70                self.sldIN2Out10: ['/Mixer/InputMix', 1, 9], 
     71                self.sldIN3Out1: ['/Mixer/InputMix', 2, 0], 
     72                self.sldIN3Out3: ['/Mixer/InputMix', 2, 2], 
     73                self.sldIN3Out5: ['/Mixer/InputMix', 2, 4], 
     74                self.sldIN3Out7: ['/Mixer/InputMix', 2, 6], 
     75                self.sldIN3Out9: ['/Mixer/InputMix', 2, 8], 
     76                self.sldIN4Out2: ['/Mixer/InputMix', 3, 1], 
     77                self.sldIN4Out4: ['/Mixer/InputMix', 3, 3], 
     78                self.sldIN4Out6: ['/Mixer/InputMix', 3, 5], 
     79                self.sldIN4Out8: ['/Mixer/InputMix', 3, 7], 
     80                self.sldIN4Out10: ['/Mixer/InputMix', 3, 9], 
     81                self.sldREV1Out1: ['/Mixer/InputMix', 4, 0], 
     82                self.sldREV1Out3: ['/Mixer/InputMix', 4, 2], 
     83                self.sldREV1Out5: ['/Mixer/InputMix', 4, 4], 
     84                self.sldREV1Out7: ['/Mixer/InputMix', 4, 6], 
     85                self.sldREV1Out9: ['/Mixer/InputMix', 4, 8], 
     86                self.sldREV2Out2: ['/Mixer/InputMix', 5, 1], 
     87                self.sldREV2Out4: ['/Mixer/InputMix', 5, 3], 
     88                self.sldREV2Out6: ['/Mixer/InputMix', 5, 5], 
     89                self.sldREV2Out8: ['/Mixer/InputMix', 5, 7], 
     90                self.sldREV2Out10: ['/Mixer/InputMix', 5, 9], 
     91               
    9092 
    9193 
    92             self.SelectorControls={ 
    93                     self.chkSpdifSwitch:    ['/Mixer/SpdifSwitch'], 
    94                     self.chkOut12Mute:      ['/Mixer/Out12Mute'], 
    95                     self.chkOut12HwCtrl:    ['/Mixer/Out12HwCtrl'], 
    96                     self.chkOut12Dim:       ['/Mixer/Out12Dim'], 
    97                     self.chkOut34Mute:      ['/Mixer/Out34Mute'], 
    98                     self.chkOut34HwCtrl:    ['/Mixer/Out34HwCtrl'], 
    99                     self.chkOut56Mute:      ['/Mixer/Out56Mute'], 
    100                     self.chkOut56HwCtrl:    ['/Mixer/Out56HwCtrl'], 
    101                     self.chkOut78Mute:      ['/Mixer/Out78Mute'], 
    102                     self.chkOut78HwCtrl:    ['/Mixer/Out78HwCtrl'], 
    103                     self.chkOut910Mute:     ['/Mixer/Out910Mute'], 
    104                    
     94        self.SelectorControls={ 
     95                self.chkSpdifSwitch:    ['/Mixer/SpdifSwitch'], 
     96                self.chkOut12Mute:      ['/Mixer/Out12Mute'], 
     97                self.chkOut12HwCtrl:    ['/Mixer/Out12HwCtrl'], 
     98                self.chkOut12Dim:       ['/Mixer/Out12Dim'], 
     99                self.chkOut34Mute:      ['/Mixer/Out34Mute'], 
     100                self.chkOut34HwCtrl:    ['/Mixer/Out34HwCtrl'], 
     101                self.chkOut56Mute:      ['/Mixer/Out56Mute'], 
     102                self.chkOut56HwCtrl:    ['/Mixer/Out56HwCtrl'], 
     103                self.chkOut78Mute:      ['/Mixer/Out78Mute'], 
     104                self.chkOut78HwCtrl:    ['/Mixer/Out78HwCtrl'], 
     105                self.chkOut910Mute:     ['/Mixer/Out910Mute'], 
     106               
    105107 
    106             self.VolumeControlsLowRes={ 
    107                     self.sldOut12Level:      ['/Mixer/Out12Level'], 
    108                     self.sldOut34Level:      ['/Mixer/Out34Level'], 
    109                     self.sldOut56Level:      ['/Mixer/Out56Level'], 
    110                     self.sldOut78Level:      ['/Mixer/Out78Level'], 
    111                    
     108        self.VolumeControlsLowRes={ 
     109                self.sldOut12Level:      ['/Mixer/Out12Level'], 
     110                self.sldOut34Level:      ['/Mixer/Out34Level'], 
     111                self.sldOut56Level:      ['/Mixer/Out56Level'], 
     112                self.sldOut78Level:      ['/Mixer/Out78Level'], 
     113               
    112114 
    113     def updateMatrixVolume(self,a0): 
    114         sender = self.sender() 
    115         vol = 0x7FFF-a0 
    116         print "set %s %d %d to %d" % ( 
    117                     self.VolumeControls[sender][0], 
    118                     self.VolumeControls[sender][1], 
    119                     self.VolumeControls[sender][2], 
    120                     vol) 
    121         self.hw.setMatrixMixerValue(self.VolumeControls[sender][0],  
    122                                     self.VolumeControls[sender][1], 
    123                                     self.VolumeControls[sender][2], 
    124                                     vol) 
    125     def updateLowResVolume(self,a0): 
    126         sender = self.sender() 
    127         vol = a0 
    128         print "set %s to %d" % ( 
    129                     self.VolumeControlsLowRes[sender][0], 
    130                     vol) 
    131         self.hw.setDiscrete(self.VolumeControlsLowRes[sender][0], vol) 
     115        self.TriggerButtonControls={ 
     116        } 
    132117 
    133     def updateSelector(self,a0): 
    134         sender = self.sender() 
    135         if a0: 
    136             state = 1 
    137         else: 
    138             state = 0 
    139         print "set %s to %d" % ( 
    140                     self.SelectorControls[sender][0], 
    141                     state) 
    142         self.hw.setDiscrete(self.SelectorControls[sender][0], state) 
     118        self.TextControls={ 
     119        } 
    143120 
    144     def updateClockSelection(self,a0): 
    145         #disable the combobox 
    146         self.comboClockSelect.setEnabled(False) 
    147         #change the clock source 
    148         self.clockselect.select(a0) 
    149         #refresh the clock source selection box 
    150         self.initClockSelector() 
    151         #make the box available again 
    152         self.comboClockSelect.setEnabled(True) 
     121        self.saveTextControls={ 
     122        } 
    153123 
    154     def initClockSelector(self): 
    155         self.comboClockSelect.clear() 
    156         nbsources = self.clockselect.count() 
    157         for idx in range(nbsources): 
    158             desc = self.clockselect.getEnumLabel(idx) 
    159             self.comboClockSelect.insertItem(desc) 
    160         active_idx = self.clockselect.selected(); 
    161         if active_idx >= 0: 
    162             self.comboClockSelect.setCurrentItem(active_idx) 
     124        self.ComboControls={ 
     125        } 
    163126 
    164     def initValues(self): 
    165         for ctrl, info in self.VolumeControls.iteritems(): 
    166             vol = self.hw.getMatrixMixerValue(self.VolumeControls[ctrl][0], 
    167                                               self.VolumeControls[ctrl][1], 
    168                                               self.VolumeControls[ctrl][2]) 
    169  
    170             print "%s volume is %d" % (ctrl.name() , 0x7FFF-vol) 
    171             ctrl.setValue(0x7FFF-vol) 
    172  
    173             # connect the UI element 
    174             QObject.connect(ctrl,SIGNAL('valueChanged(int)'),self.updateMatrixVolume) 
    175  
    176         for ctrl, info in self.VolumeControlsLowRes.iteritems(): 
    177             vol = self.hw.getDiscrete(self.VolumeControlsLowRes[ctrl][0]) 
    178  
    179             print "%s volume is %d" % (ctrl.name() , vol) 
    180             ctrl.setValue(vol) 
    181  
    182             # connect the UI element 
    183             QObject.connect(ctrl,SIGNAL('valueChanged(int)'),self.updateLowResVolume) 
    184  
    185         for ctrl, info in self.SelectorControls.iteritems(): 
    186             state = self.hw.getDiscrete(self.SelectorControls[ctrl][0]) 
    187             print "%s state is %d" % (ctrl.name() , state) 
    188             if state: 
    189                 ctrl.setChecked(True) 
    190             else: 
    191                 ctrl.setChecked(False) 
    192  
    193             # connect the UI element 
    194             QObject.connect(ctrl,SIGNAL('stateChanged(int)'),self.updateSelector) 
    195  
    196         self.initClockSelector() 
    197         # connect the clock selector UI element 
    198         QObject.connect(self.comboClockSelect, SIGNAL('activated(int)'), self.updateClockSelection) 
  • trunk/libffado/support/mixer/mixer_saffire.ui

    r1127 r1217  
    24732473            </widget> 
    24742474        </widget> 
    2475         <widget class="QGroupBox" row="1" column="1"> 
    2476             <property name="name"> 
    2477                 <cstring>groupBox1_3</cstring> 
    2478             </property> 
    2479             <property name="title"> 
    2480                 <string>Clock Source</string> 
    2481             </property> 
    2482             <grid> 
    2483                 <property name="name"> 
    2484                     <cstring>unnamed</cstring> 
    2485                 </property> 
    2486                 <widget class="QComboBox" row="0" column="0"> 
    2487                     <property name="name"> 
    2488                         <cstring>comboClockSelect</cstring> 
    2489                     </property> 
    2490                 </widget> 
    2491             </grid> 
    2492         </widget> 
    24932475        <widget class="QGroupBox" row="1" column="0"> 
    24942476            <property name="name"> 
  • trunk/libffado/support/mixer/mixer_saffirele.py

    r1171 r1217  
    2222 
    2323from qt import * 
    24 from mixer_saffireleui import * 
    25  
    26 class SaffireLEMixer(SaffireLEMixerUI): 
     24from mixer_saffire_base import SaffireMixerBase 
     25from mixer_saffirelelargeui import SaffireLEMixerLargeUI 
     26from mixer_saffirelesmallui import SaffireLEMixerSmallUI 
     27 
     28class SaffireLEMixerLarge(SaffireLEMixerLargeUI, SaffireMixerBase): 
    2729    def __init__(self,parent = None,name = None,fl = 0): 
    28         SaffireLEMixerUI.__init__(self,parent,name,fl) 
     30        SaffireLEMixerLargeUI.__init__(self,parent,name,fl) 
     31        SaffireMixerBase.__init__(self) 
    2932 
    3033    def init(self): 
    31             print "Init Saffire LE mixer window" 
    32  
    33             self.VolumeControls={ 
    34                     self.sldIN1Out1: ['/Mixer/LEMix48', 0, 0], 
    35                     self.sldIN1Out2: ['/Mixer/LEMix48', 0, 1], 
    36                     self.sldIN1Out3: ['/Mixer/LEMix48', 0, 2], 
    37                     self.sldIN1Out4: ['/Mixer/LEMix48', 0, 3], 
    38                     self.sldIN2Out1: ['/Mixer/LEMix48', 1, 0], 
    39                     self.sldIN2Out2: ['/Mixer/LEMix48', 1, 1], 
    40                     self.sldIN2Out3: ['/Mixer/LEMix48', 1, 2], 
    41                     self.sldIN2Out4: ['/Mixer/LEMix48', 1, 3], 
    42                     self.sldIN3Out1: ['/Mixer/LEMix48', 2, 0], 
    43                     self.sldIN3Out2: ['/Mixer/LEMix48', 2, 1], 
    44                     self.sldIN3Out3: ['/Mixer/LEMix48', 2, 2], 
    45                     self.sldIN3Out4: ['/Mixer/LEMix48', 2, 3], 
    46                     self.sldIN4Out1: ['/Mixer/LEMix48', 3, 0], 
    47                     self.sldIN4Out2: ['/Mixer/LEMix48', 3, 1], 
    48                     self.sldIN4Out3: ['/Mixer/LEMix48', 3, 2], 
    49                     self.sldIN4Out4: ['/Mixer/LEMix48', 3, 3], 
    50                     self.sldSPDIF1Out1: ['/Mixer/LEMix48', 4, 0], 
    51                     self.sldSPDIF1Out2: ['/Mixer/LEMix48', 4, 1], 
    52                     self.sldSPDIF1Out3: ['/Mixer/LEMix48', 4, 2], 
    53                     self.sldSPDIF1Out4: ['/Mixer/LEMix48', 4, 3], 
    54                     self.sldSPDIF2Out1: ['/Mixer/LEMix48', 5, 0], 
    55                     self.sldSPDIF2Out2: ['/Mixer/LEMix48', 5, 1], 
    56                     self.sldSPDIF2Out3: ['/Mixer/LEMix48', 5, 2], 
    57                     self.sldSPDIF2Out4: ['/Mixer/LEMix48', 5, 3], 
    58                     
    59                     self.sldPC1Out1: ['/Mixer/LEMix48', 6, 0], 
    60                     self.sldPC1Out2: ['/Mixer/LEMix48', 6, 1], 
    61                     self.sldPC1Out3: ['/Mixer/LEMix48', 6, 2], 
    62                     self.sldPC1Out4: ['/Mixer/LEMix48', 6, 3], 
    63                     self.sldPC2Out1: ['/Mixer/LEMix48', 7, 0], 
    64                     self.sldPC2Out2: ['/Mixer/LEMix48', 7, 1], 
    65                     self.sldPC2Out3: ['/Mixer/LEMix48', 7, 2], 
    66                     self.sldPC2Out4: ['/Mixer/LEMix48', 7, 3], 
    67                     self.sldPC3Out1: ['/Mixer/LEMix48', 8, 0], 
    68                     self.sldPC3Out2: ['/Mixer/LEMix48', 8, 1], 
    69                     self.sldPC3Out3: ['/Mixer/LEMix48', 8, 2], 
    70                     self.sldPC3Out4: ['/Mixer/LEMix48', 8, 3], 
    71                     self.sldPC4Out1: ['/Mixer/LEMix48', 9, 0], 
    72                     self.sldPC4Out2: ['/Mixer/LEMix48', 9, 1], 
    73                     self.sldPC4Out3: ['/Mixer/LEMix48', 9, 2], 
    74                     self.sldPC4Out4: ['/Mixer/LEMix48', 9, 3], 
    75                     self.sldPC5Out1: ['/Mixer/LEMix48', 10, 0], 
    76                     self.sldPC5Out2: ['/Mixer/LEMix48', 10, 1], 
    77                     self.sldPC5Out3: ['/Mixer/LEMix48', 10, 2], 
    78                     self.sldPC5Out4: ['/Mixer/LEMix48', 10, 3], 
    79                     self.sldPC6Out1: ['/Mixer/LEMix48', 11, 0], 
    80                     self.sldPC6Out2: ['/Mixer/LEMix48', 11, 1], 
    81                     self.sldPC6Out3: ['/Mixer/LEMix48', 11, 2], 
    82                     self.sldPC6Out4: ['/Mixer/LEMix48', 11, 3], 
    83                     self.sldPC7Out1: ['/Mixer/LEMix48', 12, 0], 
    84                     self.sldPC7Out2: ['/Mixer/LEMix48', 12, 1], 
    85                     self.sldPC7Out3: ['/Mixer/LEMix48', 12, 2], 
    86                     self.sldPC7Out4: ['/Mixer/LEMix48', 12, 3], 
    87                     self.sldPC8Out1: ['/Mixer/LEMix48', 13, 0], 
    88                     self.sldPC8Out2: ['/Mixer/LEMix48', 13, 1], 
    89                     self.sldPC8Out3: ['/Mixer/LEMix48', 13, 2], 
    90                     self.sldPC8Out4: ['/Mixer/LEMix48', 13, 3], 
    91                    } 
    92  
    93             self.SelectorControls={ 
    94                     self.chkOut12Mute:          ['/Mixer/Out12Mute'], 
    95                     self.chkOut12HwCtrl:        ['/Mixer/Out12HwCtrl'], 
    96                     self.chkOut34Mute:          ['/Mixer/Out34Mute'], 
    97                     self.chkOut34HwCtrl:        ['/Mixer/Out34HwCtrl'], 
    98                     self.chkOut56Mute:          ['/Mixer/Out56Mute'], 
    99                     self.chkOut56HwCtrl:        ['/Mixer/Out56HwCtrl'], 
    100                     self.chkSPDIFTransparent:   ['/Mixer/SpdifTransparent'], 
    101                     self.chkMIDITru:            ['/Mixer/MidiThru'], 
    102                     self.chkHighGain3:          ['/Mixer/HighGainLine3'], 
    103                     self.chkHighGain4:          ['/Mixer/HighGainLine4'], 
    104                     } 
    105  
    106             self.VolumeControlsLowRes={ 
    107                     self.sldOut12Level:      ['/Mixer/Out12Level'], 
    108                     self.sldOut34Level:      ['/Mixer/Out34Level'], 
    109                     self.sldOut56Level:      ['/Mixer/Out56Level'], 
    110                     } 
    111  
    112             self.TriggerButtonControls={ 
    113                 self.btnSaveSettings:        ['/Mixer/SaveSettings'], 
    114             } 
     34        print "Init large Saffire LE mixer window" 
     35 
     36        self.VolumeControls={ 
     37                self.sldIN1Out1: ['/Mixer/LEMix48', 0, 0], 
     38                self.sldIN1Out2: ['/Mixer/LEMix48', 0, 1], 
     39                self.sldIN1Out3: ['/Mixer/LEMix48', 0, 2], 
     40                self.sldIN1Out4: ['/Mixer/LEMix48', 0, 3], 
     41                self.sldIN2Out1: ['/Mixer/LEMix48', 1, 0], 
     42                self.sldIN2Out2: ['/Mixer/LEMix48', 1, 1], 
     43                self.sldIN2Out3: ['/Mixer/LEMix48', 1, 2], 
     44                self.sldIN2Out4: ['/Mixer/LEMix48', 1, 3], 
     45                self.sldIN3Out1: ['/Mixer/LEMix48', 2, 0], 
     46                self.sldIN3Out2: ['/Mixer/LEMix48', 2, 1], 
     47                self.sldIN3Out3: ['/Mixer/LEMix48', 2, 2], 
     48                self.sldIN3Out4: ['/Mixer/LEMix48', 2, 3], 
     49                self.sldIN4Out1: ['/Mixer/LEMix48', 3, 0], 
     50                self.sldIN4Out2: ['/Mixer/LEMix48', 3, 1], 
     51                self.sldIN4Out3: ['/Mixer/LEMix48', 3, 2], 
     52                self.sldIN4Out4: ['/Mixer/LEMix48', 3, 3], 
     53                self.sldSPDIF1Out1: ['/Mixer/LEMix48', 4, 0], 
     54                self.sldSPDIF1Out2: ['/Mixer/LEMix48', 4, 1], 
     55                self.sldSPDIF1Out3: ['/Mixer/LEMix48', 4, 2], 
     56                self.sldSPDIF1Out4: ['/Mixer/LEMix48', 4, 3], 
     57                self.sldSPDIF2Out1: ['/Mixer/LEMix48', 5, 0], 
     58                self.sldSPDIF2Out2: ['/Mixer/LEMix48', 5, 1], 
     59                self.sldSPDIF2Out3: ['/Mixer/LEMix48', 5, 2], 
     60                self.sldSPDIF2Out4: ['/Mixer/LEMix48', 5, 3], 
     61                 
     62                self.sldPC1Out1: ['/Mixer/LEMix48', 6, 0], 
     63                self.sldPC1Out2: ['/Mixer/LEMix48', 6, 1], 
     64                self.sldPC1Out3: ['/Mixer/LEMix48', 6, 2], 
     65                self.sldPC1Out4: ['/Mixer/LEMix48', 6, 3], 
     66                self.sldPC2Out1: ['/Mixer/LEMix48', 7, 0], 
     67                self.sldPC2Out2: ['/Mixer/LEMix48', 7, 1], 
     68                self.sldPC2Out3: ['/Mixer/LEMix48', 7, 2], 
     69                self.sldPC2Out4: ['/Mixer/LEMix48', 7, 3], 
     70                self.sldPC3Out1: ['/Mixer/LEMix48', 8, 0], 
     71                self.sldPC3Out2: ['/Mixer/LEMix48', 8, 1], 
     72                self.sldPC3Out3: ['/Mixer/LEMix48', 8, 2], 
     73                self.sldPC3Out4: ['/Mixer/LEMix48', 8, 3], 
     74                self.sldPC4Out1: ['/Mixer/LEMix48', 9, 0], 
     75                self.sldPC4Out2: ['/Mixer/LEMix48', 9, 1], 
     76                self.sldPC4Out3: ['/Mixer/LEMix48', 9, 2], 
     77                self.sldPC4Out4: ['/Mixer/LEMix48', 9, 3], 
     78                self.sldPC5Out1: ['/Mixer/LEMix48', 10, 0], 
     79                self.sldPC5Out2: ['/Mixer/LEMix48', 10, 1], 
     80                self.sldPC5Out3: ['/Mixer/LEMix48', 10, 2], 
     81                self.sldPC5Out4: ['/Mixer/LEMix48', 10, 3], 
     82                self.sldPC6Out1: ['/Mixer/LEMix48', 11, 0], 
     83                self.sldPC6Out2: ['/Mixer/LEMix48', 11, 1], 
     84                self.sldPC6Out3: ['/Mixer/LEMix48', 11, 2], 
     85                self.sldPC6Out4: ['/Mixer/LEMix48', 11, 3], 
     86                self.sldPC7Out1: ['/Mixer/LEMix48', 12, 0], 
     87                self.sldPC7Out2: ['/Mixer/LEMix48', 12, 1], 
     88                self.sldPC7Out3: ['/Mixer/LEMix48', 12, 2], 
     89                self.sldPC7Out4: ['/Mixer/LEMix48', 12, 3], 
     90                self.sldPC8Out1: ['/Mixer/LEMix48', 13, 0], 
     91                self.sldPC8Out2: ['/Mixer/LEMix48', 13, 1], 
     92                self.sldPC8Out3: ['/Mixer/LEMix48', 13, 2], 
     93                self.sldPC8Out4: ['/Mixer/LEMix48', 13, 3], 
     94                } 
     95 
     96        self.SelectorControls={ 
     97                self.chkOut12Mute:          ['/Mixer/Out12Mute'], 
     98                self.chkOut12HwCtrl:        ['/Mixer/Out12HwCtrl'], 
     99                self.chkOut34Mute:          ['/Mixer/Out34Mute'], 
     100                self.chkOut34HwCtrl:        ['/Mixer/Out34HwCtrl'], 
     101                self.chkOut56Mute:          ['/Mixer/Out56Mute'], 
     102                self.chkOut56HwCtrl:        ['/Mixer/Out56HwCtrl'], 
     103                self.chkSPDIFTransparent:   ['/Mixer/SpdifTransparent'], 
     104                self.chkMIDITru:            ['/Mixer/MidiThru'], 
     105                self.chkHighGain3:          ['/Mixer/HighGainLine3'], 
     106                self.chkHighGain4:          ['/Mixer/HighGainLine4'], 
     107                } 
     108 
     109        self.VolumeControlsLowRes={ 
     110                self.sldOut12Level:      ['/Mixer/Out12Level'], 
     111                self.sldOut34Level:      ['/Mixer/Out34Level'], 
     112                self.sldOut56Level:      ['/Mixer/Out56Level'], 
     113                } 
     114 
     115        self.TriggerButtonControls={ 
     116            self.btnSaveSettings:        ['/Mixer/SaveSettings'], 
     117        } 
     118 
     119        self.TextControls={ 
     120        } 
     121 
     122        self.saveTextControls={ 
     123        } 
     124 
     125        self.ComboControls={ 
     126        } 
    115127 
    116128    def updateMatrixVolume(self,a0): 
    117         sender = self.sender() 
    118         vol = 0x7FFF-a0 
    119         print "set %s %d %d to %d" % ( 
    120                     self.VolumeControls[sender][0], 
    121                     self.VolumeControls[sender][1], 
    122                     self.VolumeControls[sender][2], 
    123                     vol) 
    124         self.hw.setMatrixMixerValue(self.VolumeControls[sender][0],  
    125                                     self.VolumeControls[sender][1], 
    126                                     self.VolumeControls[sender][2], 
    127                                     vol) 
     129        SaffireMixerBase.updateMatrixVolume(self,a0) 
    128130    def updateLowResVolume(self,a0): 
    129         sender = self.sender() 
    130         vol = a0 
    131         print "set %s to %d" % ( 
    132                     self.VolumeControlsLowRes[sender][0], 
    133                     vol) 
    134         self.hw.setDiscrete(self.VolumeControlsLowRes[sender][0], vol) 
    135  
     131        SaffireMixerBase.updateLowResVolume(self,a0) 
    136132    def updateSelector(self,a0): 
    137         sender = self.sender() 
    138         if a0: 
    139             state = 1 
    140         else: 
    141             state = 0 
    142         print "set %s to %d" % ( 
    143                     self.SelectorControls[sender][0], 
    144                     state) 
    145         self.hw.setDiscrete(self.SelectorControls[sender][0], state) 
    146  
     133        SaffireMixerBase.updateSelector(self,a0) 
    147134    def triggerButton(self): 
    148         sender = self.sender() 
    149         print "trigger %s" % ( 
    150                     self.TriggerButtonControls[sender][0]) 
    151         self.hw.setDiscrete(self.TriggerButtonControls[sender][0], 1) 
    152  
    153     def initValues(self): 
    154             for ctrl, info in self.VolumeControls.iteritems(): 
    155                 vol = self.hw.getMatrixMixerValue(self.VolumeControls[ctrl][0], 
    156                                                   self.VolumeControls[ctrl][1], 
    157                                                   self.VolumeControls[ctrl][2]) 
    158  
    159                 print "%s volume is %d" % (ctrl.name() , 0x7FFF-vol) 
    160                 ctrl.setValue(0x7FFF-vol) 
    161  
    162                 # connect the UI element 
    163                 QObject.connect(ctrl,SIGNAL('valueChanged(int)'),self.updateMatrixVolume) 
    164  
    165             for ctrl, info in self.VolumeControlsLowRes.iteritems(): 
    166                 vol = self.hw.getDiscrete(self.VolumeControlsLowRes[ctrl][0]) 
    167  
    168                 print "%s volume is %d" % (ctrl.name() , vol) 
    169                 ctrl.setValue(vol) 
    170  
    171                 # connect the UI element 
    172                 QObject.connect(ctrl,SIGNAL('valueChanged(int)'),self.updateLowResVolume) 
    173  
    174             for ctrl, info in self.SelectorControls.iteritems(): 
    175                 state = self.hw.getDiscrete(self.SelectorControls[ctrl][0]) 
    176                 print "%s state is %d" % (ctrl.name() , state) 
    177                 if state: 
    178                     ctrl.setChecked(True) 
    179                 else: 
    180                     ctrl.setChecked(False) 
    181  
    182                 # connect the UI element 
    183                 QObject.connect(ctrl,SIGNAL('stateChanged(int)'),self.updateSelector) 
    184  
    185             for ctrl, info in self.TriggerButtonControls.iteritems(): 
    186                 # connect the UI element 
    187                 QObject.connect(ctrl,SIGNAL('clicked()'),self.triggerButton) 
     135        SaffireMixerBase.triggerButton(self) 
     136    def saveText(self): 
     137        SaffireMixerBase.saveText(self) 
     138    def initCombo(self, combo): 
     139        SaffireMixerBase.initCombo(self,combo) 
     140    def selectCombo(self, mode): 
     141        SaffireMixerBase.selectCombo(self,mode) 
     142 
     143    def updateValues(self): 
     144        SaffireMixerBase.updateValues(self) 
     145 
     146class SaffireLEMixerSmall(SaffireLEMixerSmallUI, SaffireMixerBase): 
     147    def __init__(self,parent = None,name = None,fl = 0): 
     148        SaffireLEMixerSmallUI.__init__(self,parent,name,fl) 
     149        SaffireMixerBase.__init__(self) 
     150 
     151    def init(self): 
     152        print "Init small Saffire LE mixer window" 
     153 
     154        self.VolumeControls={ 
     155                self.sldIN1RecMix:    ['/Mixer/LEMix96', 0, 4], 
     156                self.sldIN2RecMix:    ['/Mixer/LEMix96', 1, 4], 
     157                self.sldIN3RecMix:    ['/Mixer/LEMix96', 2, 4], 
     158                self.sldIN4RecMix:    ['/Mixer/LEMix96', 3, 4], 
     159                self.sldSPDIF1RecMix: ['/Mixer/LEMix96', 4, 4], 
     160                self.sldSPDIF2RecMix: ['/Mixer/LEMix96', 5, 4], 
     161 
     162                self.sldPC1Out1: ['/Mixer/LEMix96', 6, 0], 
     163                self.sldPC1Out2: ['/Mixer/LEMix96', 6, 1], 
     164                self.sldPC1Out3: ['/Mixer/LEMix96', 6, 2], 
     165                self.sldPC1Out4: ['/Mixer/LEMix96', 6, 3], 
     166                self.sldPC2Out1: ['/Mixer/LEMix96', 7, 0], 
     167                self.sldPC2Out2: ['/Mixer/LEMix96', 7, 1], 
     168                self.sldPC2Out3: ['/Mixer/LEMix96', 7, 2], 
     169                self.sldPC2Out4: ['/Mixer/LEMix96', 7, 3], 
     170                } 
     171 
     172        self.SelectorControls={ 
     173                self.chkOut12Mute:          ['/Mixer/Out12Mute'], 
     174                self.chkOut12HwCtrl:        ['/Mixer/Out12HwCtrl'], 
     175                self.chkOut34Mute:          ['/Mixer/Out34Mute'], 
     176                self.chkOut34HwCtrl:        ['/Mixer/Out34HwCtrl'], 
     177                self.chkOut56Mute:          ['/Mixer/Out56Mute'], 
     178                self.chkOut56HwCtrl:        ['/Mixer/Out56HwCtrl'], 
     179                self.chkSPDIFTransparent:   ['/Mixer/SpdifTransparent'], 
     180                self.chkMIDITru:            ['/Mixer/MidiThru'], 
     181                self.chkHighGain3:          ['/Mixer/HighGainLine3'], 
     182                self.chkHighGain4:          ['/Mixer/HighGainLine4'], 
     183                } 
     184 
     185        self.VolumeControlsLowRes={ 
     186                self.sldOut12Level:      ['/Mixer/Out12Level'], 
     187                self.sldOut34Level:      ['/Mixer/Out34Level'], 
     188                self.sldOut56Level:      ['/Mixer/Out56Level'], 
     189                } 
     190 
     191        self.TriggerButtonControls={ 
     192            self.btnSaveSettings:        ['/Mixer/SaveSettings'], 
     193        } 
     194 
     195        self.TextControls={ 
     196        } 
     197 
     198        self.saveTextControls={ 
     199        } 
     200 
     201        self.ComboControls={ 
     202        } 
     203 
     204    def updateMatrixVolume(self,a0): 
     205        SaffireMixerBase.updateMatrixVolume(self,a0) 
     206    def updateLowResVolume(self,a0): 
     207        SaffireMixerBase.updateLowResVolume(self,a0) 
     208    def updateSelector(self,a0): 
     209        SaffireMixerBase.updateSelector(self,a0) 
     210    def triggerButton(self): 
     211        SaffireMixerBase.triggerButton(self) 
     212    def saveText(self): 
     213        SaffireMixerBase.saveText(self) 
     214    def initCombo(self, combo): 
     215        SaffireMixerBase.initCombo(self,combo) 
     216    def selectCombo(self, mode): 
     217        SaffireMixerBase.selectCombo(self,mode) 
     218 
     219    def updateValues(self): 
     220        SaffireMixerBase.updateValues(self) 
  • trunk/libffado/support/mixer/mixer_saffirepro.py

    r1184 r1217  
    2222 
    2323from qt import * 
    24 from mixer_saffireproui import * 
    25  
    26 class SaffireProMixer(SaffireProMixerUI): 
     24from mixer_saffire_base import SaffireMixerBase 
     25from mixer_saffireprolargeui import SaffireProMixerLargeUI 
     26from mixer_saffireprosmallui import SaffireProMixerSmallUI 
     27 
     28class SaffireProMixerLarge(SaffireProMixerLargeUI, SaffireMixerBase): 
    2729    def __init__(self,parent = None,name = None,fl = 0): 
    28         SaffireProMixerUI.__init__(self,parent,name,fl) 
    29  
    30     def updateMatrixVolume(self,a0): 
    31         sender = self.sender() 
    32         vol = 0x7FFF-a0 
    33         print "set %s %d %d to %d" % ( 
    34                     self.VolumeControls[sender][0], 
    35                     self.VolumeControls[sender][1], 
    36                     self.VolumeControls[sender][2], 
    37                     vol) 
    38         self.hw.setMatrixMixerValue(self.VolumeControls[sender][0],  
    39                                     self.VolumeControls[sender][1], 
    40                                     self.VolumeControls[sender][2], 
    41                                     vol) 
    42     def updateLowResVolume(self,a0): 
    43         sender = self.sender() 
    44         vol = a0 
    45         print "set %s to %d" % ( 
    46                     self.VolumeControlsLowRes[sender][0], 
    47                     vol) 
    48         self.hw.setDiscrete(self.VolumeControlsLowRes[sender][0], vol) 
    49  
    50     def updateSelector(self,a0): 
    51         sender = self.sender() 
    52         if a0: 
    53             state = 1 
    54         else: 
    55             state = 0 
    56         print "set %s to %d" % ( 
    57                     self.SelectorControls[sender][0], 
    58                     state) 
    59         self.hw.setDiscrete(self.SelectorControls[sender][0], state) 
    60  
    61     def triggerButton(self): 
    62         sender = self.sender() 
    63         print "trigger %s" % ( 
    64                     self.TriggerButtonControls[sender][0]) 
    65         self.hw.setDiscrete(self.TriggerButtonControls[sender][0], 1) 
    66  
    67     def saveText(self): 
    68         sender = self.sender() 
    69         textbox = self.saveTextControls[sender][0] 
    70         print "save %s" % ( 
    71                     textbox.text().ascii()) 
    72         self.hw.setText(self.TextControls[textbox][0], textbox.text().ascii()) 
    73  
    74     def selectStandaloneMode(self, mode): 
    75         self.hw.enumSelect('/Control/StandaloneConfig', mode) 
    76         self.comboStandalone.setCurrentItem( self.hw.enumSelected('/Control/StandaloneConfig') ) 
     30        SaffireProMixerLargeUI.__init__(self,parent,name,fl) 
     31        SaffireMixerBase.__init__(self) 
     32        self.have_adat = False 
    7733 
    7834    def init(self): 
    79             print "Init Saffire Pro mixer window" 
     35            print "Init large Saffire Pro mixer window" 
    8036 
    8137            self.VolumeControls={ 
     
    223179            self.TextControls={ 
    224180            } 
     181 
    225182            self.saveTextControls={ 
    226183            } 
    227184 
     185            self.ComboControls={ 
     186                self.comboStandalone:        ['/Control/StandaloneConfig'], 
     187            } 
     188 
     189    def updateMatrixVolume(self,a0): 
     190        SaffireMixerBase.updateMatrixVolume(self,a0) 
     191    def updateLowResVolume(self,a0): 
     192        SaffireMixerBase.updateLowResVolume(self,a0) 
     193    def updateSelector(self,a0): 
     194        SaffireMixerBase.updateSelector(self,a0) 
     195    def triggerButton(self): 
     196        SaffireMixerBase.triggerButton(self) 
     197    def saveText(self): 
     198        SaffireMixerBase.saveText(self) 
     199    def initCombo(self, combo): 
     200        SaffireMixerBase.initCombo(self,combo) 
     201    def selectCombo(self, mode): 
     202        SaffireMixerBase.selectCombo(self,mode) 
     203 
    228204    def updateValues(self): 
    229         for ctrl, info in self.VolumeControls.iteritems(): 
    230             vol = self.hw.getMatrixMixerValue(self.VolumeControls[ctrl][0], 
    231                                                 self.VolumeControls[ctrl][1], 
    232                                                 self.VolumeControls[ctrl][2]) 
    233  
    234             print "%s volume is %d" % (ctrl.name() , 0x7FFF-vol) 
    235             ctrl.setValue(0x7FFF-vol) 
    236  
    237         for ctrl, info in self.VolumeControlsLowRes.iteritems(): 
    238             vol = self.hw.getDiscrete(self.VolumeControlsLowRes[ctrl][0]) 
    239  
    240             print "%s volume is %d" % (ctrl.name() , vol) 
    241             ctrl.setValue(vol) 
    242  
    243         for ctrl, info in self.SelectorControls.iteritems(): 
    244             state = self.hw.getDiscrete(self.SelectorControls[ctrl][0]) 
    245             print "%s state is %d" % (ctrl.name() , state) 
     205        self.samplerate = self.hw.getDiscrete('/Generic/SamplerateSelect') 
     206        self.modelId = self.configrom.getModelId() 
     207        if self.modelId == 0x00000003: 
     208            state = self.hw.getDiscrete('/Control/ADATDisable') 
    246209            if state: 
    247                 ctrl.setChecked(True) 
     210                self.have_adat = False 
     211                print "detected PRO26 at %d, ADAT disabled" % self.samplerate 
    248212            else: 
    249                 ctrl.setChecked(False) 
    250  
    251         for ctrl, info in self.TriggerButtonControls.iteritems(): 
    252             pass 
    253  
    254         for ctrl, info in self.TextControls.iteritems(): 
    255             text = self.hw.getText(self.TextControls[ctrl][0]) 
    256             print "%s text is %s" % (ctrl.name() , text) 
    257             ctrl.setText(text) 
    258  
    259         self.comboStandalone.clear() 
    260         for i in range( self.hw.enumCount('/Control/StandaloneConfig') ): 
    261             self.comboStandalone.insertItem( self.hw.enumGetLabel('/Control/StandaloneConfig', i) ) 
    262         self.comboStandalone.setCurrentItem( self.hw.enumSelected('/Control/StandaloneConfig') ) 
    263  
    264     def initValues(self): 
    265         self.updateValues() 
    266         for ctrl, info in self.VolumeControls.iteritems(): 
    267             # connect the UI element 
    268             QObject.connect(ctrl,SIGNAL('valueChanged(int)'),self.updateMatrixVolume) 
    269  
    270         for ctrl, info in self.VolumeControlsLowRes.iteritems(): 
    271             # connect the UI element 
    272             QObject.connect(ctrl,SIGNAL('valueChanged(int)'),self.updateLowResVolume) 
    273  
    274         for ctrl, info in self.SelectorControls.iteritems(): 
    275             # connect the UI element 
    276             QObject.connect(ctrl,SIGNAL('stateChanged(int)'),self.updateSelector) 
    277  
    278         for ctrl, info in self.TriggerButtonControls.iteritems(): 
    279             # connect the UI element 
    280             QObject.connect(ctrl,SIGNAL('clicked()'),self.triggerButton) 
    281  
    282         for ctrl, info in self.saveTextControls.iteritems(): 
    283             # connect the UI element 
    284             QObject.connect(ctrl,SIGNAL('clicked()'), self.saveText) 
    285  
    286         QObject.connect(self.comboStandalone, SIGNAL('activated(int)'), self.selectStandaloneMode) 
     213                self.have_adat = True 
     214                print "detected PRO26 at %d, ADAT enabled" % self.samplerate 
     215        else: 
     216            self.have_adat = False 
     217            print "detected PRO10 at %d, ADAT not available" % self.samplerate 
     218 
     219        for i in range(self.tabInputMix.count()): 
     220            self.tabInputMix.setTabEnabled(self.tabInputMix.page(i), True) 
     221 
     222        if not self.have_adat: 
     223            for i in range(self.tabInputMix.count()): 
     224                page = self.tabInputMix.page(i) 
     225                name = page.name() 
     226                if name[0:4] == "adat": 
     227                    self.tabInputMix.setTabEnabled(page, False) 
     228                else: 
     229                    self.tabInputMix.setTabEnabled(page, True) 
     230 
     231        self.tabInputMix.setCurrentPage(0) 
     232        SaffireMixerBase.updateValues(self) 
     233 
     234class SaffireProMixerSmall(SaffireProMixerSmallUI, SaffireMixerBase): 
     235    def __init__(self,parent = None,name = None,fl = 0): 
     236        SaffireProMixerSmallUI.__init__(self,parent,name,fl) 
     237        SaffireMixerBase.__init__(self) 
     238 
     239    def init(self): 
     240            print "Init small Saffire Pro mixer window" 
     241 
     242            self.VolumeControls={ 
     243 
     244                self.sldOMixPC1O1: ['/Mixer/OutputMix', 0, 0],  
     245                self.sldOMixPC2O2: ['/Mixer/OutputMix', 1, 1],  
     246                self.sldOMixPC3O3: ['/Mixer/OutputMix', 2, 2],  
     247                self.sldOMixPC4O4: ['/Mixer/OutputMix', 3, 3],  
     248                self.sldOMixPC5O5: ['/Mixer/OutputMix', 4, 4],  
     249                self.sldOMixPC6O6: ['/Mixer/OutputMix', 5, 5],  
     250                self.sldOMixPC7O7: ['/Mixer/OutputMix', 6, 6],  
     251                self.sldOMixPC8O8: ['/Mixer/OutputMix', 7, 7],  
     252                self.sldOMixPC9O9: ['/Mixer/OutputMix', 8, 8],  
     253                self.sldOMixPC10O10: ['/Mixer/OutputMix', 9, 9], 
     254                 
     255                self.sldOMixPC1O3: ['/Mixer/OutputMix', 0, 2],  
     256                self.sldOMixPC2O4: ['/Mixer/OutputMix', 1, 3],  
     257                self.sldOMixPC1O5: ['/Mixer/OutputMix', 0, 4],  
     258                self.sldOMixPC2O6: ['/Mixer/OutputMix', 1, 5],  
     259                self.sldOMixPC1O7: ['/Mixer/OutputMix', 0, 6],  
     260                self.sldOMixPC2O8: ['/Mixer/OutputMix', 1, 7],  
     261                self.sldOMixPC1O9: ['/Mixer/OutputMix', 0, 8],  
     262                self.sldOMixPC2O10: ['/Mixer/OutputMix', 1, 9],  
     263                 
     264                self.sldOMixIMixO1: ['/Mixer/OutputMix', 10, 0],  
     265                self.sldOMixIMixO2: ['/Mixer/OutputMix', 11, 1],  
     266                self.sldOMixIMixO3: ['/Mixer/OutputMix', 10, 2],  
     267                self.sldOMixIMixO4: ['/Mixer/OutputMix', 11, 3],  
     268                self.sldOMixIMixO5: ['/Mixer/OutputMix', 10, 4],  
     269                self.sldOMixIMixO6: ['/Mixer/OutputMix', 11, 5],  
     270                self.sldOMixIMixO7: ['/Mixer/OutputMix', 10, 6],  
     271                self.sldOMixIMixO8: ['/Mixer/OutputMix', 11, 7],  
     272                self.sldOMixIMixO9: ['/Mixer/OutputMix', 10, 8],  
     273                self.sldOMixIMixO10: ['/Mixer/OutputMix', 11, 9],  
     274                } 
     275 
     276 
     277            self.SelectorControls={ 
     278                # control elements 
     279                self.chkInsert1: ['/Control/Insert1'],  
     280                self.chkInsert2: ['/Control/Insert2'],  
     281                self.chkPhantom14: ['/Control/Phantom_1to4'],  
     282                self.chkPhantom58: ['/Control/Phantom_5to8'],  
     283                self.chkAC3: ['/Control/AC3pass'],  
     284                self.chkMidiThru: ['/Control/MidiTru'],  
     285                self.chkHighVoltage: ['/Control/UseHighVoltageRail'],  
     286                #self.chkEnableADAT1: ['/Control/EnableAdat1'],  
     287                #self.chkEnableADAT2: ['/Control/EnableAdat2'], 
     288                #self.chkEnableSPDIF1: ['/Control/EnableSPDIF1'], 
     289                self.chkMidiEnable: ['/Control/MIDIEnable'], 
     290                self.chkAdatDisable: ['/Control/ADATDisable'], 
     291                # Mixer switches 
     292                self.chkMute12: ['/Mixer/Out12Mute'], 
     293                self.chkHwCtrl12: ['/Mixer/Out12HwCtrl'], 
     294                self.chkPad12: ['/Mixer/Out12Pad'], 
     295                self.chkDim12: ['/Mixer/Out12Dim'], 
     296                self.chkMute34: ['/Mixer/Out34Mute'], 
     297                self.chkHwCtrl34: ['/Mixer/Out34HwCtrl'], 
     298                self.chkPad34: ['/Mixer/Out34Pad'], 
     299                self.chkDim34: ['/Mixer/Out34Dim'], 
     300                self.chkMute56: ['/Mixer/Out56Mute'], 
     301                self.chkHwCtrl56: ['/Mixer/Out56HwCtrl'], 
     302                self.chkPad56: ['/Mixer/Out56Pad'], 
     303                self.chkDim56: ['/Mixer/Out56Dim'], 
     304                self.chkMute78: ['/Mixer/Out78Mute'], 
     305                self.chkHwCtrl78: ['/Mixer/Out78HwCtrl'], 
     306                self.chkPad78: ['/Mixer/Out78Pad'], 
     307                self.chkDim78: ['/Mixer/Out78Dim'], 
     308                # direct monitoring 
     309                self.chkMonitor1: ['/Mixer/DirectMonitorCH1'], 
     310                self.chkMonitor2: ['/Mixer/DirectMonitorCH2'], 
     311                self.chkMonitor3: ['/Mixer/DirectMonitorCH3'], 
     312                self.chkMonitor4: ['/Mixer/DirectMonitorCH4'], 
     313                self.chkMonitor5: ['/Mixer/DirectMonitorCH5'], 
     314                self.chkMonitor6: ['/Mixer/DirectMonitorCH6'], 
     315                self.chkMonitor7: ['/Mixer/DirectMonitorCH7'], 
     316                self.chkMonitor8: ['/Mixer/DirectMonitorCH8'], 
     317            } 
     318 
     319            self.VolumeControlsLowRes={ 
     320                self.sldOut12Level:      ['/Mixer/Out12Level'], 
     321                self.sldOut34Level:      ['/Mixer/Out34Level'], 
     322                self.sldOut56Level:      ['/Mixer/Out56Level'], 
     323                self.sldOut78Level:      ['/Mixer/Out78Level'], 
     324            } 
     325 
     326            self.TriggerButtonControls={ 
     327                self.btnReboot:        ['/Control/Reboot'], 
     328                self.btnIdentify:      ['/Control/FlashLed'], 
     329                self.btnSaveSettings:  ['/Control/SaveSettings'], 
     330            } 
     331 
     332            self.TextControls={ 
     333            } 
     334 
     335            self.saveTextControls={ 
     336            } 
     337 
     338            self.ComboControls={ 
     339                self.comboStandalone:        ['/Control/StandaloneConfig'], 
     340            } 
     341 
     342    def updateMatrixVolume(self,a0): 
     343        SaffireMixerBase.updateMatrixVolume(self,a0) 
     344    def updateLowResVolume(self,a0): 
     345        SaffireMixerBase.updateLowResVolume(self,a0) 
     346    def updateSelector(self,a0): 
     347        SaffireMixerBase.updateSelector(self,a0) 
     348    def triggerButton(self): 
     349        SaffireMixerBase.triggerButton(self) 
     350    def saveText(self): 
     351        SaffireMixerBase.saveText(self) 
     352    def initCombo(self, combo): 
     353        SaffireMixerBase.initCombo(self,combo) 
     354    def selectCombo(self, mode): 
     355        SaffireMixerBase.selectCombo(self,mode) 
     356 
     357    def updateValues(self): 
     358        SaffireMixerBase.updateValues(self) 
  • trunk/libffado/support/mixer/SConscript

    r1093 r1217  
    3030    e = env.Clone() 
    3131 
    32     e['MIXERAPPS'] = [ 'phase24', 'phase88', 'saffirepro', 'saffire', 
    33                        'saffirele', 'af2', 'bcoaudio5', 'edirolfa66', 
     32    e['MIXERAPPS'] = [ 'phase24', 'phase88', 
     33                       'saffire', 
     34                       'saffireprolarge', 'saffireprosmall', 
     35                       'saffirelelarge', 'saffirelesmall', 
     36                       'af2', 'bcoaudio5', 'edirolfa66', 
    3437                       'mackie_generic', 'quatafire', 'motu', 
    3538                       'global', 'dummy'