Changeset 965

Show
Ignore:
Timestamp:
03/22/08 11:33:29 (13 years ago)
Author:
ppalmers
Message:

add generic register read for focusrite devices

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/src/bebob/focusrite/focusrite_generic.cpp

    r864 r965  
    278278} 
    279279 
    280  
    281280bool 
    282281VolumeControl::setValue(int v) 
     
    305304        debugOutput(DEBUG_LEVEL_VERBOSE, "getValue for %d = %d\n",  
    306305                                         m_cmd_id, val); 
     306        return val; 
     307    } 
     308} 
     309 
     310// reg control 
     311RegisterControl::RegisterControl(FocusriteDevice& parent) 
     312: Control::Register() 
     313, m_Parent(parent) 
     314{} 
     315RegisterControl::RegisterControl(FocusriteDevice& parent, 
     316                 std::string name, std::string label, std::string descr) 
     317: Control::Register() 
     318, m_Parent(parent) 
     319{ 
     320    setName(name); 
     321    setLabel(label); 
     322    setDescription(descr); 
     323} 
     324 
     325bool 
     326RegisterControl::setValue(uint64_t addr, uint64_t v) 
     327{ 
     328    debugOutput(DEBUG_LEVEL_VERBOSE, "setValue for addr %llu to %llu\n", 
     329                                     addr, v); 
     330 
     331    if ( !m_Parent.setSpecificValue(addr, v) ) { 
     332        debugError( "setSpecificValue failed\n" ); 
     333        return false; 
     334    } else return true; 
     335} 
     336 
     337uint64_t 
     338RegisterControl::getValue(uint64_t addr) 
     339{ 
     340    uint32_t val=0; 
     341 
     342    if ( !m_Parent.getSpecificValue(addr, &val) ) { 
     343        debugError( "getSpecificValue failed\n" ); 
     344        return 0; 
     345    } else { 
     346        debugOutput(DEBUG_LEVEL_VERBOSE, "getValue for %llu = %lu\n",  
     347                                         addr, val); 
    307348        return val; 
    308349    } 
     
    328369} 
    329370 
    330  
    331371bool 
    332372VolumeControlLowRes::setValue(int v) 
     
    374414 
    375415// Saffire pro matrix mixer element 
    376  
    377416FocusriteMatrixMixer::FocusriteMatrixMixer(FocusriteDevice& p) 
    378417: Control::MatrixMixer("MatrixMixer") 
  • trunk/libffado/src/bebob/focusrite/focusrite_generic.h

    r864 r965  
    7070    FocusriteDevice&        m_Parent; 
    7171    unsigned int            m_cmd_id; 
     72}; 
     73 
     74class RegisterControl 
     75    : public Control::Register 
     76{ 
     77public: 
     78    RegisterControl(FocusriteDevice& parent); 
     79    RegisterControl(FocusriteDevice& parent, 
     80                    std::string name, std::string label, std::string descr); 
     81 
     82    virtual bool setValue(uint64_t addr, uint64_t value); 
     83    virtual uint64_t getValue(uint64_t addr); 
     84 
     85private: 
     86    FocusriteDevice&        m_Parent; 
    7287}; 
    7388 
  • trunk/libffado/src/bebob/focusrite/focusrite_saffire.cpp

    r945 r965  
    3030SaffireDevice::SaffireDevice( DeviceManager& d, std::auto_ptr<ConfigRom>( configRom )) 
    3131    : FocusriteDevice( d, configRom) 
     32    , m_MixerContainer( NULL ) 
    3233{ 
    3334    debugOutput( DEBUG_LEVEL_VERBOSE, "Created BeBoB::Focusrite::SaffireDevice (NodeID %d)\n", 
     
    205206        debugWarning("Could not register mixer to device\n"); 
    206207        // clean up 
     208        destroyMixer(); 
     209        return false; 
     210    } 
     211 
     212    // add a direct register access element 
     213    if (!addElement(new RegisterControl(*this, "Register", "Register Access", "Direct register access"))) { 
     214        debugWarning("Could not create register control element."); 
     215        // clean up those that couldn't be created 
    207216        destroyMixer(); 
    208217        return false; 
  • trunk/libffado/src/libcontrol/BasicElements.h

    r958 r965  
    9595 
    9696/*! 
     97@brief Base class for register access control elements 
     98*/ 
     99class Register 
     100: public Element 
     101{ 
     102public: 
     103    Register() : Element() {}; 
     104    Register(std::string n) : Element(n) {}; 
     105    virtual ~Register() {}; 
     106 
     107    virtual bool setValue(uint64_t addr, uint64_t value) = 0; 
     108    virtual uint64_t getValue(uint64_t addr) = 0; 
     109private: 
     110}; 
     111 
     112/*! 
    97113@brief Base class for basic enumerated control elements 
    98114*/ 
  • trunk/libffado/support/dbus/control-interface.xml

    r958 r965  
    7272      <method name="getValue"> 
    7373          <arg type="s" name="value" direction="out"/> 
     74      </method> 
     75  </interface> 
     76 
     77  <interface name="org.ffado.Control.Element.Register"> 
     78      <method name="setValue"> 
     79          <arg type="t" name="address" direction="in"/> 
     80          <arg type="t" name="value" direction="in"/> 
     81          <arg type="t" name="value" direction="out"/> 
     82      </method> 
     83      <method name="getValue"> 
     84          <arg type="t" name="address" direction="in"/> 
     85          <arg type="t" name="value" direction="out"/> 
    7486      </method> 
    7587  </interface> 
  • trunk/libffado/support/dbus/controlserver.cpp

    r958 r965  
    147147    } 
    148148 
     149    if (dynamic_cast<Control::Register *>(&e) != NULL) { 
     150        debugOutput( DEBUG_LEVEL_VERBOSE, "Source is a Control::Register\n"); 
     151         
     152        return new Register(conn(), std::string(path()+"/"+e.getName()), 
     153            *dynamic_cast<Control::Register *>(&e)); 
     154    } 
     155 
    149156    // note that we have to check this before checking the Enum, 
    150157    // since Enum is a base class 
     
    207214Continuous::getValue(  ) 
    208215{ 
    209     debugOutput( DEBUG_LEVEL_VERBOSE, "getValue() => %lf\n", m_Slave.getValue() ); 
    210     return m_Slave.getValue(); 
     216    double val = m_Slave.getValue(); 
     217    debugOutput( DEBUG_LEVEL_VERBOSE, "getValue() => %lf\n", val ); 
     218    return val; 
    211219} 
    212220 
     
    236244Discrete::getValue() 
    237245{ 
    238     debugOutput( DEBUG_LEVEL_VERBOSE, "getValue() => %d\n", m_Slave.getValue() ); 
    239     return m_Slave.getValue(); 
     246    int32_t val = m_Slave.getValue(); 
     247    debugOutput( DEBUG_LEVEL_VERBOSE, "getValue() => %d\n", val ); 
     248    return val; 
    240249} 
    241250 
     
    265274Text::getValue() 
    266275{ 
    267     debugOutput( DEBUG_LEVEL_VERBOSE, "getValue() => %s\n", m_Slave.getValue().c_str() ); 
    268     return m_Slave.getValue(); 
    269 
    270  
     276    std::string val = m_Slave.getValue(); 
     277    debugOutput( DEBUG_LEVEL_VERBOSE, "getValue() => %s\n", val.c_str() ); 
     278    return val; 
     279
     280 
     281// --- Register 
     282 
     283Register::Register( DBus::Connection& connection, std::string p, Control::Register &slave) 
     284: Element(connection, p, slave) 
     285, m_Slave(slave) 
     286
     287    debugOutput( DEBUG_LEVEL_VERBOSE, "Created Register on '%s'\n", 
     288                 path().c_str() ); 
     289
     290 
     291DBus::UInt64 
     292Register::setValue( const DBus::UInt64& addr, const DBus::UInt64& value ) 
     293
     294    m_Slave.setValue(addr, value); 
     295     
     296/*    SleepRelativeUsec(1000*500); 
     297    debugOutput( DEBUG_LEVEL_VERBOSE, "setValue(%d) => %d\n", value, m_Slave.getValue() ); 
     298     
     299    return m_Slave.getValue();*/ 
     300    return value; 
     301
     302 
     303DBus::UInt64 
     304Register::getValue( const DBus::UInt64& addr ) 
     305
     306    DBus::UInt64 val = m_Slave.getValue(addr); 
     307    debugOutput( DEBUG_LEVEL_VERBOSE, "getValue(%lld) => %lld\n", addr, val ); 
     308    return val; 
     309
    271310 
    272311// --- Enum 
  • trunk/libffado/support/dbus/controlserver.h

    r958 r965  
    132132private: 
    133133    Control::Text &m_Slave; 
     134}; 
     135 
     136class Register 
     137: public org::ffado::Control::Element::Register 
     138, public Element 
     139{ 
     140public: 
     141    Register( DBus::Connection& connection, 
     142              std::string p, 
     143              Control::Register &slave ); 
     144     
     145    DBus::UInt64 setValue( const DBus::UInt64 & addr, const DBus::UInt64 & value ); 
     146    DBus::UInt64 getValue( const DBus::UInt64 & addr ); 
     147 
     148private: 
     149    Control::Register &m_Slave; 
    134150}; 
    135151