Changeset 1315

Show
Ignore:
Timestamp:
08/18/08 16:23:16 (12 years ago)
Author:
jwoithe
Message:

MOTU: first cut at supporting the meter controls of the 896HD. Please test and report what works and what doesn't.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/libffado-2.0/src/motu/motu_avdevice.cpp

    r1300 r1315  
    302302}; 
    303303 
     304const MixerCtrl MixerCtrls_896HD[] = { 
     305    {"Mix1/Mix_", "Mix 1 ", "", MOTU_CTRL_STD_MIX, 0x0c20, }, 
     306    {"Mix2/Mix_", "Mix 2 ", "", MOTU_CTRL_STD_MIX, 0x0c24, }, 
     307    {"Mix3/Mix_", "Mix 3 ", "", MOTU_CTRL_STD_MIX, 0x0c28, }, 
     308    {"Mix4/Mix_", "Mix 4 ", "", MOTU_CTRL_STD_MIX, 0x0c2c, }, 
     309 
     310    /* For phones source control, "register" is currently unused */ 
     311    {"Control/Phones_", "Phones source", "", MOTU_CTRL_PHONES_SRC, 0}, 
     312 
     313    /* For optical mode controls, the "register" is used to indicate direction */ 
     314    {"Control/OpticalIn_mode", "Optical input mode ", "", MOTU_CTRL_OPTICAL_MODE, MOTU_DIR_IN}, 
     315    {"Control/OpticalOut_mode", "Optical output mode ", "", MOTU_CTRL_OPTICAL_MODE, MOTU_DIR_OUT}, 
     316 
     317    /* For meter controls the "register" indicates which meter controls are available */ 
     318    {"Control/Meter_", "Meter ", "", MOTU_CTRL_METER, 
     319      MOTU_CTRL_METER_PEAKHOLD | MOTU_CTRL_METER_CLIPHOLD | MOTU_CTRL_METER_AESEBU_SRC |  
     320      MOTU_CTRL_METER_PROG_SRC}, 
     321}; 
     322 
    304323const MixerCtrl MixerCtrls_828Mk2[] = { 
    305324    {"Mix1/Mix_", "Mix 1 ", "", MOTU_CTRL_STD_MIX, 0x0c20, }, 
     
    332351    MixerCtrls_828Mk2, MixerBuses_Traveler, MixerChannels_Traveler); 
    333352 
    334 // For convenience during initial testing, just make the 896HD use the 
    335 // Traveler's mixer definition.  Separate definitions for these models will 
    336 // come once the final mixer structure is in place.  For now it's in a state 
    337 // of flux and subject to significant change. 
    338 #define Mixer_896HD   Mixer_Traveler 
     353const MotuMixer Mixer_896HD = MOTUMIXER( 
     354    MixerCtrls_896HD, MixerBuses_Traveler, MixerChannels_Traveler); 
    339355 
    340356/* The order of DevicesProperty entries must match the numeric order of the 
     
    548564                    ctrl->name, ctrl->label, ctrl->desc)); 
    549565            type &= ~MOTU_CTRL_OPTICAL_MODE; 
     566        } 
     567        if (type & MOTU_CTRL_METER) { 
     568            if (ctrl->dev_register & MOTU_CTRL_METER_PEAKHOLD) { 
     569                snprintf(name, 100, "%s%s", ctrl->name, "peakhold_time"); 
     570                snprintf(label,100, "%s%s", ctrl->label,"peakhold time"); 
     571                result &= m_MixerContainer->addElement( 
     572                    new MeterControl(*this, MOTU_METER_PEAKHOLD_MASK, 
     573                        MOTU_METER_PEAKHOLD_SHIFT, name, label, ctrl->desc)); 
     574            } 
     575            if (ctrl->dev_register & MOTU_CTRL_METER_CLIPHOLD) { 
     576                snprintf(name, 100, "%s%s", ctrl->name, "cliphold_time"); 
     577                snprintf(label,100, "%s%s", ctrl->label,"cliphold time"); 
     578                result &= m_MixerContainer->addElement( 
     579                    new MeterControl(*this, MOTU_METER_CLIPHOLD_MASK, 
     580                        MOTU_METER_CLIPHOLD_SHIFT, name, label, ctrl->desc)); 
     581            } 
     582            if (ctrl->dev_register & MOTU_CTRL_METER_AESEBU_SRC) { 
     583                snprintf(name, 100, "%s%s", ctrl->name, "aesebu_src"); 
     584                snprintf(label,100, "%s%s", ctrl->label,"AESEBU source"); 
     585                result &= m_MixerContainer->addElement( 
     586                    new MeterControl(*this, MOTU_METER_AESEBU_SRC_MASK, 
     587                        MOTU_METER_AESEBU_SRC_SHIFT, name, label, ctrl->desc)); 
     588            } 
     589            if (ctrl->dev_register & MOTU_CTRL_METER_PROG_SRC) { 
     590                snprintf(name, 100, "%s%s", ctrl->name, "src"); 
     591                snprintf(label,100, "%s%s", ctrl->label,"source"); 
     592                result &= m_MixerContainer->addElement( 
     593                    new MeterControl(*this, MOTU_METER_PROG_SRC_MASK, 
     594                        MOTU_METER_PROG_SRC_SHIFT, name, label, ctrl->desc)); 
     595            } 
     596            type &= ~MOTU_CTRL_METER; 
    550597        } 
    551598 
  • branches/libffado-2.0/src/motu/motu_avdevice.h

    r1300 r1315  
    6868#define MOTU_DIR_INOUT       (MOTU_DIR_IN | MOTU_DIR_OUT) 
    6969 
     70#define MOTU_METER_PEAKHOLD_MASK     0x3800 
     71#define MOTU_METER_PEAKHOLD_SHIFT    11 
     72#define MOTU_METER_CLIPHOLD_MASK     0x0700 
     73#define MOTU_METER_CLIPHOLD_SHIFT    8 
     74#define MOTU_METER_AESEBU_SRC_MASK   0x0004 
     75#define MOTU_METER_AESEBU_SRC_SHIFT  2 
     76#define MOTU_METER_PROG_SRC_MASK     0x0003 
     77#define MOTU_METER_PROG_SRC_SHIFT    0 
     78 
    7079/* Device registers */ 
    7180#define MOTU_REG_ISOCTRL           0x0b00 
    7281#define MOTU_REG_OPTICAL_CTRL      0x0b10 
    7382#define MOTU_REG_CLK_CTRL          0x0b14 
     83#define MOTU_REG_896HD_METER_REG   0x0b1c 
     84#define MOTU_REG_896HD_METER_CONF  0x0b24 
    7485#define MOTU_REG_ROUTE_PORT_CONF   0x0c04 
    7586#define MOTU_REG_INPUT_LEVEL       0x0c08 
  • branches/libffado-2.0/src/motu/motu_controls.cpp

    r1300 r1315  
    727727} 
    728728 
     729MeterControl::MeterControl(MotuDevice &parent, unsigned int ctrl_mask, unsigned int ctrl_shift) 
     730: MotuDiscreteCtrl(parent, ctrl_mask) 
     731{ 
     732    m_shift = ctrl_shift; 
     733    validate(); 
     734} 
     735 
     736MeterControl::MeterControl(MotuDevice &parent, unsigned int ctrl_mask, unsigned int ctrl_shift, 
     737             std::string name, std::string label, std::string descr) 
     738: MotuDiscreteCtrl(parent, ctrl_mask, name, label, descr) 
     739{ 
     740    m_shift = ctrl_shift; 
     741    validate(); 
     742} 
     743 
     744void MeterControl::validate(void) { 
     745    if (m_register & (1<< m_shift) == 0) { 
     746        debugOutput(DEBUG_LEVEL_VERBOSE, "Inconsistent mask/shift: 0x%08x/%d\n", m_register, m_shift); 
     747    } 
     748} 
     749 
     750bool 
     751MeterControl::setValue(int v) 
     752{ 
     753    unsigned int val; 
     754    debugOutput(DEBUG_LEVEL_VERBOSE, "setValue for meter control 0x%08x/%d: %d\n",  
     755        m_register, m_shift, v); 
     756 
     757    // Need to get current register setting so we can preserve the parts not 
     758    // being controlled by this object.  m_register holds the mask for the  
     759    // parts we're changing. 
     760    val = m_parent.ReadRegister(MOTU_REG_896HD_METER_CONF) & ~m_register; 
     761    val |= (v << m_shift) & m_register; 
     762 
     763    m_parent.WriteRegister(MOTU_REG_896HD_METER_CONF, val); 
     764 
     765    // Drivers under other OSes set MOTU_REG_896HD_METER_REG (0x0b1c) to 
     766    // 0x0400 whenever MOTU_REG_896HD_METER_CONF (0x0b24) is changed.  
     767    // There's no obvious reason why they do this, but since it's no hassle 
     768    // we might as well do the same. 
     769    m_parent.WriteRegister(MOTU_REG_896HD_METER_REG, 0x0400); 
     770 
     771    return true; 
     772} 
     773 
     774int 
     775MeterControl::getValue() 
     776{ 
     777    unsigned int val; 
     778    debugOutput(DEBUG_LEVEL_VERBOSE, "getValue for meter control 0x%08x/%d\n",  
     779        m_register, m_shift); 
     780 
     781    // m_register holds the mask of the part of interest 
     782    val = (m_parent.ReadRegister(MOTU_REG_896HD_METER_CONF) & m_register) >> m_shift; 
     783 
     784    return val; 
     785} 
     786 
    729787InfoElement::InfoElement(MotuDevice &parent, unsigned infotype) 
    730788: MotuDiscreteCtrl(parent, infotype) 
  • branches/libffado-2.0/src/motu/motu_controls.h

    r1300 r1315  
    4141#define MOTU_CTRL_MIX_DEST        0x00000400 
    4242 
     43#define MOTU_CTRL_METER           0x00001000 
     44 
    4345#define MOTU_CTRL_INPUT_TRIMGAIN  0x01000000 
    4446#define MOTU_CTRL_INPUT_PAD       0x02000000 
     
    7375#define MOTU_CTRL_MODE_PAD                 0x00000000 
    7476#define MOTU_CTRL_MODE_TRIMGAIN            0x00000001 
     77 
     78#define MOTU_CTRL_METER_PEAKHOLD           0x00000000 
     79#define MOTU_CTRL_METER_CLIPHOLD           0x00000001 
     80#define MOTU_CTRL_METER_AESEBU_SRC         0x00000002 
     81#define MOTU_CTRL_METER_PROG_SRC           0x00000004 
    7582 
    7683#define MOTU_INFO_MODEL                    0x00000001 
     
    293300}; 
    294301 
     302class MeterControl 
     303    : public MotuDiscreteCtrl 
     304{ 
     305public: 
     306    MeterControl(MotuDevice &parent, unsigned int ctrl_mask, unsigned int ctrl_shift); 
     307    MeterControl(MotuDevice &parent, unsigned int ctrl_mask, unsigned int ctrl_shift,  
     308          std::string name, std::string label, std::string descr); 
     309 
     310    virtual bool setValue(int v); 
     311    virtual int getValue(); 
     312protected: 
     313    void validate(); 
     314    unsigned int m_shift; 
     315}; 
     316 
    295317class InfoElement 
    296318    : public MotuDiscreteCtrl 
  • branches/libffado-2.0/support/mixer/mixer_motu.py

    r1313 r1315  
    560560            self.optical_in_mode:   ['/Mixer/Control/OpticalIn_mode'], 
    561561            self.optical_out_mode:  ['/Mixer/Control/OpticalOut_mode'], 
     562 
     563            self.meter_src_ctrl:    ['/Mixer/Control/Meter_src'], 
     564            self.aesebu_meter_ctrl: ['/Mixer/Control/Meter_aesebu_src'], 
     565            self.peakhold_time_ctrl:['/Mixer/Control/Meter_peakhold_time'], 
     566            self.cliphold_time_ctrl:['/Mixer/Control/Meter_cliphold_time'], 
    562567        } 
    563568 
     
    636641            self.optical_in_mode.removeItem(2) 
    637642            self.optical_out_mode.removeItem(2) 
     643 
     644        # Only the 896HD has meter controls 
     645        if (self.model != MOTU_MODEL_896HD): 
     646            self.disable_hide(self.meter_src) 
     647            self.disable_hide(self.aesebu_meter) 
     648            self.disable_hide(self.peakhold_time) 
     649            self.disable_hide(self.cliphold_time) 
    638650 
    639651        # Some controls must be disabled if the device is streaming 
  • branches/libffado-2.0/support/mixer/mixer_motu.ui

    r1310 r1315  
    2727            <x>0</x> 
    2828            <y>0</y> 
    29             <width>958</width> 
     29            <width>992</width> 
    3030            <height>693</height> 
    3131        </rect> 
     
    252252                    </vbox> 
    253253                </widget> 
     254                <widget class="Line"> 
     255                    <property name="name"> 
     256                        <cstring>line2_2</cstring> 
     257                    </property> 
     258                    <property name="frameShape"> 
     259                        <enum>HLine</enum> 
     260                    </property> 
     261                    <property name="frameShadow"> 
     262                        <enum>Sunken</enum> 
     263                    </property> 
     264                    <property name="orientation"> 
     265                        <enum>Horizontal</enum> 
     266                    </property> 
     267                </widget> 
     268                <widget class="QGroupBox"> 
     269                    <property name="name"> 
     270                        <cstring>meter_src</cstring> 
     271                    </property> 
     272                    <property name="font"> 
     273                        <font> 
     274                            <pointsize>10</pointsize> 
     275                        </font> 
     276                    </property> 
     277                    <property name="frameShape"> 
     278                        <enum>NoFrame</enum> 
     279                    </property> 
     280                    <property name="title"> 
     281                        <string>Meter source</string> 
     282                    </property> 
     283                    <vbox> 
     284                        <property name="name"> 
     285                            <cstring>unnamed</cstring> 
     286                        </property> 
     287                        <widget class="QComboBox"> 
     288                            <item> 
     289                                <property name="text"> 
     290                                    <string>Analog out</string> 
     291                                </property> 
     292                            </item> 
     293                            <item> 
     294                                <property name="text"> 
     295                                    <string>ADAT in</string> 
     296                                </property> 
     297                            </item> 
     298                            <item> 
     299                                <property name="text"> 
     300                                    <string>ADAT out</string> 
     301                                </property> 
     302                            </item> 
     303                            <property name="name"> 
     304                                <cstring>meter_src_ctrl</cstring> 
     305                            </property> 
     306                            <property name="font"> 
     307                                <font> 
     308                                    <pointsize>9</pointsize> 
     309                                </font> 
     310                            </property> 
     311                        </widget> 
     312                    </vbox> 
     313                </widget> 
     314                <widget class="QGroupBox"> 
     315                    <property name="name"> 
     316                        <cstring>aesebu_meter</cstring> 
     317                    </property> 
     318                    <property name="font"> 
     319                        <font> 
     320                            <pointsize>10</pointsize> 
     321                        </font> 
     322                    </property> 
     323                    <property name="frameShape"> 
     324                        <enum>NoFrame</enum> 
     325                    </property> 
     326                    <property name="title"> 
     327                        <string>AES/EBU Meter</string> 
     328                    </property> 
     329                    <vbox> 
     330                        <property name="name"> 
     331                            <cstring>unnamed</cstring> 
     332                        </property> 
     333                        <widget class="QComboBox"> 
     334                            <item> 
     335                                <property name="text"> 
     336                                    <string>AES/EBU out</string> 
     337                                </property> 
     338                            </item> 
     339                            <item> 
     340                                <property name="text"> 
     341                                    <string>AES/EBU in</string> 
     342                                </property> 
     343                            </item> 
     344                            <property name="name"> 
     345                                <cstring>aesebu_meter_ctrl</cstring> 
     346                            </property> 
     347                            <property name="font"> 
     348                                <font> 
     349                                    <pointsize>9</pointsize> 
     350                                </font> 
     351                            </property> 
     352                        </widget> 
     353                    </vbox> 
     354                </widget> 
     355                <widget class="QGroupBox"> 
     356                    <property name="name"> 
     357                        <cstring>peakhold_time</cstring> 
     358                    </property> 
     359                    <property name="font"> 
     360                        <font> 
     361                            <pointsize>10</pointsize> 
     362                        </font> 
     363                    </property> 
     364                    <property name="frameShape"> 
     365                        <enum>NoFrame</enum> 
     366                    </property> 
     367                    <property name="title"> 
     368                        <string>Peakhold time</string> 
     369                    </property> 
     370                    <vbox> 
     371                        <property name="name"> 
     372                            <cstring>unnamed</cstring> 
     373                        </property> 
     374                        <widget class="QComboBox"> 
     375                            <item> 
     376                                <property name="text"> 
     377                                    <string>Off</string> 
     378                                </property> 
     379                            </item> 
     380                            <item> 
     381                                <property name="text"> 
     382                                    <string>2 sec</string> 
     383                                </property> 
     384                            </item> 
     385                            <item> 
     386                                <property name="text"> 
     387                                    <string>4 sec</string> 
     388                                </property> 
     389                            </item> 
     390                            <item> 
     391                                <property name="text"> 
     392                                    <string>10 sec</string> 
     393                                </property> 
     394                            </item> 
     395                            <item> 
     396                                <property name="text"> 
     397                                    <string>1 min</string> 
     398                                </property> 
     399                            </item> 
     400                            <item> 
     401                                <property name="text"> 
     402                                    <string>5 min</string> 
     403                                </property> 
     404                            </item> 
     405                            <item> 
     406                                <property name="text"> 
     407                                    <string>8 min</string> 
     408                                </property> 
     409                            </item> 
     410                            <item> 
     411                                <property name="text"> 
     412                                    <string>infinite</string> 
     413                                </property> 
     414                            </item> 
     415                            <property name="name"> 
     416                                <cstring>peakhold_time_ctrl</cstring> 
     417                            </property> 
     418                            <property name="font"> 
     419                                <font> 
     420                                    <pointsize>9</pointsize> 
     421                                </font> 
     422                            </property> 
     423                        </widget> 
     424                    </vbox> 
     425                </widget> 
     426                <widget class="QGroupBox"> 
     427                    <property name="name"> 
     428                        <cstring>cliphold_time</cstring> 
     429                    </property> 
     430                    <property name="font"> 
     431                        <font> 
     432                            <pointsize>10</pointsize> 
     433                        </font> 
     434                    </property> 
     435                    <property name="frameShape"> 
     436                        <enum>NoFrame</enum> 
     437                    </property> 
     438                    <property name="title"> 
     439                        <string>Cliphold time</string> 
     440                    </property> 
     441                    <vbox> 
     442                        <property name="name"> 
     443                            <cstring>unnamed</cstring> 
     444                        </property> 
     445                        <widget class="QComboBox"> 
     446                            <item> 
     447                                <property name="text"> 
     448                                    <string>Off</string> 
     449                                </property> 
     450                            </item> 
     451                            <item> 
     452                                <property name="text"> 
     453                                    <string>2 sec</string> 
     454                                </property> 
     455                            </item> 
     456                            <item> 
     457                                <property name="text"> 
     458                                    <string>4 sec</string> 
     459                                </property> 
     460                            </item> 
     461                            <item> 
     462                                <property name="text"> 
     463                                    <string>10 sec</string> 
     464                                </property> 
     465                            </item> 
     466                            <item> 
     467                                <property name="text"> 
     468                                    <string>1 min</string> 
     469                                </property> 
     470                            </item> 
     471                            <item> 
     472                                <property name="text"> 
     473                                    <string>5 min</string> 
     474                                </property> 
     475                            </item> 
     476                            <item> 
     477                                <property name="text"> 
     478                                    <string>8 min</string> 
     479                                </property> 
     480                            </item> 
     481                            <item> 
     482                                <property name="text"> 
     483                                    <string>infinite</string> 
     484                                </property> 
     485                            </item> 
     486                            <property name="name"> 
     487                                <cstring>cliphold_time_ctrl</cstring> 
     488                            </property> 
     489                            <property name="font"> 
     490                                <font> 
     491                                    <pointsize>9</pointsize> 
     492                                </font> 
     493                            </property> 
     494                        </widget> 
     495                    </vbox> 
     496                </widget> 
    254497                <spacer> 
    255498                    <property name="name"> 
     
    265508                        <size> 
    266509                            <width>20</width> 
    267                             <height>321</height> 
     510                            <height>220</height> 
    268511                        </size> 
    269512                    </property>