39#ifndef _uhal_ProtocolIPbus_hpp_
40#define _uhal_ProtocolIPbus_hpp_
63 template< u
int8_t IPbus_major , u
int8_t IPbus_minor >
68 template< u
int8_t IPbus_minor >
78 IPbus (
const std::string& aId,
const URI& aUri );
85 virtual void preamble ( std::shared_ptr< Buffers > aBuffers );
88 virtual uint32_t getPreambleSize();
91 virtual void predispatch ( std::shared_ptr< Buffers > aBuffers );
102 static uint32_t CalculateHeader (
const IPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode = 0 );
112 static uint32_t ExpectedHeader (
const IPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode = 0 );
123 static bool ExtractHeader (
const uint32_t& aHeader ,
IPbusTransactionType& aType , uint32_t& aWordCount , uint32_t& aTransactionId , uint8_t& aInfoCode );
136 uint32_t implementCalculateHeader (
const IPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode );
147 bool implementExtractHeader (
const uint32_t& aHeader ,
IPbusTransactionType& aType , uint32_t& aWordCount , uint32_t& aTransactionId , uint8_t& aInfoCode );
166 virtual void dispatchExceptionHandler();
171 static void translateInfoCode(std::ostream& aStream,
const uint8_t& aErrorCode);
179 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." )
184 template< u
int8_t IPbus_minor >
194 IPbus (
const std::string& aId,
const URI& aUri );
201 virtual void preamble ( std::shared_ptr< Buffers > aBuffers );
204 virtual uint32_t getPreambleSize();
207 virtual void predispatch ( std::shared_ptr< Buffers > aBuffers );
218 static uint32_t CalculateHeader (
const IPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode = 0 );
228 static uint32_t ExpectedHeader (
const IPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode = 0 );
239 static bool ExtractHeader (
const uint32_t& aHeader ,
IPbusTransactionType& aType , uint32_t& aWordCount , uint32_t& aTransactionId , uint8_t& aInfoCode );
253 uint8_t* aSendBufferEnd ,
254 std::deque< std::pair< uint8_t* , uint32_t > >
::iterator aReplyStartIt ,
255 std::deque< std::pair< uint8_t* , uint32_t > >
::iterator aReplyEndIt );
265 uint32_t implementCalculateHeader (
const IPbusTransactionType& aType ,
const uint32_t& aWordCount ,
const uint32_t& aTransactionId ,
const uint8_t& aInfoCode );
276 bool implementExtractHeader (
const uint32_t& aHeader ,
IPbusTransactionType& aType , uint32_t& aWordCount , uint32_t& aTransactionId , uint8_t& aInfoCode );
295 virtual void dispatchExceptionHandler();
300 static void translateInfoCode(std::ostream& aStream,
const uint8_t& aErrorCode);
Wrapper to generate a new Python exception type.
\rst Wraps a Python iterator so that it can also be used as a C++ input iterator
uint8_t requestTransactionInfoCode() const
Returns the InfoCode for request transactions in this IPbus version.
virtual uint32_t getMaxNumberOfBuffers()
Return the maximum number of packets in flight.
uint32_t getMaxTransactionWordCount() const
Returns the maximum value of the word count in the transaction header, for each IPbus version.
std::function< void(std::ostream &, const uint8_t &)> getInfoCodeTranslator()
std::mutex mReceivePacketMutex
uint32_t getMaxTransactionWordCount() const
Returns the maximum value of the word count in the transaction header, for each IPbus version.
uint8_t requestTransactionInfoCode() const
Returns the InfoCode for request transactions in this IPbus version.
virtual uint32_t getMaxNumberOfBuffers()
Return the maximum number of packets in flight.
std::function< void(std::ostream &, const uint8_t &)> getInfoCodeTranslator()
std::deque< uint32_t > mReceivePacketHeader
uint16_t mPacketCounter
The transaction counter which will be incremented in the sent IPbus headers.
A class providing the core IPbus packing functionality.
A class which provides the version-specific functionality for IPbus.
An abstract base exception class, including an interface to throw as the derived type (for passing ex...
#define UHAL_DEFINE_DERIVED_EXCEPTION_CLASS(ClassName, BaseClassName, ClassDescription)
Macro for simplifying the declaration and definition of derived exception types.
IPbusTransactionType
Enumerated type to define the IPbus transaction type.
Struct to store a URI when parsed by boost spirit.