3 #include <boost/lockfree/policies.hpp>
4 #include <boost/lockfree/spsc_queue.hpp>
23 boost::lockfree::spsc_queue<std::shared_ptr<RequestBase>,
24 boost::lockfree::capacity<queueSize>>
37 swap(pimpl, rhs.pimpl);
41 std::shared_ptr<RequestBase>
44 std::shared_ptr<RequestBase> request;
45 if (!pimpl->queue.pop(request))
55 request->setProcessed();
56 requestCV.notify_all();
60 RequestQueue::postRequest(
const std::shared_ptr<RequestBase>& request)
62 static std::mutex mtx;
63 std::unique_lock<std::mutex> lck(mtx);
65 if (pimpl->queue.write_available() < 10)
71 pimpl->queue.push(request);
73 [&, request]() {
return request->isProcessed() || request->hasFailed(); });
74 return !request->hasFailed();
83 std::shared_ptr<SDOUpdateRequest> request =
84 std::make_shared<SDOUpdateRequest>(sdoIdentifier, buflen, buf,
true, completeAccess);
85 return postSDOUpdateRequest(request);
94 std::shared_ptr<SDOUpdateRequest> request =
95 std::make_shared<SDOUpdateRequest>(sdoIdentifier, &buflen, buf,
false, completeAccess);
96 return postSDOUpdateRequest(request);
105 std::shared_ptr<ChangeStateRequest> request =
106 std::make_shared<ChangeStateRequest>(slaveIndex, state,
validate, actualState);
107 return postRequest(request);
113 auto request = std::make_shared<ReadStatesRequest>(state);
114 return postRequest(request);
120 auto request = std::make_shared<RegisterResetRequest>(slaveIndex);
121 return postRequest(request);
127 auto request = std::make_shared<RegisterReadRequest>(®isterData);
128 return postRequest(request);
133 std::uint16_t amountFramesToRead)
135 auto request = std::make_shared<RegisterReadRequest>(frames, amountFramesToRead);
136 return postRequest(request);
140 RequestQueue::postSDOUpdateRequest(
const std::shared_ptr<SDOUpdateRequest>& request)
142 return postRequest(request);