Changeset 1605

Show
Ignore:
Timestamp:
07/23/09 04:57:42 (14 years ago)
Author:
jwoithe
Message:

RME: implement the beginnings of a device control interface via the ffado dbus framework.
MOTU: fix error handling code paths in buildMixer() and destroyMixer().

Files:

Legend:

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

    r1531 r1605  
    827827MotuDevice::buildMixer() { 
    828828    bool result = true; 
     829 
     830    destroyMixer(); 
    829831    debugOutput(DEBUG_LEVEL_VERBOSE, "Building a MOTU mixer...\n"); 
    830832 
    831     destroyMixer(); 
    832          
    833833    // create the mixer object container 
    834834    m_MixerContainer = new Control::Container(this, "Mixer"); 
     
    862862    if (!m_ControlContainer) { 
    863863        debugError("Could not create control container...\n"); 
     864        destroyMixer(); 
    864865        return false; 
    865866    } 
     
    868869 
    869870    if (!result) { 
    870         debugWarning("One or more device control elements could not be created."); 
     871        debugWarning("One or more device control elements could not be created\n"); 
    871872        // clean up those that couldn't be created 
    872873        destroyMixer(); 
     
    886887bool 
    887888MotuDevice::destroyMixer() { 
     889    bool ret = true; 
    888890    debugOutput(DEBUG_LEVEL_VERBOSE, "destroy mixer...\n"); 
    889891 
    890892    if (m_MixerContainer == NULL) { 
    891893        debugOutput(DEBUG_LEVEL_VERBOSE, "no mixer to destroy...\n"); 
    892         return true; 
    893     } 
    894      
     894    } else 
    895895    if (!deleteElement(m_MixerContainer)) { 
    896896        debugError("Mixer present but not registered to the avdevice\n"); 
    897         return false; 
    898     } 
    899  
    900     // remove and delete (as in free) child control elements 
    901     m_MixerContainer->clearElements(true)
    902     delete m_MixerContainer
    903     m_MixerContainer = NULL; 
     897        ret = false; 
     898    } else { 
     899        // remove and delete (as in free) child control elements 
     900        m_MixerContainer->clearElements(true); 
     901        delete m_MixerContainer
     902        m_MixerContainer = NULL
     903    } 
    904904 
    905905    // remove control container 
    906906    if (m_ControlContainer == NULL) { 
    907907        debugOutput(DEBUG_LEVEL_VERBOSE, "no controls to destroy...\n"); 
    908         return true; 
    909     } 
    910      
     908    } else 
    911909    if (!deleteElement(m_ControlContainer)) { 
    912910        debugError("Controls present but not registered to the avdevice\n"); 
    913         return false; 
    914     } 
    915      
    916     // remove and delete (as in free) child control elements 
    917     m_ControlContainer->clearElements(true); 
    918     delete m_ControlContainer; 
    919     m_ControlContainer = NULL; 
    920  
    921     return true; 
     911        ret = false; 
     912    } else { 
     913        // remove and delete (as in free) child control elements 
     914        m_ControlContainer->clearElements(true); 
     915        delete m_ControlContainer; 
     916        m_ControlContainer = NULL; 
     917    } 
     918    return ret; 
    922919} 
    923920 
  • trunk/libffado/src/rme/fireface_settings_ctrls.h

    r1600 r1605  
    6060    virtual int getValue(); 
    6161 
     62    virtual bool setValue(int idx, int v) { return setValue(v); }; 
     63    virtual int getValue(int idx) { return getValue(); }; 
     64    virtual int getMinimum() {return 0; }; 
     65    virtual int getMaximum() {return 0; }; 
     66 
    6267protected: 
    6368    Device &m_parent; 
  • trunk/libffado/src/rme/rme_avdevice.cpp

    r1604 r1605  
    2727#include "rme/rme_avdevice.h" 
    2828#include "rme/fireface_def.h" 
     29#include "rme/fireface_settings_ctrls.h" 
    2930 
    3031#include "libieee1394/configrom.h" 
     
    9596Device::~Device() 
    9697{ 
    97  
     98    destroyMixer(); 
     99
     100 
     101bool 
     102Device::buildMixer() { 
     103    bool result = true; 
     104 
     105    destroyMixer(); 
     106    debugOutput(DEBUG_LEVEL_VERBOSE, "Building an RME mixer...\n"); 
     107 
     108 
     109    // Non-mixer device controls 
     110    m_ControlContainer = new Control::Container(this, "Control"); 
     111    if (!m_ControlContainer) { 
     112        debugError("Could not create control container\n"); 
     113        destroyMixer(); 
     114        return false; 
     115    } 
     116 
     117    result &= m_ControlContainer->addElement( 
     118        new RmeSettingsCtrl(*this, RME_CTRL_PHANTOM_SW, 0, 
     119            "Phantom", "Phantom switches", "")); 
     120 
     121    if (!result) { 
     122        debugWarning("One or more device control elements could not be created\n"); 
     123        destroyMixer(); 
     124        return false; 
     125    } 
     126 
     127    if (!addElement(m_ControlContainer)) { 
     128        debugWarning("Could not register mixer to device\n"); 
     129        // clean up 
     130        destroyMixer(); 
     131        return false; 
     132    } 
     133 
     134    return true; 
     135
     136 
     137bool 
     138Device::destroyMixer() { 
     139    bool ret = true; 
     140    debugOutput(DEBUG_LEVEL_VERBOSE, "destroy mixer...\n"); 
     141 
     142    if (m_MixerContainer == NULL) { 
     143        debugOutput(DEBUG_LEVEL_VERBOSE, "no mixer to destroy...\n"); 
     144    } else 
     145    if (!deleteElement(m_MixerContainer)) { 
     146        debugError("Mixer present but not registered to the avdevice\n"); 
     147        ret = false; 
     148    } else { 
     149        // remove and delete (as in free) child control elements 
     150        m_MixerContainer->clearElements(true); 
     151        delete m_MixerContainer; 
     152        m_MixerContainer = NULL; 
     153    } 
     154 
     155    // remove control container 
     156    if (m_ControlContainer == NULL) { 
     157        debugOutput(DEBUG_LEVEL_VERBOSE, "no controls to destroy...\n"); 
     158    } else 
     159    if (!deleteElement(m_ControlContainer)) { 
     160        debugError("Controls present but not registered to the avdevice\n"); 
     161        ret = false; 
     162    } else { 
     163        // remove and delete (as in free) child control elements 
     164        m_ControlContainer->clearElements(true); 
     165        delete m_ControlContainer; 
     166        m_ControlContainer = NULL; 
     167    } 
     168 
     169    return false; 
    98170} 
    99171 
     
    163235 
    164236    init_hardware(); 
     237 
     238    if (!buildMixer()) { 
     239        debugWarning("Could not build mixer\n"); 
     240    } 
    165241 
    166242    // This is just for testing 
  • trunk/libffado/src/rme/rme_avdevice.h

    r1600 r1605  
    5656               std::auto_ptr<ConfigRom>( configRom )); 
    5757    virtual ~Device(); 
     58 
     59    virtual bool buildMixer(); 
     60    virtual bool destroyMixer(); 
    5861 
    5962    static bool probe( Util::Configuration& c, ConfigRom& configRom, bool generic = false ); 
     
    150153    signed int hardware_start_streaming(unsigned int listen_channel); 
    151154    signed int hardware_stop_streaming(void); 
     155 
     156    Control::Container *m_MixerContainer; 
     157    Control::Container *m_ControlContainer; 
    152158}; 
    153159