Changeset 2443

Show
Ignore:
Timestamp:
10/27/13 20:28:16 (6 years ago)
Author:
mocchi
Message:

[BeBoB/AVDevice] add the functions to use processing function block command

A GUI mixer for BeBoB/MAudio device needs to execure 'Processing function block' command to control their internal mixer. For this purpose, bebob_avcdevice needs to execute the command.

Files:

Legend:

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

    r2440 r2443  
    484484} 
    485485 
     486bool 
     487Device::setProcessingFBMixerSingleCurrent(int id, int iPlugNum, 
     488                                    int iAChNum, int oAChNum, 
     489                                    int setting) 
     490{ 
     491        AVC::FunctionBlockCmd fbCmd(get1394Service(), 
     492                           AVC::FunctionBlockCmd::eFBT_Processing, 
     493                           id, 
     494                           AVC::FunctionBlockCmd::eCA_Current); 
     495    fbCmd.setNodeId(getNodeId()); 
     496    fbCmd.setSubunitId(0x00); 
     497    fbCmd.setCommandType(AVCCommand::eCT_Control); 
     498    fbCmd.setVerboseLevel( getDebugLevel() ); 
     499 
     500    AVC::FunctionBlockProcessing *fbp = fbCmd.m_pFBProcessing; 
     501    fbp->m_selectorLength = 0x04; 
     502    fbp->m_fbInputPlugNumber = iPlugNum; 
     503    fbp->m_inputAudioChannelNumber = iAChNum; 
     504    fbp->m_outputAudioChannelNumber = oAChNum; 
     505 
     506    // mixer object is not generated automatically 
     507    fbp->m_pMixer = new AVC::FunctionBlockProcessingMixer; 
     508    fbp->m_pMixer->m_mixerSetting = setting; 
     509 
     510    if ( !fbCmd.fire() ) { 
     511        debugError( "cmd failed\n" ); 
     512        return false; 
     513    } 
     514 
     515    if((fbCmd.getResponse() != AVCCommand::eR_Accepted)) { 
     516        debugWarning("fbCmd.getResponse() != AVCCommand::eR_Accepted\n"); 
     517    } 
     518 
     519    return (fbCmd.getResponse() == AVCCommand::eR_Accepted); 
     520} 
     521 
     522int 
     523Device::getProcessingFBMixerSingleCurrent(int id, int iPlugNum, 
     524                                    int iAChNum, int oAChNum) 
     525{ 
     526        AVC::FunctionBlockCmd fbCmd(get1394Service(), 
     527                           AVC::FunctionBlockCmd::eFBT_Processing, 
     528                           id, 
     529                           AVC::FunctionBlockCmd::eCA_Current); 
     530    fbCmd.setNodeId(getNodeId()); 
     531    fbCmd.setSubunitId(0x00); 
     532    fbCmd.setCommandType(AVCCommand::eCT_Status); 
     533    fbCmd.setVerboseLevel( getDebugLevel() ); 
     534 
     535    AVC::FunctionBlockProcessing *fbp = fbCmd.m_pFBProcessing; 
     536    fbp->m_selectorLength = 0x04; 
     537    fbp->m_fbInputPlugNumber = iPlugNum; 
     538    fbp->m_inputAudioChannelNumber = iAChNum; 
     539    fbp->m_outputAudioChannelNumber = oAChNum; 
     540 
     541    // mixer object is not generated automatically 
     542    fbp->m_pMixer = new AVC::FunctionBlockProcessingMixer; 
     543 
     544    if ( !fbCmd.fire() ) { 
     545        debugError( "cmd failed\n" ); 
     546        return 0; 
     547    } 
     548 
     549    if( (fbCmd.getResponse() != AVCCommand::eR_Implemented) ) { 
     550        debugWarning("fbCmd.getResponse() != AVCCommand::eR_Implemented\n"); 
     551    } 
     552 
     553    int16_t setting = (int16_t)(fbp->m_pMixer->m_mixerSetting); 
     554 
     555    return setting; 
     556} 
     557 
    486558void 
    487559Device::showDevice() 
  • trunk/libffado/src/bebob/bebob_avdevice.h

    r1543 r2443  
    9696    virtual bool setFeatureFBLRBalanceCurrent(int id, int channel, int v); 
    9797 
     98    virtual bool setProcessingFBMixerSingleCurrent(int id, int iPlugNum, 
     99                                                   int iAChNum, int oAChNum, 
     100                                                   int setting); 
     101    virtual int  getProcessingFBMixerSingleCurrent(int id, int iPlugNum, 
     102                                                   int iAChNum, int oAChNum); 
     103 
    98104    virtual void showDevice(); 
    99105    virtual void setVerboseLevel(int l);