Changeset 1749
- Timestamp:
- 12/07/09 04:03:36 (13 years ago)
- Files:
-
- trunk/libffado/src/libstreaming/rme/RmeReceiveStreamProcessor.cpp (modified) (1 diff)
- trunk/libffado/src/libstreaming/rme/RmeTransmitStreamProcessor.cpp (modified) (4 diffs)
- trunk/libffado/src/rme/rme_avdevice.cpp (modified) (3 diffs)
- trunk/libffado/src/rme/rme_avdevice.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libffado/src/libstreaming/rme/RmeReceiveStreamProcessor.cpp
r1688 r1749 120 120 // from an RME. For now the only condition seems to be a tag of 0. 121 121 // 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 // } 125 125 126 126 // Timestamps are not transmitted explicitly by the RME interfaces trunk/libffado/src/libstreaming/rme/RmeTransmitStreamProcessor.cpp
r1674 r1749 44 44 #include "libutil/ByteSwap.h" 45 45 46 // This is to pick up the RME_MODEL_* constants. There's probably a better47 // way ...48 46 #include "../../rme/rme_avdevice.h" 49 47 … … 92 90 unsigned int 93 91 RmeTransmitStreamProcessor::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; 97 95 } 98 96 99 97 unsigned int 100 98 RmeTransmitStreamProcessor::getNominalFramesPerPacket() { 101 // int framerate = m_Parent.getDeviceManager().getStreamProcessorManager().getNominalRate(); 102 /* FIXME */ 103 return 0; 99 return static_cast<Rme::Device *>(&m_Parent)->getFramesPerPacket(); 104 100 } 105 101 … … 313 309 // no audio data. 314 310 *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 ); 318 326 return eCRV_OK; 319 327 } … … 323 331 unsigned char *data, unsigned int *length) 324 332 { 333 /* If dry-running data is being sent, zero the data */ 334 if (*length > 0) { 335 memset(data, *length, 0); 336 } 325 337 return eCRV_OK; // no need to do anything 326 338 } trunk/libffado/src/rme/rme_avdevice.cpp
r1746 r1749 532 532 } 533 533 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(); 543 535 544 536 // The number of active channels depends on sample rate and whether … … 700 692 int 701 693 Device::getStreamCount() { 702 // Only rx implemented at present 703 return 1; // one receive, one transmit 694 return 2; // one receive, one transmit 704 695 } 705 696 … … 743 734 } 744 735 736 signed int 737 Device::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 745 751 unsigned int 746 752 Device::readRegister(fb_nodeaddr_t reg) { trunk/libffado/src/rme/rme_avdevice.h
r1697 r1749 89 89 virtual bool startStreamByIndex(int i); 90 90 virtual bool stopStreamByIndex(int i); 91 92 signed int getNumChannels(void) { return num_channels; }; 93 signed int getFramesPerPacket(void); 91 94 92 95 unsigned int readRegister(fb_nodeaddr_t reg);