15 #include "visiontransfer/deviceparameters.h" 16 #include "visiontransfer/parametertransfer.h" 17 #include "visiontransfer/exceptions.h" 18 #include "visiontransfer/common.h" 28 class DeviceParameters::Pimpl {
31 Pimpl(
const char* address,
const char* service);
34 void writeParameter(
const char*
id,
const T& value) {
35 paramTrans.writeParameterTransactionGuarded(
id, value);
38 int readIntParameter(
const char*
id);
39 double readDoubleParameter(
const char*
id);
40 bool readBoolParameter(
const char*
id);
42 void writeIntParameter(
const char*
id,
int value);
43 void writeDoubleParameter(
const char*
id,
double value);
44 void writeBoolParameter(
const char*
id,
bool value);
45 void writeBoolParameterUnguarded(
const char*
id,
bool value);
47 std::map<std::string, ParameterInfo> getAllParameters();
49 bool hasParameter(
const std::string& name)
const;
51 Parameter const& getParameter(
const std::string& name)
const;
55 void setParameterUpdateCallback(std::function<
void(
const std::string& uid)> callback);
57 void transactionStartQueue();
58 void transactionCommitQueue();
61 std::map<std::string, ParameterInfo> serverSideEnumeration;
63 #ifndef DOXYGEN_SHOULD_SKIP_THIS 65 void setNamedParameterInternal(
const std::string& name, T value);
74 pimpl(new Pimpl(device)) {
79 pimpl(new Pimpl(address, service)) {
83 DeviceParameters::~DeviceParameters() {
87 int DeviceParameters::readIntParameter(
const char*
id) {
88 return pimpl->readIntParameter(
id);
91 double DeviceParameters::readDoubleParameter(
const char*
id) {
92 return pimpl->readDoubleParameter(
id);
95 bool DeviceParameters::readBoolParameter(
const char*
id) {
96 return pimpl->readBoolParameter(
id);
99 void DeviceParameters::writeIntParameter(
const char*
id,
int value) {
100 pimpl->writeIntParameter(
id, value);
103 void DeviceParameters::writeDoubleParameter(
const char*
id,
double value) {
104 pimpl->writeDoubleParameter(
id, value);
107 void DeviceParameters::writeBoolParameter(
const char*
id,
bool value) {
108 pimpl->writeBoolParameter(
id, value);
111 void DeviceParameters::writeBoolParameterUnguarded(
const char*
id,
bool value) {
112 pimpl->writeBoolParameterUnguarded(
id, value);
117 return pimpl->getAllParameters();
120 #ifndef DOXYGEN_SHOULD_SKIP_THIS 124 pimpl->writeParameter(name.c_str(), value);
128 pimpl->writeParameter(name.c_str(), value);
132 pimpl->writeParameter(name.c_str(), value);
137 pimpl->writeParameter(name.c_str(), value);
141 pimpl->writeParameter(name.c_str(), value);
145 pimpl->writeParameter(name.c_str(), value);
149 pimpl->writeParameter(name.c_str(), value);
153 pimpl->writeParameter(name.c_str(), value);
158 return pimpl->readIntParameter(name.c_str());
162 return pimpl->readDoubleParameter(name.c_str());
166 return pimpl->readBoolParameter(name.c_str());
170 #if VISIONTRANSFER_CPLUSPLUS_VERSION >= 201103L 171 bool DeviceParameters::hasParameter(
const std::string& name)
const {
172 return pimpl->hasParameter(name);
175 Parameter DeviceParameters::getParameter(
const std::string& name)
const {
176 return pimpl->getParameter(name);
179 ParameterSet DeviceParameters::getParameterSet()
const {
180 return pimpl->getParameterSet();
183 void DeviceParameters::setParameterUpdateCallback(std::function<
void(
const std::string& uid)> callback) {
184 pimpl->setParameterUpdateCallback(callback);
187 DeviceParameters::TransactionLock::TransactionLock(DeviceParameters::Pimpl* pimpl)
189 pimpl->transactionStartQueue();
192 DeviceParameters::TransactionLock::~TransactionLock() {
193 pimpl->transactionCommitQueue();
196 std::unique_ptr<DeviceParameters::TransactionLock> DeviceParameters::transactionLock() {
197 return std::make_unique<DeviceParameters::TransactionLock>(pimpl);
204 DeviceParameters::Pimpl::Pimpl(
const char* address,
const char* service)
205 : paramTrans(address, service) {
208 DeviceParameters::Pimpl::Pimpl(
const DeviceInfo& device)
212 int DeviceParameters::Pimpl::readIntParameter(
const char*
id) {
213 return paramTrans.readIntParameter(
id);
216 double DeviceParameters::Pimpl::readDoubleParameter(
const char*
id) {
217 return paramTrans.readDoubleParameter(
id);
220 bool DeviceParameters::Pimpl::readBoolParameter(
const char*
id) {
221 return paramTrans.readBoolParameter(
id);
224 void DeviceParameters::Pimpl::writeIntParameter(
const char*
id,
int value) {
225 paramTrans.writeParameterTransactionGuarded(
id, value);
228 void DeviceParameters::Pimpl::writeDoubleParameter(
const char*
id,
double value) {
229 paramTrans.writeParameterTransactionGuarded(
id, value);
232 void DeviceParameters::Pimpl::writeBoolParameter(
const char*
id,
bool value) {
233 paramTrans.writeParameterTransactionGuarded(
id, value);
236 void DeviceParameters::Pimpl::writeBoolParameterUnguarded(
const char*
id,
bool value) {
237 paramTrans.writeParameterTransactionUnguarded(
id, value);
240 std::map<std::string, ParameterInfo> DeviceParameters::Pimpl::getAllParameters() {
241 serverSideEnumeration = paramTrans.getAllParameters();
242 return serverSideEnumeration;
245 bool DeviceParameters::Pimpl::hasParameter(
const std::string& name)
const {
246 auto const& paramSet = paramTrans.getParameterSet();
247 return paramSet.count(name) != 0;
250 Parameter const& DeviceParameters::Pimpl::getParameter(
const std::string& name)
const {
251 auto const& paramSet = paramTrans.getParameterSet();
252 if (paramSet.count(name)) {
253 return paramSet.
at(name);
255 throw ParameterException(std::string(
"Invalid or inaccessible parameter name: ") + name);
259 ParameterSet const& DeviceParameters::Pimpl::getParameterSet()
const {
260 return paramTrans.getParameterSet();
263 void DeviceParameters::Pimpl::setParameterUpdateCallback(std::function<
void(
const std::string& uid)> callback) {
264 paramTrans.setParameterUpdateCallback(callback);
267 void DeviceParameters::Pimpl::transactionStartQueue() {
268 paramTrans.transactionStartQueue();
271 void DeviceParameters::Pimpl::transactionCommitQueue() {
272 paramTrans.transactionCommitQueue();
std::map< std::string, ParameterInfo > getAllParameters()
Enumerates all simple parameters as reported by the device [DEPRECATED].
Allows a configuration of device parameters over the network.
std::string getIpAddress() const
Gets the IP address of the device.
void setParameter(const std::string &name, T value)
Set a parameter by name. ParameterException for invalid names or values.
double at(unsigned int x)
Exception class that is used for all parameter-related exceptions.
T getNamedParameter(const std::string &name)
Get a parameter by name, specifying the return type (int, double or bool). ParameterException for inv...
Aggregates information about a discovered device.
DeviceParameters(const DeviceInfo &device)
Connects to parameter server of a Nerian stereo device by using the device information from device en...
void setNamedParameter(const std::string &name, T value)
Set a parameter by name. ParameterException for invalid names.