YARP
Yet Another Robot Platform
ServerFrameGrabber.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-FileCopyrightText: 2006-2010 RobotCub Consortium
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
8
10#include <yarp/os/LogStream.h>
12
13using namespace yarp::os;
14using namespace yarp::dev;
15using namespace yarp::sig;
16
19
20namespace {
21YARP_LOG_COMPONENT(SERVERFRAMEGRABBER, "yarp.device.grabber")
22}
23
25{
26 if (!active) {
27 return false;
28 }
29 active = false;
30 thread.stop();
31 if (p2!=nullptr) {
32 delete p2;
33 p2 = nullptr;
34 }
35 return true;
36}
37
39{
40 if (active) {
41 yCError(SERVERFRAMEGRABBER, "Did you just try to open the same ServerFrameGrabber twice?\n");
42 return false;
43 }
44
45 // for AV, control whether output goes on a single port or multiple
46 bool separatePorts = false;
47
48 p.setReader(*this);
49
50 yarp::os::Value *name;
51
52 if (config.check("subdevice",name,"name (or nested configuration) of device to wrap")) {
53 if (name->isString()) {
54 // maybe user isn't doing nested configuration
56 p.setMonitor(config.getMonitor(),
57 name->toString().c_str()); // pass on any monitoring
58 p.fromString(config.toString());
59 p.put("device",name->toString());
60 p.unput("subdevice");
61 poly.open(p);
62 } else {
63 Bottle subdevice = config.findGroup("subdevice").tail();
64 poly.open(subdevice);
65 }
66 if (!poly.isValid()) {
67 //yCError(SERVERFRAMEGRABBER, "cannot make <%s>\n", name->toString().c_str());
68 return false;
69 }
70 } else {
71 yCError(SERVERFRAMEGRABBER, "\"--subdevice <name>\" not set for server_framegrabber\n");
72 return false;
73 }
74 if (poly.isValid()) {
76 poly.view(str);
77 bool a = true;
78 bool v = true;
79 bool vraw = true;
80 if (str!=nullptr) {
81 a = str->hasAudio();
82 v = str->hasVideo();
83 vraw = str->hasRawVideo();
84 }
85 if (v) {
86 poly.view(fgImage);
87 }
88 if (vraw) {
89 poly.view(fgImageRaw);
90 }
91 if (a) {
92 poly.view(fgSound);
93 }
94 if (a&&v) {
95 poly.view(fgAv);
96 }
97 poly.view(fgCtrl);
98 if (fgCtrl) {
99 ifgCtrl_Responder.configure(fgCtrl);
100 }
101 poly.view(fgTimed);
102 poly.view(rgbVis_p);
103
104 bool conf = rgbParser.configure(rgbVis_p);
105
106 if(!conf)
107 {
108 yCWarning(SERVERFRAMEGRABBER) << "ServerFrameGrabber: error configuring interfaces for parsers";
109 }
110 }
111
112 canDrop = !config.check("no_drop","if present, use strict policy for sending data");
113 addStamp = config.check("stamp","if present, add timestamps to data");
114
115 p.promiseType(Type::byName("yarp/image")); // TODO: reflect audio options
116 p.setWriteOnly();
117 p.open(config.check("name",Value("/grabber"),
118 "name of port to send data on").asString());
119
120 /*
121 double framerate=0;
122 if (config.check("framerate", name,
123 "maximum rate in Hz to read from subdevice")) {
124 framerate=name->asFloat64();
125 }
126 */
127
128 if (fgAv&&
129 !config.check("shared-ports",
130 "If present, send audio and images on same port")) {
131 separatePorts = true;
132 yCAssert(SERVERFRAMEGRABBER, p2==nullptr);
133 p2 = new Port;
134 yCAssert(SERVERFRAMEGRABBER, p2!=nullptr);
135 p2->open(config.check("name2",Value("/grabber2"),
136 "Name of second port to send data on, when audio and images sent separately").asString());
137 }
138
139 if (fgAv!=nullptr) {
140 if (separatePorts) {
141 yCAssert(SERVERFRAMEGRABBER, p2!=nullptr);
142 thread.attach(new DataWriter2<yarp::sig::ImageOf<yarp::sig::PixelRgb>, yarp::sig::Sound>(p,*p2,*this,canDrop,addStamp));
143 } else {
144 thread.attach(new DataWriter<ImageRgbSound>(p,*this,canDrop,
145 addStamp));
146 }
147 } else if (fgImage!=nullptr) {
148 thread.attach(new DataWriter<yarp::sig::ImageOf<yarp::sig::PixelRgb> >(p,*this,canDrop,addStamp,fgTimed));
149 } else if (fgImageRaw!=nullptr) {
150 thread.attach(new DataWriter<yarp::sig::ImageOf<yarp::sig::PixelMono> >(p,*this,canDrop,addStamp,fgTimed));
151 } else {
152 yCError(SERVERFRAMEGRABBER, "subdevice <%s> doesn't look like a framegrabber\n",
153 name->toString().c_str());
154 return false;
155 }
156
157 singleThreaded =
158 config.check("single_threaded",
159 "if present, operate in single threaded mode")!=0;
160 thread.open(config.check("framerate",Value("0"),
161 "maximum rate in Hz to read from subdevice").asFloat64(),
162 singleThreaded);
163 active = true;
164
165
166 DeviceResponder::makeUsage();
167 addUsage("[set] [bri] $fBrightness", "set brightness");
168 addUsage("[set] [expo] $fExposure", "set exposure");
169 addUsage("[set] [shar] $fSharpness", "set sharpness");
170 addUsage("[set] [whit] $fBlue $fRed", "set white balance");
171 addUsage("[set] [hue] $fHue", "set hue");
172 addUsage("[set] [satu] $fSaturation", "set saturation");
173 addUsage("[set] [gamm] $fGamma", "set gamma");
174 addUsage("[set] [shut] $fShutter", "set shutter");
175 addUsage("[set] [gain] $fGain", "set gain");
176 addUsage("[set] [iris] $fIris", "set iris");
177
178 addUsage("[get] [bri]", "get brightness");
179 addUsage("[get] [expo]", "get exposure");
180 addUsage("[get] [shar]", "get sharpness");
181 addUsage("[get] [whit]", "get white balance");
182 addUsage("[get] [hue]", "get hue");
183 addUsage("[get] [satu]", "get saturation");
184 addUsage("[get] [gamm]", "get gamma");
185 addUsage("[get] [shut]", "get shutter");
186 addUsage("[get] [gain]", "get gain");
187 addUsage("[get] [iris]", "get iris");
188
189 addUsage("[get] [w]", "get width of image");
190 addUsage("[get] [h]", "get height of image");
191
192 return true;
193}
194
196 yarp::os::Bottle& response)
197{
198 int code = cmd.get(0).asVocab32();
199
200 auto* fgCtrlDC1394=dynamic_cast<IFrameGrabberControlsDC1394*>(fgCtrl);
201
202 switch (code)
203 {
204 // first check if requests are coming from new iFrameGrabberControl2 interface and process them
206 {
207 return ifgCtrl_Responder.respond(cmd, response); // I don't like all those returns everywhere!!! :-(
208 } break;
210 {
211 return rgbParser.respond(cmd,response);
212 } break;
214 // DC1394 COMMANDS
217 {
218 if (fgCtrlDC1394)
219 {
220 int codeDC1394 = cmd.get(1).asVocab32();
221 switch(codeDC1394)
222 {
223 case VOCAB_DRGETMSK: // VOCAB_DRGETMSK 12
224 response.addInt32(int(fgCtrlDC1394->getVideoModeMaskDC1394()));
225 return true;
226 case VOCAB_DRGETVMD: // VOCAB_DRGETVMD 13
227 response.addInt32(int(fgCtrlDC1394->getVideoModeDC1394()));
228 return true;
229 case VOCAB_DRSETVMD: // VOCAB_DRSETVMD 14
230 response.addInt32(int(fgCtrlDC1394->setVideoModeDC1394(cmd.get(1).asInt32())));
231 return true;
232 case VOCAB_DRGETFPM: // VOCAB_DRGETFPM 15
233 response.addInt32(int(fgCtrlDC1394->getFPSMaskDC1394()));
234 return true;
235 case VOCAB_DRGETFPS: // VOCAB_DRGETFPS 16
236 response.addInt32(int(fgCtrlDC1394->getFPSDC1394()));
237 return true;
238 case VOCAB_DRSETFPS: // VOCAB_DRSETFPS 17
239 response.addInt32(int(fgCtrlDC1394->setFPSDC1394(cmd.get(1).asInt32())));
240 return true;
241
242 case VOCAB_DRGETISO: // VOCAB_DRGETISO 18
243 response.addInt32(int(fgCtrlDC1394->getISOSpeedDC1394()));
244 return true;
245 case VOCAB_DRSETISO: // VOCAB_DRSETISO 19
246 response.addInt32(int(fgCtrlDC1394->setISOSpeedDC1394(cmd.get(1).asInt32())));
247 return true;
248
249 case VOCAB_DRGETCCM: // VOCAB_DRGETCCM 20
250 response.addInt32(int(fgCtrlDC1394->getColorCodingMaskDC1394(cmd.get(1).asInt32())));
251 return true;
252 case VOCAB_DRGETCOD: // VOCAB_DRGETCOD 21
253 response.addInt32(int(fgCtrlDC1394->getColorCodingDC1394()));
254 return true;
255 case VOCAB_DRSETCOD: // VOCAB_DRSETCOD 22
256 response.addInt32(int(fgCtrlDC1394->setColorCodingDC1394(cmd.get(1).asInt32())));
257 return true;
258 case VOCAB_DRGETF7M: // VOCAB_DRGETF7M 25
259 {
260 unsigned int xstep,ystep,xdim,ydim,xoffstep,yoffstep;
261 fgCtrlDC1394->getFormat7MaxWindowDC1394(xdim,ydim,xstep,ystep,xoffstep,yoffstep);
262 response.addInt32(xdim);
263 response.addInt32(ydim);
264 response.addInt32(xstep);
265 response.addInt32(ystep);
266 response.addInt32(xoffstep);
267 response.addInt32(yoffstep);
268 }
269 return true;
270 case VOCAB_DRGETWF7: // VOCAB_DRGETWF7 26
271 {
272 unsigned int xdim,ydim;
273 int x0,y0;
274 fgCtrlDC1394->getFormat7WindowDC1394(xdim,ydim,x0,y0);
275 response.addInt32(xdim);
276 response.addInt32(ydim);
277 response.addInt32(x0);
278 response.addInt32(y0);
279 }
280 return true;
281 case VOCAB_DRSETWF7: // VOCAB_DRSETWF7 27
282 response.addInt32(int(fgCtrlDC1394->setFormat7WindowDC1394(cmd.get(1).asInt32(),cmd.get(2).asInt32(),cmd.get(3).asInt32(),cmd.get(4).asInt32())));
283 return true;
284 case VOCAB_DRSETOPM: // VOCAB_DRSETOPM 28
285 response.addInt32(int(fgCtrlDC1394->setOperationModeDC1394(cmd.get(1).asInt32()!=0)));
286 return true;
287 case VOCAB_DRGETOPM: // VOCAB_DRGETOPM 29
288 response.addInt32(fgCtrlDC1394->getOperationModeDC1394());
289 return true;
290
291 case VOCAB_DRSETTXM: // VOCAB_DRSETTXM 30
292 response.addInt32(int(fgCtrlDC1394->setTransmissionDC1394(cmd.get(1).asInt32()!=0)));
293 return true;
294 case VOCAB_DRGETTXM: // VOCAB_DRGETTXM 31
295 response.addInt32(fgCtrlDC1394->getTransmissionDC1394());
296 return true;
297 /*
298 case VOCAB_DRSETBAY: // VOCAB_DRSETBAY 32
299 response.addInt32(int(fgCtrlDC1394->setBayerDC1394(bool(cmd.get(1).asInt32()))));
300 return true;
301 case VOCAB_DRGETBAY: // VOCAB_DRGETBAY 33
302 response.addInt32(fgCtrlDC1394->getBayerDC1394());
303 return true;
304 */
305 case VOCAB_DRSETBCS: // VOCAB_DRSETBCS 34
306 response.addInt32(int(fgCtrlDC1394->setBroadcastDC1394(cmd.get(1).asInt32()!=0)));
307 return true;
308 case VOCAB_DRSETDEF: // VOCAB_DRSETDEF 35
309 response.addInt32(int(fgCtrlDC1394->setDefaultsDC1394()));
310 return true;
311 case VOCAB_DRSETRST: // VOCAB_DRSETRST 36
312 response.addInt32(int(fgCtrlDC1394->setResetDC1394()));
313 return true;
314 case VOCAB_DRSETPWR: // VOCAB_DRSETPWR 37
315 response.addInt32(int(fgCtrlDC1394->setPowerDC1394(cmd.get(1).asInt32()!=0)));
316 return true;
317 case VOCAB_DRSETCAP: // VOCAB_DRSETCAP 38
318 response.addInt32(int(fgCtrlDC1394->setCaptureDC1394(cmd.get(1).asInt32()!=0)));
319 return true;
320 case VOCAB_DRSETBPP: // VOCAB_DRSETCAP 39
321 response.addInt32(int(fgCtrlDC1394->setBytesPerPacketDC1394(cmd.get(1).asInt32())));
322 return true;
323 case VOCAB_DRGETBPP: // VOCAB_DRGETTXM 40
324 response.addInt32(fgCtrlDC1394->getBytesPerPacketDC1394());
325 return true;
326 default:
327 return DeviceResponder::respond(cmd,response);
328 }
329 }
330 }
331 }
332 yCError(SERVERFRAMEGRABBER) << "ServerFrameGrabber: command not recognized" << cmd.toString();
333 return DeviceResponder::respond(cmd,response);
334}
335
336/*
337bool ServerFrameGrabber::read(ConnectionReader& connection)
338{
339 yarp::os::Bottle cmd, response;
340 if (!cmd.read(connection)) { return false; }
341 yCDebug(SERVERFRAMEGRABBER, "command received: %s\n", cmd.toString().c_str());
342 int code = cmd.get(0).asVocab32();
343 switch (code) {
344 case VOCAB_SET:
345 yCDebug(SERVERFRAMEGRABBER, "set command received\n");
346 {
347 bool ok = false;
348 switch(cmd.get(1).asVocab32()) {
349 case VOCAB_BRIGHTNESS:
350 ok = setBrightness(cmd.get(2).asFloat64());
351 break;
352 case VOCAB_SHUTTER:
353 ok = setShutter(cmd.get(2).asFloat64());
354 break;
355 case VOCAB_GAIN:
356 ok = setGain(cmd.get(2).asFloat64());
357 break;
358 case VOCAB_WHITE:
359 ok = setWhiteBalance(cmd.get(2).asFloat64(),
360 cmd.get(3).asFloat64());
361 break;
362 }
363 }
364 break;
365 case VOCAB_GET:
366 yCDebug(SERVERFRAMEGRABBER, "get command received\n");
367 {
368 bool ok = false;
369 response.addVocab32(VOCAB_IS);
370 response.add(cmd.get(1));
371 switch(cmd.get(1).asVocab32()) {
372 case VOCAB_BRIGHTNESS:
373 ok = true;
374 response.addFloat64(getBrightness());
375 break;
376 case VOCAB_SHUTTER:
377 ok = true;
378 response.addFloat64(getShutter());
379 break;
380 case VOCAB_GAIN:
381 ok = true;
382 response.addFloat64(getGain());
383 break;
384 case VOCAB_WIDTH:
385 // normally, this would come from stream information
386 ok = true;
387 response.addInt32(width());
388 break;
389 case VOCAB_HEIGHT:
390 // normally, this would come from stream information
391 ok = true;
392 response.addInt32(height());
393 break;
394
395 case VOCAB_WHITE:
396
397 double r;
398
399 double g;
400
401 ok=getWhiteBalance(r, g);
402
403 response.addFloat64(r);
404
405 response.addFloat64(g);
406 }
407 if (!ok) {
408 // leave answer blank
409 }
410 }
411 break;
412 }
413 if (response.size()>=1) {
414 ConnectionWriter *writer = connection.getWriter();
415 if (writer!=NULL) {
416 response.write(*writer);
417 yCDebug(SERVERFRAMEGRABBER, "response sent: %s\n", response.toString().c_str());
418 }
419 }
420 return true;
421}
422*/
423
425{
426 return getImage(image);
427}
428
430{
431 return getImage(image);
432}
433
435{
436 return getDatum(imageSound.head,imageSound.body);
437}
438
440 yarp::sig::Sound& sound)
441{
442 return getAudioVisual(image,sound);
443}
444
446{
447 if (fgImage==nullptr) { return false; }
448 return fgImage->getImage(image);
449}
450
452{
453 if (fgImageRaw==nullptr) { return false; }
454 return fgImageRaw->getImage(image);
455}
456
458 yarp::sig::Sound& sound)
459{
460 if (fgAv==nullptr) { return false; }
461 return fgAv->getAudioVisual(image,sound);
462}
463
465{
466 if (fgImage) { return fgImage->height(); }
467 if (fgImageRaw) { return fgImageRaw->height(); }
468 return 0;
469}
470
472{
473 if (fgImage) { return fgImage->width(); }
474 if (fgImageRaw) { return fgImageRaw->width(); }
475 return 0;
476}
477
479{
480 return close();
481}
482
484{
485 if (singleThreaded) {
486 return false;
487 }
488 return active;
489}
490
491
493{
494 if (singleThreaded) {
495 if (active) {
496 thread.step();
497 }
498 return active;
499 }
500 return false;
501}
502
constexpr yarp::conf::vocab32_t VOCAB_DRGETISO
Definition: CameraVocabs.h:73
constexpr yarp::conf::vocab32_t VOCAB_DRSETFPS
Definition: CameraVocabs.h:72
constexpr yarp::conf::vocab32_t VOCAB_DRSETDEF
Definition: CameraVocabs.h:90
constexpr yarp::conf::vocab32_t VOCAB_DRSETVMD
Definition: CameraVocabs.h:69
constexpr yarp::conf::vocab32_t VOCAB_RGB_VISUAL_PARAMS
Definition: CameraVocabs.h:18
constexpr yarp::conf::vocab32_t VOCAB_FRAMEGRABBER_CONTROL_DC1394
Definition: CameraVocabs.h:40
constexpr yarp::conf::vocab32_t VOCAB_DRSETWF7
Definition: CameraVocabs.h:82
constexpr yarp::conf::vocab32_t VOCAB_DRGETF7M
Definition: CameraVocabs.h:80
constexpr yarp::conf::vocab32_t VOCAB_DRSETBCS
Definition: CameraVocabs.h:89
constexpr yarp::conf::vocab32_t VOCAB_DRSETCAP
Definition: CameraVocabs.h:93
constexpr yarp::conf::vocab32_t VOCAB_DRSETCOD
Definition: CameraVocabs.h:77
constexpr yarp::conf::vocab32_t VOCAB_DRGETMSK
Definition: CameraVocabs.h:67
constexpr yarp::conf::vocab32_t VOCAB_DRGETFPS
Definition: CameraVocabs.h:71
constexpr yarp::conf::vocab32_t VOCAB_DRSETOPM
Definition: CameraVocabs.h:83
constexpr yarp::conf::vocab32_t VOCAB_DRGETBPP
Definition: CameraVocabs.h:95
constexpr yarp::conf::vocab32_t VOCAB_DRSETPWR
Definition: CameraVocabs.h:92
constexpr yarp::conf::vocab32_t VOCAB_DRGETCCM
Definition: CameraVocabs.h:75
constexpr yarp::conf::vocab32_t VOCAB_DRGETTXM
Definition: CameraVocabs.h:86
constexpr yarp::conf::vocab32_t VOCAB_DRSETRST
Definition: CameraVocabs.h:91
constexpr yarp::conf::vocab32_t VOCAB_DRSETBPP
Definition: CameraVocabs.h:94
constexpr yarp::conf::vocab32_t VOCAB_DRGETWF7
Definition: CameraVocabs.h:81
constexpr yarp::conf::vocab32_t VOCAB_DRGETVMD
Definition: CameraVocabs.h:68
constexpr yarp::conf::vocab32_t VOCAB_DRGETFPM
Definition: CameraVocabs.h:70
constexpr yarp::conf::vocab32_t VOCAB_DRSETTXM
Definition: CameraVocabs.h:85
constexpr yarp::conf::vocab32_t VOCAB_FRAMEGRABBER_CONTROL
Definition: CameraVocabs.h:39
constexpr yarp::conf::vocab32_t VOCAB_DRGETCOD
Definition: CameraVocabs.h:76
constexpr yarp::conf::vocab32_t VOCAB_DRSETISO
Definition: CameraVocabs.h:74
constexpr yarp::conf::vocab32_t VOCAB_DRGETOPM
Definition: CameraVocabs.h:84
bool close() override
Close the DeviceDriver.
virtual bool respond(const yarp::os::Bottle &command, yarp::os::Bottle &reply) override
Respond to a message.
int width() const override
Return the width of each frame.
bool getDatum(yarp::sig::ImageOf< yarp::sig::PixelRgb > &image) override
bool stopService() override
Shut down the service, whatever it is.
bool startService() override
Initiate the service, whatever it is.
bool getImage(yarp::sig::ImageOf< yarp::sig::PixelRgb > &image) override
Get an image from the frame grabber.
bool open(yarp::os::Searchable &config) override
Configure with a set of options.
int height() const override
Return the height of each frame.
virtual bool getAudioVisual(yarp::sig::ImageOf< yarp::sig::PixelRgb > &image, yarp::sig::Sound &sound) override
Get an image and sound.
bool updateService() override
Give the service the chance to run for a while.
bool view(T *&x)
Get an interface to the device driver.
Definition: DeviceDriver.h:88
void addUsage(const char *txt, const char *explain=nullptr)
Add information about a message that the respond() method understands.
virtual bool getAudioVisual(yarp::sig::ImageOf< yarp::sig::PixelRgb > &image, yarp::sig::Sound &sound)=0
Get an image and sound.
virtual int width() const =0
Return the width of each frame.
virtual int height() const =0
Return the height of each frame.
virtual bool getImage(ImageType &image)=0
Get an image from the frame grabber.
bool isValid() const
Check if device is valid.
Definition: PolyDriver.cpp:196
bool open(const std::string &txt)
Construct and configure a device by its common name.
Definition: PolyDriver.cpp:140
A simple collection of objects that can be described and transmitted in a portable way.
Definition: Bottle.h:64
Value & get(size_type index) const
Reads a Value v from a certain part of the list.
Definition: Bottle.cpp:246
Bottle tail() const
Get all but the first element of a bottle.
Definition: Bottle.cpp:388
void addInt32(std::int32_t x)
Places a 32-bit integer in the bottle, at the end of the list.
Definition: Bottle.cpp:140
std::string toString() const override
Gives a human-readable textual representation of the bottle.
Definition: Bottle.cpp:211
void setWriteOnly()
Shorthand for setInputMode(false), setOutputMode(true), setRpcMode(false)
Definition: Contactable.cpp:26
void step()
Call this to "step" the thread rather than starting it.
A mini-server for network communication.
Definition: Port.h:46
void setReader(PortReader &reader) override
Set an external reader for port data.
Definition: Port.cpp:511
void promiseType(const Type &typ) override
Commit the port to a particular type of data.
Definition: Port.cpp:657
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
Definition: Port.cpp:79
Group a pair of objects to be sent and received together.
Definition: PortablePair.h:47
BODY body
An object of the second type (BODY).
Definition: PortablePair.h:57
HEAD head
An object of the first type (HEAD).
Definition: PortablePair.h:52
A class for storing options and configuration information.
Definition: Property.h:33
void fromString(const std::string &txt, bool wipe=true)
Interprets a string as a list of properties.
Definition: Property.cpp:1063
void put(const std::string &key, const std::string &value)
Associate the given key with the given string.
Definition: Property.cpp:1015
void unput(const std::string &key)
Remove the association from the given key to a value, if present.
Definition: Property.cpp:1046
virtual bool attach(Runnable &helper)
Definition: RateThread.cpp:201
bool open(double framerate=-1, bool polling=false)
Definition: RateThread.cpp:217
A base class for nested structures that can be searched.
Definition: Searchable.h:63
virtual bool check(const std::string &key) const =0
Check if there exists a property of the given name.
virtual std::string toString() const =0
Return a standard text representation of the content of the object.
virtual Bottle & findGroup(const std::string &key) const =0
Gets a list corresponding to a given keyword.
A single value (typically within a Bottle).
Definition: Value.h:43
virtual bool isString() const
Checks if value is a string.
Definition: Value.cpp:156
virtual yarp::conf::vocab32_t asVocab32() const
Get vocabulary identifier as an integer.
Definition: Value.cpp:228
virtual std::int32_t asInt32() const
Get 32-bit integer value.
Definition: Value.cpp:204
std::string toString() const override
Return a standard text representation of the content of the object.
Definition: Value.cpp:356
bool respond(const yarp::os::Bottle &cmd, yarp::os::Bottle &response) override
Respond to a message.
bool configure(yarp::dev::IFrameGrabberControls *interface)
bool configure(yarp::dev::IRgbVisualParams *interface)
bool respond(const yarp::os::Bottle &cmd, yarp::os::Bottle &response) override
Respond to a message.
Class for storing sounds See Audio in YARP for additional documentation on YARP audio.
Definition: Sound.h:25
#define yCError(component,...)
Definition: LogComponent.h:213
#define yCAssert(component, x)
Definition: LogComponent.h:240
#define yCWarning(component,...)
Definition: LogComponent.h:192
#define YARP_LOG_COMPONENT(name,...)
Definition: LogComponent.h:76
For streams capable of holding different kinds of content, check what they actually have.
An interface to the operating system, including Port based communication.
#define YARP_WARNING_POP
Ends a temporary alteration of the enabled warnings.
Definition: system.h:334
#define YARP_WARNING_PUSH
Starts a temporary alteration of the enabled warnings.
Definition: system.h:333
#define YARP_DISABLE_DEPRECATED_WARNING
Disable deprecated warnings in the following code.
Definition: system.h:335