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.
1.8.18