Transport protocol to transfer an IPbus buffer via device file, using mmap. More...
#include <uhal/ProtocolMmap.hpp>
Classes | |
class | File |
struct | HexTo |
class | PacketFmt |
Public Member Functions | |
Mmap (const std::string &aId, const URI &aUri) | |
Constructor. More... | |
virtual | ~Mmap () |
Destructor. More... | |
Private Types | |
typedef IPbus< 2, 0 > | InnerProtocol |
typedef boost::chrono::steady_clock | SteadyClock_t |
Private Member Functions | |
Mmap (const Mmap &aMmap) | |
Mmap & | operator= (const Mmap &aMmap) |
void | implementDispatch (boost::shared_ptr< Buffers > aBuffers) |
Send the IPbus buffer to the target, read back the response and call the packing-protocol's validate function. More... | |
virtual void | Flush () |
Concrete implementation of the synchronization function to block until all buffers have been sent, all replies received and all data validated. More... | |
virtual void | dispatchExceptionHandler () |
Function which tidies up this protocol layer in the event of an exception. More... | |
uint32_t | getMaxSendSize () |
Return the maximum size to be sent based on the buffer size in the target. More... | |
uint32_t | getMaxReplySize () |
Return the maximum size of reply packet based on the buffer size in the target. More... | |
void | connect () |
Set up the connection to the device. More... | |
void | disconnect () |
Close the connection to the device. More... | |
void | write (const boost::shared_ptr< Buffers > &aBuffers) |
Write request packet to next page in host-to-FPGA device file. More... | |
void | read () |
Read next pending reply packet from appropriate page of FPGA-to-host device file, and validate contents. More... | |
Private Attributes | |
bool | mConnected |
File | mDeviceFile |
boost::chrono::microseconds | mSleepDuration |
uint32_t | mNumberOfPages |
uint32_t | mPageSize |
uint32_t | mIndexNextPage |
uint32_t | mPublishedReplyPageCount |
uint32_t | mReadReplyPageCount |
std::deque< boost::shared_ptr< Buffers > > | mReplyQueue |
The list of buffers still awaiting a reply. More... | |
uhal::exception::exception * | mAsynchronousException |
A pointer to an exception object for passing exceptions from the worker thread to the main thread. More... | |
Transport protocol to transfer an IPbus buffer via device file, using mmap.
Definition at line 83 of file ProtocolMmap.hpp.
|
private |
Definition at line 165 of file ProtocolMmap.hpp.
|
private |
Definition at line 167 of file ProtocolMmap.hpp.
|
private |
uhal::Mmap::Mmap | ( | const std::string & | aId, |
const URI & | aUri | ||
) |
Constructor.
aId | the uinique identifier that the client will be given. |
aUri | a struct containing the full URI of the target. |
Definition at line 256 of file ProtocolMmap.cpp.
References uhal::Integer(), uhal::log(), uhal::URI::mArguments, mDeviceFile, mSleepDuration, uhal::Notice, uhal::Quote(), uhal::Mmap::File::setOffset(), uhal::tests::uri, and uhal::Warning.
|
virtual |
|
private |
Set up the connection to the device.
Definition at line 352 of file ProtocolMmap.cpp.
References uhal::Debug, uhal::Mmap::File::getPath(), uhal::Info, uhal::Integer(), uhal::log(), mConnected, mDeviceFile, uhal::min, mIndexNextPage, mNumberOfPages, mPageSize, mPublishedReplyPageCount, mReadReplyPageCount, uhal::Quote(), and uhal::Mmap::File::read().
Referenced by getMaxReplySize(), getMaxSendSize(), and implementDispatch().
|
private |
Close the connection to the device.
Definition at line 382 of file ProtocolMmap.cpp.
References uhal::Mmap::File::close(), mConnected, and mDeviceFile.
Referenced by dispatchExceptionHandler(), and ~Mmap().
|
privatevirtual |
Function which tidies up this protocol layer in the event of an exception.
Definition at line 322 of file ProtocolMmap.cpp.
References disconnect(), uhal::log(), mReplyQueue, uhal::Notice, uhal::Quote(), uhal::ClientInterface::returnBufferToPool(), and uhal::tests::uri.
|
privatevirtual |
Concrete implementation of the synchronization function to block until all buffers have been sent, all replies received and all data validated.
Definition at line 313 of file ProtocolMmap.cpp.
References uhal::Debug, uhal::log(), mReplyQueue, uhal::Quote(), read(), and uhal::tests::uri.
|
private |
Return the maximum size of reply packet based on the buffer size in the target.
Definition at line 343 of file ProtocolMmap.cpp.
References connect(), mConnected, and mPageSize.
|
private |
Return the maximum size to be sent based on the buffer size in the target.
Definition at line 334 of file ProtocolMmap.cpp.
References connect(), mConnected, and mPageSize.
|
private |
Send the IPbus buffer to the target, read back the response and call the packing-protocol's validate function.
aBuffers | the buffer object wrapping the send and recieve buffers that are to be transported If multithreaded, adds buffer to the dispatch queue and returns. If single-threaded, calls the dispatch-worker dispatch function directly and blocks until the response is validated. |
Definition at line 300 of file ProtocolMmap.cpp.
References connect(), uhal::Debug, uhal::log(), mConnected, mNumberOfPages, mReplyQueue, uhal::Quote(), read(), uhal::tests::uri, and write().
|
private |
Read next pending reply packet from appropriate page of FPGA-to-host device file, and validate contents.
Definition at line 406 of file ProtocolMmap.cpp.
References uhal::Debug, uhal::Mmap::File::getPath(), uhal::Info, uhal::Integer(), uhal::log(), mAsynchronousException, mDeviceFile, uhal::min, mIndexNextPage, mNumberOfPages, mPageSize, mPublishedReplyPageCount, mReadReplyPageCount, mReplyQueue, mSleepDuration, uhal::Quote(), uhal::Mmap::File::read(), uhal::exception::exception::throwAsDerivedType(), uhal::tests::uri, uhal::ClientInterface::validate(), uhal::Warning, and uhal::exception::exception::what().
Referenced by Flush(), and implementDispatch().
|
private |
Write request packet to next page in host-to-FPGA device file.
Definition at line 389 of file ProtocolMmap.cpp.
References uhal::Debug, uhal::Mmap::File::getPath(), uhal::Info, uhal::Integer(), uhal::log(), mDeviceFile, mIndexNextPage, mNumberOfPages, mPageSize, mReplyQueue, uhal::Quote(), uhal::tests::uri, and uhal::Mmap::File::write().
Referenced by implementDispatch().
|
private |
A pointer to an exception object for passing exceptions from the worker thread to the main thread.
Exceptions must always be created on the heap (i.e. using new
) and deletion will be handled in the main thread
Definition at line 208 of file ProtocolMmap.hpp.
Referenced by read().
|
private |
Definition at line 193 of file ProtocolMmap.hpp.
Referenced by connect(), disconnect(), getMaxReplySize(), getMaxSendSize(), and implementDispatch().
|
private |
Definition at line 195 of file ProtocolMmap.hpp.
Referenced by connect(), disconnect(), Mmap(), read(), and write().
|
private |
Definition at line 199 of file ProtocolMmap.hpp.
|
private |
Definition at line 199 of file ProtocolMmap.hpp.
Referenced by connect(), implementDispatch(), read(), and write().
|
private |
Definition at line 199 of file ProtocolMmap.hpp.
Referenced by connect(), getMaxReplySize(), getMaxSendSize(), read(), and write().
|
private |
Definition at line 199 of file ProtocolMmap.hpp.
|
private |
Definition at line 199 of file ProtocolMmap.hpp.
|
private |
The list of buffers still awaiting a reply.
Definition at line 202 of file ProtocolMmap.hpp.
Referenced by dispatchExceptionHandler(), Flush(), implementDispatch(), read(), and write().
|
private |
Definition at line 197 of file ProtocolMmap.hpp.