39 #ifndef _uhal_ProtocolIPbus_hpp_ 40 #define _uhal_ProtocolIPbus_hpp_ 49 #include <boost/function.hpp> 50 #include <boost/thread/mutex.hpp> 58 namespace boost {
template <
class Y>
class shared_ptr; }
68 template< u
int8_t IPbus_major , u
int8_t IPbus_minor >
73 template< u
int8_t IPbus_minor >
83 IPbus (
const std::string& aId,
const URI& aUri );
99 virtual uint32_t getPreambleSize();
115 static uint32_t CalculateHeader (
const eIPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode = 0 );
125 static uint32_t ExpectedHeader (
const eIPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode = 0 );
136 static bool ExtractHeader (
const uint32_t& aHeader ,
eIPbusTransactionType& aType , uint32_t& aWordCount , uint32_t& aTransactionId , uint8_t& aInfoCode );
149 uint32_t implementCalculateHeader (
const eIPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode );
160 bool implementExtractHeader (
const uint32_t& aHeader ,
eIPbusTransactionType& aType , uint32_t& aWordCount , uint32_t& aTransactionId , uint8_t& aInfoCode );
179 virtual void dispatchExceptionHandler();
184 static void translateInfoCode(std::ostream& aStream,
const uint8_t& aErrorCode);
195 UHAL_DEFINE_DERIVED_EXCEPTION_CLASS ( IPbus2PacketHeaderMismatch, PacketLevelError,
"Exception class to handle the case where the IPbus 2.0 packet header does not match that sent." )
200 template< u
int8_t IPbus_minor >
210 IPbus (
const std::string& aId,
const URI& aUri );
226 virtual uint32_t getPreambleSize();
242 static uint32_t CalculateHeader (
const eIPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode = 0 );
252 static uint32_t ExpectedHeader (
const eIPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode = 0 );
263 static bool ExtractHeader (
const uint32_t& aHeader ,
eIPbusTransactionType& aType , uint32_t& aWordCount , uint32_t& aTransactionId , uint8_t& aInfoCode );
278 uint8_t* aSendBufferEnd ,
279 std::deque< std::pair< uint8_t* , uint32_t > >::iterator aReplyStartIt ,
280 std::deque< std::pair< uint8_t* , uint32_t > >::iterator aReplyEndIt );
290 uint32_t implementCalculateHeader (
const eIPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode );
301 bool implementExtractHeader (
const uint32_t& aHeader ,
eIPbusTransactionType& aType , uint32_t& aWordCount , uint32_t& aTransactionId , uint8_t& aInfoCode );
320 virtual void dispatchExceptionHandler();
325 static void translateInfoCode(std::ostream& aStream,
const uint8_t& aErrorCode);
virtual uint32_t getMaxNumberOfBuffers()
Return the maximum number of packets in flight.
A class which provides the version-specific functionality for IPbus.
uint8_t requestTransactionInfoCode() const
Returns the InfoCode for request transactions in this IPbus version.
boost::function< void(std::ostream &, const uint8_t &)> getInfoCodeTranslator()
eIPbusTransactionType
Enumerated type to define the IPbus transaction type.
uint32_t getMaxTransactionWordCount() const
Returns the maximum value of the word count in the transaction header, for each IPbus version...
uint32_t getMaxTransactionWordCount() const
Returns the maximum value of the word count in the transaction header, for each IPbus version...
#define UHAL_DEFINE_DERIVED_EXCEPTION_CLASS(ClassName, BaseClassName, ClassDescription)
Macro for simplifying the declaration and definition of derived exception types.
An abstract base exception class providing an interface to a throw/ThrowAsDerivedType mechanism which...
A class providing the core IPbus packing functionality.
virtual uint32_t getMaxNumberOfBuffers()
Return the maximum number of packets in flight.
boost::mutex mReceivePacketMutex
std::deque< uint32_t > mReceivePacketHeader
uint8_t requestTransactionInfoCode() const
Returns the InfoCode for request transactions in this IPbus version.
boost::function< void(std::ostream &, const uint8_t &)> getInfoCodeTranslator()
uint16_t mPacketCounter
The transaction counter which will be incremented in the sent IPbus headers.
Struct to store a URI when parsed by boost spirit.