Changeset 1749

Show
Ignore:
Timestamp:
12/07/09 04:03:36 (13 years ago)
Author:
jwoithe
Message:

RME:
- minor code clean-up to avoid unnecessary duplication
- crudely make the RME device start streaming data (now it just needs to be controlled)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/src/libstreaming/rme/RmeReceiveStreamProcessor.cpp

    r1688 r1749  
    120120        // from an RME.  For now the only condition seems to be a tag of 0. 
    121121        // This will be fleshed out in due course. 
    122         if (tag!=1) { 
    123             return eCRV_Invalid; 
    124         } 
     122//        if (tag!=1) { 
     123//            return eCRV_Invalid; 
     124//        } 
    125125 
    126126        // Timestamps are not transmitted explicitly by the RME interfaces 
  • trunk/libffado/src/libstreaming/rme/RmeTransmitStreamProcessor.cpp

    r1674 r1749  
    4444#include "libutil/ByteSwap.h" 
    4545 
    46 // This is to pick up the RME_MODEL_* constants.  There's probably a better 
    47 // way ... 
    4846#include "../../rme/rme_avdevice.h" 
    4947 
     
    9290unsigned int 
    9391RmeTransmitStreamProcessor::getMaxPacketSize() { 
    94 //    int framerate = m_Parent.getDeviceManager().getStreamProcessorManager().getNominalRate(); 
    95     /* FIXME */ 
    96     return 0
     92    Rme::Device *dev = static_cast<Rme::Device *>(&m_Parent); 
     93    /* Each channel comprises a single 32-bit quadlet.  Note return value is in bytes. */ 
     94    return dev->getFramesPerPacket() * dev->getNumChannels() * 4
    9795} 
    9896 
    9997unsigned int 
    10098RmeTransmitStreamProcessor::getNominalFramesPerPacket() { 
    101 //    int framerate = m_Parent.getDeviceManager().getStreamProcessorManager().getNominalRate(); 
    102     /* FIXME */ 
    103     return 0; 
     99    return static_cast<Rme::Device *>(&m_Parent)->getFramesPerPacket(); 
    104100} 
    105101 
     
    313309    // no audio data. 
    314310    *sy = 0x00; 
    315     *length = 8; 
    316  
    317     m_tx_dbc += fillNoDataPacketHeader ( (quadlet_t *)data, length ); 
     311    *length = 0; 
     312 
     313    // During the dryRunning state used during startup FFADO will request 
     314    // "empty" packets.  However, the fireface will only "start" (ie: 
     315    // sending data to the DACs and sending data from the ADCs)  
     316    // packets once it has received a certain amount of data from the PC. 
     317    // Since the receive stream processor won't register as dry running  
     318    // until data is received, we therefore need to send some data during 
     319    // the dry running state in order to kick the process into gear. 
     320    if (isDryRunning()) { 
     321//        unsigned int cycle = CYCLE_TIMER_GET_CYCLES(pkt_ctr); 
     322        *length = getMaxPacketSize(); 
     323    } 
     324 
     325//    m_tx_dbc += fillNoDataPacketHeader ( (quadlet_t *)data, length ); 
    318326    return eCRV_OK; 
    319327} 
     
    323331    unsigned char *data, unsigned int *length) 
    324332{ 
     333    /* If dry-running data is being sent, zero the data */ 
     334    if (*length > 0) { 
     335        memset(data, *length, 0); 
     336    } 
    325337    return eCRV_OK; // no need to do anything 
    326338} 
  • trunk/libffado/src/rme/rme_avdevice.cpp

    r1746 r1749  
    532532    } 
    533533 
    534     // The number of frames transmitted in a single packet is solely 
    535     // determined by the sample rate. 
    536     mult = multiplier_of_freq(freq); 
    537     switch (mult) { 
    538         case 2: frames_per_packet = 15; break; 
    539         case 4: frames_per_packet = 25; break; 
    540     default: 
    541         frames_per_packet = 7; 
    542     } 
     534    frames_per_packet = getFramesPerPacket(); 
    543535 
    544536    // The number of active channels depends on sample rate and whether 
     
    700692int 
    701693Device::getStreamCount() { 
    702 // Only rx implemented at present 
    703         return 1; // one receive, one transmit 
     694    return 2; // one receive, one transmit 
    704695} 
    705696 
     
    743734} 
    744735 
     736signed int 
     737Device::getFramesPerPacket(void) { 
     738    // The number of frames transmitted in a single packet is solely 
     739    // determined by the sample rate. 
     740    signed int freq = getSamplingFrequency(); 
     741    signed int mult = multiplier_of_freq(freq); 
     742    switch (mult) { 
     743        case 2: return 15; 
     744        case 4: return 25; 
     745    default: 
     746        return 7; 
     747    } 
     748    return 7; 
     749} 
     750 
    745751unsigned int  
    746752Device::readRegister(fb_nodeaddr_t reg) { 
  • trunk/libffado/src/rme/rme_avdevice.h

    r1697 r1749  
    8989    virtual bool startStreamByIndex(int i); 
    9090    virtual bool stopStreamByIndex(int i); 
     91 
     92    signed int getNumChannels(void) { return num_channels; }; 
     93    signed int getFramesPerPacket(void); 
    9194 
    9295    unsigned int readRegister(fb_nodeaddr_t reg);