Transport protocol to transfer an IPbus buffer via device file, using mmap. More...
#include <uhal/ProtocolMmap.hpp>
Classes | |
| class | File |
| 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 81 of file ProtocolMmap.hpp.
|
private |
Definition at line 150 of file ProtocolMmap.hpp.
|
private |
Definition at line 152 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 232 of file ProtocolMmap.cpp.
References uhal::URI::mArguments, mSleepDuration, uhal::Notice, uhal::Quote(), uhal::tests::uri, and uhal::Warning.
|
virtual |
|
private |
Set up the connection to the device.
Definition at line 321 of file ProtocolMmap.cpp.
References uhal::Debug, uhal::Mmap::File::getPath(), uhal::Info, uhal::Integer(), 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 351 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 291 of file ProtocolMmap.cpp.
References disconnect(), 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 282 of file ProtocolMmap.cpp.
References uhal::Debug, 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 312 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 303 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 269 of file ProtocolMmap.cpp.
References connect(), uhal::Debug, 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 377 of file ProtocolMmap.cpp.
References uhal::Debug, uhal::Mmap::File::getPath(), uhal::Info, uhal::Integer(), mAsynchronousException, mDeviceFile, uhal::min, mIndexNextPage, mNumberOfPages, mPageSize, mPublishedReplyPageCount, mReadReplyPageCount, mReplyQueue, mSleepDuration, uhal::Quote(), uhal::Mmap::File::read(), 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 358 of file ProtocolMmap.cpp.
References uhal::Debug, uhal::Mmap::File::getPath(), uhal::Info, uhal::Integer(), 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 193 of file ProtocolMmap.hpp.
Referenced by read().
|
private |
Definition at line 178 of file ProtocolMmap.hpp.
Referenced by connect(), disconnect(), getMaxReplySize(), getMaxSendSize(), and implementDispatch().
|
private |
Definition at line 180 of file ProtocolMmap.hpp.
Referenced by connect(), disconnect(), read(), and write().
|
private |
Definition at line 184 of file ProtocolMmap.hpp.
|
private |
Definition at line 184 of file ProtocolMmap.hpp.
Referenced by connect(), implementDispatch(), read(), and write().
|
private |
Definition at line 184 of file ProtocolMmap.hpp.
Referenced by connect(), getMaxReplySize(), getMaxSendSize(), read(), and write().
|
private |
Definition at line 184 of file ProtocolMmap.hpp.
|
private |
Definition at line 184 of file ProtocolMmap.hpp.
|
private |
The list of buffers still awaiting a reply.
Definition at line 187 of file ProtocolMmap.hpp.
Referenced by dispatchExceptionHandler(), Flush(), implementDispatch(), read(), and write().
|
private |
Definition at line 182 of file ProtocolMmap.hpp.
1.8.13