Changeset 201
- Timestamp:
- 05/19/06 01:36:34 (18 years ago)
- Files:
-
- branches/libfreebob-2.0/src/libstreaming/IsoHandler.cpp (modified) (5 diffs)
- branches/libfreebob-2.0/src/libstreaming/IsoHandler.h (modified) (7 diffs)
- branches/libfreebob-2.0/src/libstreaming/IsoStream.cpp (modified) (4 diffs)
- branches/libfreebob-2.0/src/libstreaming/IsoStream.h (modified) (5 diffs)
- branches/libfreebob-2.0/src/libstreaming/IsoStreamManager.cpp (modified) (3 diffs)
- branches/libfreebob-2.0/src/libstreaming/IsoStreamManager.h (modified) (2 diffs)
- branches/libfreebob-2.0/src/libstreaming/Makefile.am (modified) (1 diff)
- branches/libfreebob-2.0/src/libstreaming/messagebuffer.h (modified) (2 diffs)
- branches/libfreebob-2.0/src/libstreaming/PacketBuffer.cpp (added)
- branches/libfreebob-2.0/src/libstreaming/PacketBuffer.h (added)
- branches/libfreebob-2.0/src/libstreaming/Receiver.cpp (modified) (1 diff)
- branches/libfreebob-2.0/src/libstreaming/Receiver.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/libfreebob-2.0/src/libstreaming/IsoHandler.cpp
r200 r201 137 137 "received packet: length=%d, channel=%d, cycle=%d\n", 138 138 length, channel, cycle ); 139 m_packetcount++; 140 141 if(m_Client) { 142 if(m_Client->putPacket(data, length, channel, tag, sy, cycle, dropped)) { 143 // return RAW1394_ISO_AGAIN; 144 } 145 } 139 146 140 147 return RAW1394_ISO_OK; 141 148 } 142 149 143 int IsoRecvHandler::registerStream(Iso RecvStream *stream)150 int IsoRecvHandler::registerStream(IsoStream *stream) 144 151 { 145 152 assert(stream); … … 167 174 } 168 175 169 int IsoRecvHandler::unregisterStream(Iso RecvStream *stream)176 int IsoRecvHandler::unregisterStream(IsoStream *stream) 170 177 { 171 178 assert(stream); … … 255 262 "sending packet: length=%d, cycle=%d\n", 256 263 *length, cycle ); 264 m_packetcount++; 265 257 266 if(m_Client) { 258 if(m_Client->getPacket(data, length, tag, sy, cycle, dropped )) {267 if(m_Client->getPacket(data, length, tag, sy, cycle, dropped, m_max_packet_size)) { 259 268 // return RAW1394_ISO_AGAIN; 260 269 } … … 265 274 266 275 // an xmit handler can have only one source IsoStream 267 int IsoXmitHandler::registerStream(Iso XmitStream *stream)276 int IsoXmitHandler::registerStream(IsoStream *stream) 268 277 { 269 278 assert(stream); … … 292 301 } 293 302 294 int IsoXmitHandler::unregisterStream(Iso XmitStream *stream)303 int IsoXmitHandler::unregisterStream(IsoStream *stream) 295 304 { 296 305 assert(stream); branches/libfreebob-2.0/src/libstreaming/IsoHandler.h
r200 r201 39 39 40 40 class IsoStream; 41 class IsoXmitStream;42 class IsoRecvStream;43 44 typedef std::vector<IsoStream *> IsoStreamVector;45 typedef std::vector<IsoStream *>::iterator IsoStreamVectorIterator;46 typedef std::vector<IsoXmitStream *> IsoXmitStreamVector;47 typedef std::vector<IsoXmitStream *>::iterator IsoXmitStreamVectorIterator;48 typedef std::vector<IsoRecvStream *> IsoRecvStreamVector;49 typedef std::vector<IsoRecvStream *>::iterator IsoRecvStreamVectorIterator;50 41 51 42 /*! … … 71 62 IsoHandler(int port) 72 63 : m_handle(0), m_port(port), 73 m_buf_packets(400), m_max_packet_size(1024), m_irq_interval(-1) 64 m_buf_packets(400), m_max_packet_size(1024), m_irq_interval(-1), m_packetcount(0) 74 65 {} 75 66 76 67 IsoHandler(int port, unsigned int buf_packets, unsigned int max_packet_size, int irq) 77 68 : m_handle(0), m_port(port), 78 m_buf_packets(buf_packets), m_max_packet_size( max_packet_size), m_irq_interval(irq) 69 m_buf_packets(buf_packets), m_max_packet_size( max_packet_size), m_irq_interval(irq), 70 m_packetcount(0) 79 71 {} 80 72 … … 92 84 int getWakeupInterval() { return m_irq_interval;}; 93 85 86 int getPacketCount() {return m_packetcount;}; 87 void resetPacketCount() {m_packetcount=0;}; 88 94 89 virtual enum EHandlerType getType() = 0; 95 90 96 91 virtual int start(int cycle) = 0; 97 92 void stop(); 98 int getFileDescriptor() { r aw1394_get_fd(m_handle);};93 int getFileDescriptor() { return raw1394_get_fd(m_handle);}; 99 94 100 95 protected: … … 104 99 unsigned int m_max_packet_size; 105 100 int m_irq_interval; 101 102 int m_packetcount; 106 103 107 104 DECLARE_DEBUG_MODULE; … … 129 126 enum EHandlerType getType() { return EHT_Receive;}; 130 127 131 int registerStream(Iso RecvStream *);132 int unregisterStream(Iso RecvStream *);128 int registerStream(IsoStream *); 129 int unregisterStream(IsoStream *); 133 130 134 131 int start(int cycle); 135 132 136 133 private: 137 Iso RecvStream *m_Client;134 IsoStream *m_Client; 138 135 139 136 static enum raw1394_iso_disposition … … 169 166 enum EHandlerType getType() { return EHT_Transmit;}; 170 167 171 int registerStream(Iso XmitStream *);172 int unregisterStream(Iso XmitStream *);168 int registerStream(IsoStream *); 169 int unregisterStream(IsoStream *); 173 170 174 171 unsigned int getPreBuffers() {return m_prebuffers;}; … … 178 175 179 176 private: 180 Iso XmitStream *m_Client;177 IsoStream *m_Client; 181 178 182 179 static enum raw1394_iso_disposition iso_transmit_handler(raw1394handle_t handle, branches/libfreebob-2.0/src/libstreaming/IsoStream.cpp
r200 r201 28 28 29 29 #include "IsoStream.h" 30 #include "PacketBuffer.h" 30 31 31 32 namespace FreebobStreaming … … 33 34 34 35 IMPL_DEBUG_MODULE( IsoStream, IsoStream, DEBUG_LEVEL_NORMAL ); 36 IMPL_DEBUG_MODULE( IsoStreamBuffered, IsoStreamBuffered, DEBUG_LEVEL_NORMAL ); 35 37 36 IsoRecvStream::IsoRecvStream(int channel) 37 : IsoStream(channel) 38 { 39 40 } 41 42 IsoRecvStream::~IsoRecvStream() 43 { 44 45 } 46 47 int IsoRecvStream::putPacket(unsigned char *data, unsigned int length, 38 int IsoStream::putPacket(unsigned char *data, unsigned int length, 48 39 unsigned char channel, unsigned char tag, unsigned char sy, 49 40 unsigned int cycle, unsigned int dropped) { … … 53 44 length, channel, cycle ); 54 45 55 m_packetcount++;56 57 58 46 return 0; 59 47 } 60 48 61 IsoXmitStream::IsoXmitStream(int channel) 62 : IsoStream(channel) 63 { 64 65 } 66 67 IsoXmitStream::~IsoXmitStream() 68 { 69 70 } 71 72 int IsoXmitStream::getPacket(unsigned char *data, unsigned int *length, 49 int IsoStream::getPacket(unsigned char *data, unsigned int *length, 73 50 unsigned char *tag, unsigned char *sy, 74 int cycle, unsigned int dropped ) {51 int cycle, unsigned int dropped, unsigned int max_length) { 75 52 debugOutput( DEBUG_LEVEL_VERY_VERBOSE, 76 53 "sending packet: length=%d, cycle=%d\n", … … 82 59 *sy = 0; 83 60 84 m_packetcount++;85 61 86 62 return 0; 87 63 } 88 64 65 /* buffered variant of the ISO stream */ 66 IsoStreamBuffered::~IsoStreamBuffered() { 67 debugOutput( DEBUG_LEVEL_VERBOSE, "enter...\n"); 68 if(buffer) delete buffer; 69 89 70 } 71 72 int IsoStreamBuffered::initialize() { 73 debugOutput( DEBUG_LEVEL_VERBOSE, "enter...\n"); 74 buffer=new PacketBuffer(m_headersize, m_buffersize, m_max_packetsize); 75 76 if(buffer==NULL) return -1; 77 78 return buffer->initialize(); 79 80 } 81 82 int IsoStreamBuffered::putPacket(unsigned char *data, unsigned int length, 83 unsigned char channel, unsigned char tag, unsigned char sy, 84 unsigned int cycle, unsigned int dropped) { 85 int retval; 86 87 debugOutput( DEBUG_LEVEL_VERY_VERBOSE, 88 "received packet: length=%d, channel=%d, cycle=%d\n", 89 length, channel, cycle ); 90 if(buffer) { 91 if((retval=buffer->addPacket((quadlet_t *)data,length))) { 92 debugWarning("Receive buffer overflow\n"); 93 } 94 } 95 96 return 0; 97 } 98 99 int IsoStreamBuffered::getPacket(unsigned char *data, unsigned int *length, 100 unsigned char *tag, unsigned char *sy, 101 int cycle, unsigned int dropped, unsigned int max_length) { 102 debugOutput( DEBUG_LEVEL_VERY_VERBOSE, 103 "sending packet: length=%d, cycle=%d\n", 104 *length, cycle ); 105 106 int retval; 107 *length=sizeof(cycle); 108 *tag = 1; 109 *sy = 0; 110 111 if(buffer) { 112 if((retval=buffer->getNextPacket((quadlet_t *)data,max_length))<0) { 113 debugWarning("Transmit buffer underflow: %d\n",retval); 114 return -1; 115 } 116 *length=retval; 117 } 118 119 return 0; 120 } 121 122 int IsoStreamBuffered::getBufferFillPackets() { 123 124 if(buffer) return buffer->getBufferFillPackets(); 125 return -1; 126 127 } 128 int IsoStreamBuffered::getBufferFillPayload() { 129 130 if(buffer) return buffer->getBufferFillPayload(); 131 return -1; 132 133 } 134 135 void IsoStreamBuffered::setVerboseLevel(int l) { 136 setDebugLevel( l ); 137 if(buffer) { 138 buffer->setVerboseLevel(l); 139 } 140 } 141 142 } branches/libfreebob-2.0/src/libstreaming/IsoStream.h
r200 r201 35 35 { 36 36 37 class PacketBuffer; 38 37 39 /*! 38 40 \brief The Base Class for ISO streams … … 49 51 }; 50 52 51 52 IsoStream(int channel) : m_Channel(channel), m_packetcount(0) 53 IsoStream(enum EStreamType type, int channel) : m_type(type), m_Channel(channel) 53 54 {}; 54 55 virtual ~IsoStream() … … 58 59 59 60 int getChannel() {return m_Channel;}; 60 int getPacketCount() {return m_packetcount;}; 61 void resetPacketCount() {m_packetcount=0;}; 61 62 enum EStreamType getType() { return m_type;}; 63 64 int initialize() {return 0;}; 65 66 int 67 putPacket(unsigned char *data, unsigned int length, 68 unsigned char channel, unsigned char tag, unsigned char sy, 69 unsigned int cycle, unsigned int dropped); 70 int 71 getPacket(unsigned char *data, unsigned int *length, 72 unsigned char *tag, unsigned char *sy, 73 int cycle, unsigned int dropped, unsigned int max_length); 62 74 63 75 protected: 76 enum EStreamType m_type; 64 77 int m_Channel; 65 66 int m_packetcount;67 78 68 79 DECLARE_DEBUG_MODULE; … … 70 81 }; 71 82 72 class Iso RecvStream: public IsoStream83 class IsoStreamBuffered : public IsoStream 73 84 { 74 public:75 IsoRecvStream(int);76 virtual ~IsoRecvStream();77 85 78 virtual enum EStreamType getType() { return EST_Receive;}; 86 public: 87 88 IsoStreamBuffered(int headersize,int buffersize, int max_packetsize, enum EStreamType type, int channel) 89 : IsoStream(type,channel), m_headersize(headersize), m_buffersize(buffersize), m_max_packetsize(max_packetsize), buffer(0) 90 {}; 91 virtual ~IsoStreamBuffered(); 92 93 void setVerboseLevel(int l); 94 95 int initialize(); 79 96 80 97 int … … 82 99 unsigned char channel, unsigned char tag, unsigned char sy, 83 100 unsigned int cycle, unsigned int dropped); 84 85 private:86 87 };88 89 class IsoXmitStream : public IsoStream90 {91 92 public:93 IsoXmitStream(int);94 virtual ~IsoXmitStream();95 96 virtual enum EStreamType getType() { return EST_Transmit;};97 101 int 98 102 getPacket(unsigned char *data, unsigned int *length, 99 103 unsigned char *tag, unsigned char *sy, 100 int cycle, unsigned int dropped); 104 int cycle, unsigned int dropped, unsigned int max_length); 105 int getBufferFillPackets(); 106 int getBufferFillPayload(); 101 107 102 private: 108 protected: 109 int m_headersize; 110 int m_buffersize; 111 int m_max_packetsize; 112 113 PacketBuffer *buffer; 114 115 DECLARE_DEBUG_MODULE; 103 116 104 117 }; branches/libfreebob-2.0/src/libstreaming/IsoStreamManager.cpp
r200 r201 49 49 assert(stream); 50 50 51 IsoRecvStream *srx; 52 IsoXmitStream *stx; 53 54 srx=dynamic_cast<IsoRecvStream *>(stream); 55 56 if (srx) { 57 m_IsoRecvStreams.push_back(srx); 51 if (stream->getType()==IsoStream::EST_Receive) { 52 m_IsoRecvStreams.push_back(stream); 58 53 return 0; 59 54 } 60 55 61 stx=dynamic_cast<IsoXmitStream *>(stream); 62 63 if (stx) { 64 m_IsoXmitStreams.push_back(stx); 56 if (stream->getType()==IsoStream::EST_Transmit) { 57 m_IsoXmitStreams.push_back(stream); 65 58 return 0; 66 59 } … … 73 66 assert(stream); 74 67 75 for ( Iso RecvStreamVectorIterator it = m_IsoRecvStreams.begin();68 for ( IsoStreamVectorIterator it = m_IsoRecvStreams.begin(); 76 69 it != m_IsoRecvStreams.end(); 77 70 ++it ) 78 71 { 79 // FIXME: how do I compare these two pointers? 80 IsoStream* s = dynamic_cast<IsoStream *>(*it); 81 if ( s == stream ) { 72 if ( *it == stream ) { 82 73 m_IsoRecvStreams.erase(it); 83 74 return 0; … … 85 76 } 86 77 87 for ( Iso XmitStreamVectorIterator it = m_IsoXmitStreams.begin();78 for ( IsoStreamVectorIterator it = m_IsoXmitStreams.begin(); 88 79 it != m_IsoXmitStreams.end(); 89 80 ++it ) 90 81 { 91 // FIXME: how do I compare these two pointers? 92 IsoStream* s = dynamic_cast<IsoStream *>(*it); 93 if ( s == stream ) { 82 if ( *it == stream ) { 94 83 m_IsoXmitStreams.erase(it); 95 84 return 0; branches/libfreebob-2.0/src/libstreaming/IsoStreamManager.h
r200 r201 38 38 */ 39 39 class IsoStream; 40 class IsoXmitStream;41 class IsoRecvStream;42 40 43 typedef std::vector<IsoXmitStream *> IsoXmitStreamVector; 44 typedef std::vector<IsoXmitStream *>::iterator IsoXmitStreamVectorIterator; 45 typedef std::vector<IsoRecvStream *> IsoRecvStreamVector; 46 typedef std::vector<IsoRecvStream *>::iterator IsoRecvStreamVectorIterator; 41 typedef std::vector<IsoStream *> IsoStreamVector; 42 typedef std::vector<IsoStream *>::iterator IsoStreamVectorIterator; 47 43 48 44 class IsoStreamManager … … 57 53 58 54 private: 59 Iso RecvStreamVector m_IsoRecvStreams;60 Iso XmitStreamVector m_IsoXmitStreams;55 IsoStreamVector m_IsoRecvStreams; 56 IsoStreamVector m_IsoXmitStreams; 61 57 62 58 }; branches/libfreebob-2.0/src/libstreaming/Makefile.am
r200 r201 35 35 IsoStreamManager.h \ 36 36 ringbuffer.c ringbuffer.h \ 37 Receiver.cpp Receiver.h 37 Receiver.cpp Receiver.h \ 38 PacketBuffer.cpp PacketBuffer.h 38 39 39 40 INCLUDES = $(LIBRAW1394_CFLAGS) $(LIBIEC61883_CFLAGS) -I$(top_srcdir)/src \ branches/libfreebob-2.0/src/libstreaming/messagebuffer.h
r199 r201 36 36 #define __FREEBOB_MESSAGEBUFFER_H__ 37 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 38 42 void freebob_messagebuffer_init(); 39 43 void freebob_messagebuffer_exit(); … … 41 45 void freebob_messagebuffer_add(const char *fmt, ...); 42 46 47 #ifdef __cplusplus 48 } 49 #endif 50 43 51 #endif /* __freebob_messagebuffer_h__ */ branches/libfreebob-2.0/src/libstreaming/Receiver.cpp
r200 r201 33 33 IMPL_DEBUG_MODULE( Receiver, Receiver, DEBUG_LEVEL_NORMAL ); 34 34 35 Receiver::Receiver( ) {35 Receiver::Receiver(int periodsize) { 36 36 37 37 } branches/libfreebob-2.0/src/libstreaming/Receiver.h
r200 r201 35 35 namespace FreebobStreaming { 36 36 37 class Receiver : public IsoRecvStream{37 class Receiver { 38 38 39 39 public: 40 40 41 Receiver(int periodsize) ;41 Receiver(int periodsize) ; 42 42 virtual ~Receiver(); 43 43 44 44 protected: 45 int 45 int m_period_size; 46 46 private: 47 47 freebob_ringbuffer_t event_buffer; 48 } 48 49 DECLARE_DEBUG_MODULE; 50 51 }; 49 52 50 53 } 51 54 52 55 #endif /* __FREEBOB_RECEIVER__ */ 53 54