Fawkes API  Fawkes Development Version
Roomba500Interface.cpp
1 
2 /***************************************************************************
3  * Roomba500Interface.cpp - Fawkes BlackBoard Interface - Roomba500Interface
4  *
5  * Templated created: Thu Oct 12 10:49:19 2006
6  * Copyright 2011 Tim Niemueller
7  *
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version. A runtime exception applies to
14  * this software (see LICENSE.GPL_WRE file mentioned below for details).
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Library General Public License for more details.
20  *
21  * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22  */
23 
24 #include <interfaces/Roomba500Interface.h>
25 
26 #include <core/exceptions/software.h>
27 
28 #include <map>
29 #include <string>
30 #include <cstring>
31 #include <cstdlib>
32 
33 namespace fawkes {
34 
35 /** @class Roomba500Interface <interfaces/Roomba500Interface.h>
36  * Roomba500Interface Fawkes BlackBoard Interface.
37  *
38  Roomba 500 hardware interface.
39 
40  * @ingroup FawkesInterfaces
41  */
42 
43 
44 
45 /** Constructor */
46 Roomba500Interface::Roomba500Interface() : Interface()
47 {
48  data_size = sizeof(Roomba500Interface_data_t);
49  data_ptr = malloc(data_size);
50  data = (Roomba500Interface_data_t *)data_ptr;
51  data_ts = (interface_data_ts_t *)data_ptr;
52  memset(data_ptr, 0, data_size);
53  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
54  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
55  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
56  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
57  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
58  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
59  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
60  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
61  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
62  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
63  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
64  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
65  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
66  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
67  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
68  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
69  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
70  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
71  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
72  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
73  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
74  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
75  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
76  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
77  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
78  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
79  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
80  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
81  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
82  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
83  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
84  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
85  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
86  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
87  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
88  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
89  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
90  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
91  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
92  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
93  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
94  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
95  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
96  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
97  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
98  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
99  add_fieldinfo(IFT_ENUM, "mode", 1, &data->mode, "Mode", &enum_map_Mode);
100  add_fieldinfo(IFT_BOOL, "wheel_drop_left", 1, &data->wheel_drop_left);
101  add_fieldinfo(IFT_BOOL, "wheel_drop_right", 1, &data->wheel_drop_right);
102  add_fieldinfo(IFT_BOOL, "bump_left", 1, &data->bump_left);
103  add_fieldinfo(IFT_BOOL, "bump_right", 1, &data->bump_right);
104  add_fieldinfo(IFT_BOOL, "wall", 1, &data->wall);
105  add_fieldinfo(IFT_BOOL, "cliff_left", 1, &data->cliff_left);
106  add_fieldinfo(IFT_BOOL, "cliff_front_left", 1, &data->cliff_front_left);
107  add_fieldinfo(IFT_BOOL, "cliff_front_right", 1, &data->cliff_front_right);
108  add_fieldinfo(IFT_BOOL, "cliff_right", 1, &data->cliff_right);
109  add_fieldinfo(IFT_BOOL, "virtual_wall", 1, &data->virtual_wall);
110  add_fieldinfo(IFT_BOOL, "overcurrent_side_brush", 1, &data->overcurrent_side_brush);
111  add_fieldinfo(IFT_BOOL, "overcurrent_main_brush", 1, &data->overcurrent_main_brush);
112  add_fieldinfo(IFT_BOOL, "overcurrent_left_wheel", 1, &data->overcurrent_left_wheel);
113  add_fieldinfo(IFT_BOOL, "overcurrent_right_wheel", 1, &data->overcurrent_right_wheel);
114  add_fieldinfo(IFT_BOOL, "dirt_detect", 1, &data->dirt_detect);
115  add_fieldinfo(IFT_ENUM, "ir_opcode_omni", 1, &data->ir_opcode_omni, "InfraredCharacter", &enum_map_InfraredCharacter);
116  add_fieldinfo(IFT_BOOL, "button_clean", 1, &data->button_clean);
117  add_fieldinfo(IFT_BOOL, "button_spot", 1, &data->button_spot);
118  add_fieldinfo(IFT_BOOL, "button_dock", 1, &data->button_dock);
119  add_fieldinfo(IFT_BOOL, "button_minute", 1, &data->button_minute);
120  add_fieldinfo(IFT_BOOL, "button_hour", 1, &data->button_hour);
121  add_fieldinfo(IFT_BOOL, "button_day", 1, &data->button_day);
122  add_fieldinfo(IFT_BOOL, "button_schedule", 1, &data->button_schedule);
123  add_fieldinfo(IFT_BOOL, "button_clock", 1, &data->button_clock);
124  add_fieldinfo(IFT_INT16, "distance", 1, &data->distance);
125  add_fieldinfo(IFT_INT16, "angle", 1, &data->angle);
126  add_fieldinfo(IFT_ENUM, "charging_state", 1, &data->charging_state, "ChargingState", &enum_map_ChargingState);
127  add_fieldinfo(IFT_UINT16, "voltage", 1, &data->voltage);
128  add_fieldinfo(IFT_INT16, "current", 1, &data->current);
129  add_fieldinfo(IFT_INT8, "temperature", 1, &data->temperature);
130  add_fieldinfo(IFT_UINT16, "battery_charge", 1, &data->battery_charge);
131  add_fieldinfo(IFT_UINT16, "battery_capacity", 1, &data->battery_capacity);
132  add_fieldinfo(IFT_UINT16, "wall_signal", 1, &data->wall_signal);
133  add_fieldinfo(IFT_UINT16, "cliff_left_signal", 1, &data->cliff_left_signal);
134  add_fieldinfo(IFT_UINT16, "cliff_front_left_signal", 1, &data->cliff_front_left_signal);
135  add_fieldinfo(IFT_UINT16, "cliff_front_right_signal", 1, &data->cliff_front_right_signal);
136  add_fieldinfo(IFT_UINT16, "cliff_right_signal", 1, &data->cliff_right_signal);
137  add_fieldinfo(IFT_BOOL, "home_base_charger_available", 1, &data->home_base_charger_available);
138  add_fieldinfo(IFT_BOOL, "internal_charger_available", 1, &data->internal_charger_available);
139  add_fieldinfo(IFT_UINT8, "song_number", 1, &data->song_number);
140  add_fieldinfo(IFT_BOOL, "song_playing", 1, &data->song_playing);
141  add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
142  add_fieldinfo(IFT_INT16, "radius", 1, &data->radius);
143  add_fieldinfo(IFT_INT16, "velocity_right", 1, &data->velocity_right);
144  add_fieldinfo(IFT_INT16, "velocity_left", 1, &data->velocity_left);
145  add_fieldinfo(IFT_UINT16, "encoder_counts_left", 1, &data->encoder_counts_left);
146  add_fieldinfo(IFT_UINT16, "encoder_counts_right", 1, &data->encoder_counts_right);
147  add_fieldinfo(IFT_BOOL, "bumper_left", 1, &data->bumper_left);
148  add_fieldinfo(IFT_BOOL, "bumper_front_left", 1, &data->bumper_front_left);
149  add_fieldinfo(IFT_BOOL, "bumper_center_left", 1, &data->bumper_center_left);
150  add_fieldinfo(IFT_BOOL, "bumper_center_right", 1, &data->bumper_center_right);
151  add_fieldinfo(IFT_BOOL, "bumper_front_right", 1, &data->bumper_front_right);
152  add_fieldinfo(IFT_BOOL, "bumper_right", 1, &data->bumper_right);
153  add_fieldinfo(IFT_UINT16, "light_bump_left", 1, &data->light_bump_left);
154  add_fieldinfo(IFT_UINT16, "light_bump_front_left", 1, &data->light_bump_front_left);
155  add_fieldinfo(IFT_UINT16, "light_bump_center_left", 1, &data->light_bump_center_left);
156  add_fieldinfo(IFT_UINT16, "light_bump_center_right", 1, &data->light_bump_center_right);
157  add_fieldinfo(IFT_UINT16, "light_bump_front_right", 1, &data->light_bump_front_right);
158  add_fieldinfo(IFT_UINT16, "light_bump_right", 1, &data->light_bump_right);
159  add_fieldinfo(IFT_ENUM, "ir_opcode_left", 1, &data->ir_opcode_left, "InfraredCharacter", &enum_map_InfraredCharacter);
160  add_fieldinfo(IFT_ENUM, "ir_opcode_right", 1, &data->ir_opcode_right, "InfraredCharacter", &enum_map_InfraredCharacter);
161  add_fieldinfo(IFT_INT16, "left_motor_current", 1, &data->left_motor_current);
162  add_fieldinfo(IFT_INT16, "right_motor_current", 1, &data->right_motor_current);
163  add_fieldinfo(IFT_INT16, "main_brush_current", 1, &data->main_brush_current);
164  add_fieldinfo(IFT_INT16, "side_brush_current", 1, &data->side_brush_current);
165  add_fieldinfo(IFT_BOOL, "caster_stasis", 1, &data->caster_stasis);
166  add_messageinfo("StopMessage");
167  add_messageinfo("DockMessage");
168  add_messageinfo("SetModeMessage");
169  add_messageinfo("DriveStraightMessage");
170  add_messageinfo("DriveMessage");
171  add_messageinfo("SetMotorsMessage");
172  unsigned char tmp_hash[] = {0x60, 0xa1, 0x1e, 0x86, 0x89, 0x2, 0x20, 0x34, 0x89, 0x32, 0xdb, 0x69, 0xee, 0x12, 0x86, 0x43};
173  set_hash(tmp_hash);
174 }
175 
176 /** Destructor */
177 Roomba500Interface::~Roomba500Interface()
178 {
179  free(data_ptr);
180 }
181 /** Convert Mode constant to string.
182  * @param value value to convert to string
183  * @return constant value as string.
184  */
185 const char *
186 Roomba500Interface::tostring_Mode(Mode value) const
187 {
188  switch (value) {
189  case MODE_OFF: return "MODE_OFF";
190  case MODE_PASSIVE: return "MODE_PASSIVE";
191  case MODE_SAFE: return "MODE_SAFE";
192  case MODE_FULL: return "MODE_FULL";
193  default: return "UNKNOWN";
194  }
195 }
196 /** Convert InfraredCharacter constant to string.
197  * @param value value to convert to string
198  * @return constant value as string.
199  */
200 const char *
201 Roomba500Interface::tostring_InfraredCharacter(InfraredCharacter value) const
202 {
203  switch (value) {
204  case IR_NONE: return "IR_NONE";
205  case IR_REMOTE_LEFT: return "IR_REMOTE_LEFT";
206  case IR_REMOTE_FORWARD: return "IR_REMOTE_FORWARD";
207  case IR_REMOTE_RIGHT: return "IR_REMOTE_RIGHT";
208  case IR_REMOTE_SPOT: return "IR_REMOTE_SPOT";
209  case IR_REMOTE_MAX: return "IR_REMOTE_MAX";
210  case IR_REMOTE_SMALL: return "IR_REMOTE_SMALL";
211  case IR_REMOTE_MEDIUM: return "IR_REMOTE_MEDIUM";
212  case IR_REMOTE_LARGE_CLEAN: return "IR_REMOTE_LARGE_CLEAN";
213  case IR_REMOTE_STOP: return "IR_REMOTE_STOP";
214  case IR_REMOTE_POWER: return "IR_REMOTE_POWER";
215  case IR_REMOTE_ARC_LEFT: return "IR_REMOTE_ARC_LEFT";
216  case IR_REMOTE_ARC_RIGHT: return "IR_REMOTE_ARC_RIGHT";
217  case IR_REMOTE_STOP2: return "IR_REMOTE_STOP2";
218  case IR_SCHED_REMOTE_DOWNLOAD: return "IR_SCHED_REMOTE_DOWNLOAD";
219  case IR_SCHED_REMOTE_SEEK_DOCK: return "IR_SCHED_REMOTE_SEEK_DOCK";
220  case IR_DISC_DOCK_RESERVED: return "IR_DISC_DOCK_RESERVED";
221  case IR_DISC_DOCK_RED_BUOY: return "IR_DISC_DOCK_RED_BUOY";
222  case IR_DISC_DOCK_GREEN_BUOY: return "IR_DISC_DOCK_GREEN_BUOY";
223  case IR_DISC_DOCK_FORCE_FIELD: return "IR_DISC_DOCK_FORCE_FIELD";
224  case IR_DISC_DOCK_RED_GREEN_BUOY: return "IR_DISC_DOCK_RED_GREEN_BUOY";
225  case IR_DISC_DOCK_RED_BUOY_FORCE_FIELD: return "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
226  case IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD: return "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
227  case IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD: return "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
228  case IR_DOCK_RESERVED: return "IR_DOCK_RESERVED";
229  case IR_DOCK_RED_BUOY: return "IR_DOCK_RED_BUOY";
230  case IR_DOCK_GREEN_BUOY: return "IR_DOCK_GREEN_BUOY";
231  case IR_DOCK_FORCE_FIELD: return "IR_DOCK_FORCE_FIELD";
232  case IR_DOCK_RED_GREEN_BUOY: return "IR_DOCK_RED_GREEN_BUOY";
233  case IR_DOCK_RED_BUOY_FORCE_FIELD: return "IR_DOCK_RED_BUOY_FORCE_FIELD";
234  case IR_DOCK_GREEN_BUOY_FORCE_FIELD: return "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
235  case IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD: return "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
236  case IR_VIRTUAL_WALL: return "IR_VIRTUAL_WALL";
237  default: return "UNKNOWN";
238  }
239 }
240 /** Convert ChargingState constant to string.
241  * @param value value to convert to string
242  * @return constant value as string.
243  */
244 const char *
245 Roomba500Interface::tostring_ChargingState(ChargingState value) const
246 {
247  switch (value) {
248  case CHARGING_NO: return "CHARGING_NO";
249  case CHARGING_RECONDITIONING: return "CHARGING_RECONDITIONING";
250  case CHARGING_FULL: return "CHARGING_FULL";
251  case CHARGING_TRICKLE: return "CHARGING_TRICKLE";
252  case CHARGING_WAITING: return "CHARGING_WAITING";
253  case CHARGING_ERROR: return "CHARGING_ERROR";
254  default: return "UNKNOWN";
255  }
256 }
257 /** Convert BrushState constant to string.
258  * @param value value to convert to string
259  * @return constant value as string.
260  */
261 const char *
262 Roomba500Interface::tostring_BrushState(BrushState value) const
263 {
264  switch (value) {
265  case BRUSHSTATE_OFF: return "BRUSHSTATE_OFF";
266  case BRUSHSTATE_FORWARD: return "BRUSHSTATE_FORWARD";
267  case BRUSHSTATE_BACKWARD: return "BRUSHSTATE_BACKWARD";
268  default: return "UNKNOWN";
269  }
270 }
271 /* Methods */
272 /** Get mode value.
273  * Open Interface mode.
274  * @return mode value
275  */
277 Roomba500Interface::mode() const
278 {
279  return (Roomba500Interface::Mode)data->mode;
280 }
281 
282 /** Get maximum length of mode value.
283  * @return length of mode value, can be length of the array or number of
284  * maximum number of characters for a string
285  */
286 size_t
287 Roomba500Interface::maxlenof_mode() const
288 {
289  return 1;
290 }
291 
292 /** Set mode value.
293  * Open Interface mode.
294  * @param new_mode new mode value
295  */
296 void
297 Roomba500Interface::set_mode(const Mode new_mode)
298 {
299  data->mode = new_mode;
300  data_changed = true;
301 }
302 
303 /** Get wheel_drop_left value.
304  * Left wheel drop sensor.
305  * @return wheel_drop_left value
306  */
307 bool
308 Roomba500Interface::is_wheel_drop_left() const
309 {
310  return data->wheel_drop_left;
311 }
312 
313 /** Get maximum length of wheel_drop_left value.
314  * @return length of wheel_drop_left value, can be length of the array or number of
315  * maximum number of characters for a string
316  */
317 size_t
318 Roomba500Interface::maxlenof_wheel_drop_left() const
319 {
320  return 1;
321 }
322 
323 /** Set wheel_drop_left value.
324  * Left wheel drop sensor.
325  * @param new_wheel_drop_left new wheel_drop_left value
326  */
327 void
328 Roomba500Interface::set_wheel_drop_left(const bool new_wheel_drop_left)
329 {
330  data->wheel_drop_left = new_wheel_drop_left;
331  data_changed = true;
332 }
333 
334 /** Get wheel_drop_right value.
335  * Right wheel drop sensor.
336  * @return wheel_drop_right value
337  */
338 bool
339 Roomba500Interface::is_wheel_drop_right() const
340 {
341  return data->wheel_drop_right;
342 }
343 
344 /** Get maximum length of wheel_drop_right value.
345  * @return length of wheel_drop_right value, can be length of the array or number of
346  * maximum number of characters for a string
347  */
348 size_t
349 Roomba500Interface::maxlenof_wheel_drop_right() const
350 {
351  return 1;
352 }
353 
354 /** Set wheel_drop_right value.
355  * Right wheel drop sensor.
356  * @param new_wheel_drop_right new wheel_drop_right value
357  */
358 void
359 Roomba500Interface::set_wheel_drop_right(const bool new_wheel_drop_right)
360 {
361  data->wheel_drop_right = new_wheel_drop_right;
362  data_changed = true;
363 }
364 
365 /** Get bump_left value.
366  * Bump on left.
367  * @return bump_left value
368  */
369 bool
370 Roomba500Interface::is_bump_left() const
371 {
372  return data->bump_left;
373 }
374 
375 /** Get maximum length of bump_left value.
376  * @return length of bump_left value, can be length of the array or number of
377  * maximum number of characters for a string
378  */
379 size_t
380 Roomba500Interface::maxlenof_bump_left() const
381 {
382  return 1;
383 }
384 
385 /** Set bump_left value.
386  * Bump on left.
387  * @param new_bump_left new bump_left value
388  */
389 void
390 Roomba500Interface::set_bump_left(const bool new_bump_left)
391 {
392  data->bump_left = new_bump_left;
393  data_changed = true;
394 }
395 
396 /** Get bump_right value.
397  * Bump on right.
398  * @return bump_right value
399  */
400 bool
401 Roomba500Interface::is_bump_right() const
402 {
403  return data->bump_right;
404 }
405 
406 /** Get maximum length of bump_right value.
407  * @return length of bump_right value, can be length of the array or number of
408  * maximum number of characters for a string
409  */
410 size_t
411 Roomba500Interface::maxlenof_bump_right() const
412 {
413  return 1;
414 }
415 
416 /** Set bump_right value.
417  * Bump on right.
418  * @param new_bump_right new bump_right value
419  */
420 void
421 Roomba500Interface::set_bump_right(const bool new_bump_right)
422 {
423  data->bump_right = new_bump_right;
424  data_changed = true;
425 }
426 
427 /** Get wall value.
428  * Wall sensor.
429  * @return wall value
430  */
431 bool
432 Roomba500Interface::is_wall() const
433 {
434  return data->wall;
435 }
436 
437 /** Get maximum length of wall value.
438  * @return length of wall value, can be length of the array or number of
439  * maximum number of characters for a string
440  */
441 size_t
442 Roomba500Interface::maxlenof_wall() const
443 {
444  return 1;
445 }
446 
447 /** Set wall value.
448  * Wall sensor.
449  * @param new_wall new wall value
450  */
451 void
452 Roomba500Interface::set_wall(const bool new_wall)
453 {
454  data->wall = new_wall;
455  data_changed = true;
456 }
457 
458 /** Get cliff_left value.
459  * Cliff detected left.
460  * @return cliff_left value
461  */
462 bool
463 Roomba500Interface::is_cliff_left() const
464 {
465  return data->cliff_left;
466 }
467 
468 /** Get maximum length of cliff_left value.
469  * @return length of cliff_left value, can be length of the array or number of
470  * maximum number of characters for a string
471  */
472 size_t
473 Roomba500Interface::maxlenof_cliff_left() const
474 {
475  return 1;
476 }
477 
478 /** Set cliff_left value.
479  * Cliff detected left.
480  * @param new_cliff_left new cliff_left value
481  */
482 void
483 Roomba500Interface::set_cliff_left(const bool new_cliff_left)
484 {
485  data->cliff_left = new_cliff_left;
486  data_changed = true;
487 }
488 
489 /** Get cliff_front_left value.
490  * Cliff detected front left.
491  * @return cliff_front_left value
492  */
493 bool
494 Roomba500Interface::is_cliff_front_left() const
495 {
496  return data->cliff_front_left;
497 }
498 
499 /** Get maximum length of cliff_front_left value.
500  * @return length of cliff_front_left value, can be length of the array or number of
501  * maximum number of characters for a string
502  */
503 size_t
504 Roomba500Interface::maxlenof_cliff_front_left() const
505 {
506  return 1;
507 }
508 
509 /** Set cliff_front_left value.
510  * Cliff detected front left.
511  * @param new_cliff_front_left new cliff_front_left value
512  */
513 void
514 Roomba500Interface::set_cliff_front_left(const bool new_cliff_front_left)
515 {
516  data->cliff_front_left = new_cliff_front_left;
517  data_changed = true;
518 }
519 
520 /** Get cliff_front_right value.
521  * Cliff detected front right.
522  * @return cliff_front_right value
523  */
524 bool
525 Roomba500Interface::is_cliff_front_right() const
526 {
527  return data->cliff_front_right;
528 }
529 
530 /** Get maximum length of cliff_front_right value.
531  * @return length of cliff_front_right value, can be length of the array or number of
532  * maximum number of characters for a string
533  */
534 size_t
535 Roomba500Interface::maxlenof_cliff_front_right() const
536 {
537  return 1;
538 }
539 
540 /** Set cliff_front_right value.
541  * Cliff detected front right.
542  * @param new_cliff_front_right new cliff_front_right value
543  */
544 void
545 Roomba500Interface::set_cliff_front_right(const bool new_cliff_front_right)
546 {
547  data->cliff_front_right = new_cliff_front_right;
548  data_changed = true;
549 }
550 
551 /** Get cliff_right value.
552  * Cliff detected right.
553  * @return cliff_right value
554  */
555 bool
556 Roomba500Interface::is_cliff_right() const
557 {
558  return data->cliff_right;
559 }
560 
561 /** Get maximum length of cliff_right value.
562  * @return length of cliff_right value, can be length of the array or number of
563  * maximum number of characters for a string
564  */
565 size_t
566 Roomba500Interface::maxlenof_cliff_right() const
567 {
568  return 1;
569 }
570 
571 /** Set cliff_right value.
572  * Cliff detected right.
573  * @param new_cliff_right new cliff_right value
574  */
575 void
576 Roomba500Interface::set_cliff_right(const bool new_cliff_right)
577 {
578  data->cliff_right = new_cliff_right;
579  data_changed = true;
580 }
581 
582 /** Get virtual_wall value.
583  * Virtual wall detected.
584  * @return virtual_wall value
585  */
586 bool
587 Roomba500Interface::is_virtual_wall() const
588 {
589  return data->virtual_wall;
590 }
591 
592 /** Get maximum length of virtual_wall value.
593  * @return length of virtual_wall value, can be length of the array or number of
594  * maximum number of characters for a string
595  */
596 size_t
597 Roomba500Interface::maxlenof_virtual_wall() const
598 {
599  return 1;
600 }
601 
602 /** Set virtual_wall value.
603  * Virtual wall detected.
604  * @param new_virtual_wall new virtual_wall value
605  */
606 void
607 Roomba500Interface::set_virtual_wall(const bool new_virtual_wall)
608 {
609  data->virtual_wall = new_virtual_wall;
610  data_changed = true;
611 }
612 
613 /** Get overcurrent_side_brush value.
614  * Overcurrent on side brush.
615  * @return overcurrent_side_brush value
616  */
617 bool
618 Roomba500Interface::is_overcurrent_side_brush() const
619 {
620  return data->overcurrent_side_brush;
621 }
622 
623 /** Get maximum length of overcurrent_side_brush value.
624  * @return length of overcurrent_side_brush value, can be length of the array or number of
625  * maximum number of characters for a string
626  */
627 size_t
628 Roomba500Interface::maxlenof_overcurrent_side_brush() const
629 {
630  return 1;
631 }
632 
633 /** Set overcurrent_side_brush value.
634  * Overcurrent on side brush.
635  * @param new_overcurrent_side_brush new overcurrent_side_brush value
636  */
637 void
638 Roomba500Interface::set_overcurrent_side_brush(const bool new_overcurrent_side_brush)
639 {
640  data->overcurrent_side_brush = new_overcurrent_side_brush;
641  data_changed = true;
642 }
643 
644 /** Get overcurrent_main_brush value.
645  * Overcurrent on main brush.
646  * @return overcurrent_main_brush value
647  */
648 bool
649 Roomba500Interface::is_overcurrent_main_brush() const
650 {
651  return data->overcurrent_main_brush;
652 }
653 
654 /** Get maximum length of overcurrent_main_brush value.
655  * @return length of overcurrent_main_brush value, can be length of the array or number of
656  * maximum number of characters for a string
657  */
658 size_t
659 Roomba500Interface::maxlenof_overcurrent_main_brush() const
660 {
661  return 1;
662 }
663 
664 /** Set overcurrent_main_brush value.
665  * Overcurrent on main brush.
666  * @param new_overcurrent_main_brush new overcurrent_main_brush value
667  */
668 void
669 Roomba500Interface::set_overcurrent_main_brush(const bool new_overcurrent_main_brush)
670 {
671  data->overcurrent_main_brush = new_overcurrent_main_brush;
672  data_changed = true;
673 }
674 
675 /** Get overcurrent_left_wheel value.
676  * Overcurrent on left wheel.
677  * @return overcurrent_left_wheel value
678  */
679 bool
680 Roomba500Interface::is_overcurrent_left_wheel() const
681 {
682  return data->overcurrent_left_wheel;
683 }
684 
685 /** Get maximum length of overcurrent_left_wheel value.
686  * @return length of overcurrent_left_wheel value, can be length of the array or number of
687  * maximum number of characters for a string
688  */
689 size_t
690 Roomba500Interface::maxlenof_overcurrent_left_wheel() const
691 {
692  return 1;
693 }
694 
695 /** Set overcurrent_left_wheel value.
696  * Overcurrent on left wheel.
697  * @param new_overcurrent_left_wheel new overcurrent_left_wheel value
698  */
699 void
700 Roomba500Interface::set_overcurrent_left_wheel(const bool new_overcurrent_left_wheel)
701 {
702  data->overcurrent_left_wheel = new_overcurrent_left_wheel;
703  data_changed = true;
704 }
705 
706 /** Get overcurrent_right_wheel value.
707  * Overcurrent on right wheel.
708  * @return overcurrent_right_wheel value
709  */
710 bool
711 Roomba500Interface::is_overcurrent_right_wheel() const
712 {
713  return data->overcurrent_right_wheel;
714 }
715 
716 /** Get maximum length of overcurrent_right_wheel value.
717  * @return length of overcurrent_right_wheel value, can be length of the array or number of
718  * maximum number of characters for a string
719  */
720 size_t
721 Roomba500Interface::maxlenof_overcurrent_right_wheel() const
722 {
723  return 1;
724 }
725 
726 /** Set overcurrent_right_wheel value.
727  * Overcurrent on right wheel.
728  * @param new_overcurrent_right_wheel new overcurrent_right_wheel value
729  */
730 void
731 Roomba500Interface::set_overcurrent_right_wheel(const bool new_overcurrent_right_wheel)
732 {
733  data->overcurrent_right_wheel = new_overcurrent_right_wheel;
734  data_changed = true;
735 }
736 
737 /** Get dirt_detect value.
738  * Dirt detected?
739  * @return dirt_detect value
740  */
741 bool
742 Roomba500Interface::is_dirt_detect() const
743 {
744  return data->dirt_detect;
745 }
746 
747 /** Get maximum length of dirt_detect value.
748  * @return length of dirt_detect value, can be length of the array or number of
749  * maximum number of characters for a string
750  */
751 size_t
752 Roomba500Interface::maxlenof_dirt_detect() const
753 {
754  return 1;
755 }
756 
757 /** Set dirt_detect value.
758  * Dirt detected?
759  * @param new_dirt_detect new dirt_detect value
760  */
761 void
762 Roomba500Interface::set_dirt_detect(const bool new_dirt_detect)
763 {
764  data->dirt_detect = new_dirt_detect;
765  data_changed = true;
766 }
767 
768 /** Get ir_opcode_omni value.
769  * Omni IR receiver code.
770  * @return ir_opcode_omni value
771  */
773 Roomba500Interface::ir_opcode_omni() const
774 {
775  return (Roomba500Interface::InfraredCharacter)data->ir_opcode_omni;
776 }
777 
778 /** Get maximum length of ir_opcode_omni value.
779  * @return length of ir_opcode_omni value, can be length of the array or number of
780  * maximum number of characters for a string
781  */
782 size_t
783 Roomba500Interface::maxlenof_ir_opcode_omni() const
784 {
785  return 1;
786 }
787 
788 /** Set ir_opcode_omni value.
789  * Omni IR receiver code.
790  * @param new_ir_opcode_omni new ir_opcode_omni value
791  */
792 void
793 Roomba500Interface::set_ir_opcode_omni(const InfraredCharacter new_ir_opcode_omni)
794 {
795  data->ir_opcode_omni = new_ir_opcode_omni;
796  data_changed = true;
797 }
798 
799 /** Get button_clean value.
800  * Clean button pressed.
801  * @return button_clean value
802  */
803 bool
804 Roomba500Interface::is_button_clean() const
805 {
806  return data->button_clean;
807 }
808 
809 /** Get maximum length of button_clean value.
810  * @return length of button_clean value, can be length of the array or number of
811  * maximum number of characters for a string
812  */
813 size_t
814 Roomba500Interface::maxlenof_button_clean() const
815 {
816  return 1;
817 }
818 
819 /** Set button_clean value.
820  * Clean button pressed.
821  * @param new_button_clean new button_clean value
822  */
823 void
824 Roomba500Interface::set_button_clean(const bool new_button_clean)
825 {
826  data->button_clean = new_button_clean;
827  data_changed = true;
828 }
829 
830 /** Get button_spot value.
831  * Spot button pressed.
832  * @return button_spot value
833  */
834 bool
835 Roomba500Interface::is_button_spot() const
836 {
837  return data->button_spot;
838 }
839 
840 /** Get maximum length of button_spot value.
841  * @return length of button_spot value, can be length of the array or number of
842  * maximum number of characters for a string
843  */
844 size_t
845 Roomba500Interface::maxlenof_button_spot() const
846 {
847  return 1;
848 }
849 
850 /** Set button_spot value.
851  * Spot button pressed.
852  * @param new_button_spot new button_spot value
853  */
854 void
855 Roomba500Interface::set_button_spot(const bool new_button_spot)
856 {
857  data->button_spot = new_button_spot;
858  data_changed = true;
859 }
860 
861 /** Get button_dock value.
862  * Dock button pressed.
863  * @return button_dock value
864  */
865 bool
866 Roomba500Interface::is_button_dock() const
867 {
868  return data->button_dock;
869 }
870 
871 /** Get maximum length of button_dock value.
872  * @return length of button_dock value, can be length of the array or number of
873  * maximum number of characters for a string
874  */
875 size_t
876 Roomba500Interface::maxlenof_button_dock() const
877 {
878  return 1;
879 }
880 
881 /** Set button_dock value.
882  * Dock button pressed.
883  * @param new_button_dock new button_dock value
884  */
885 void
886 Roomba500Interface::set_button_dock(const bool new_button_dock)
887 {
888  data->button_dock = new_button_dock;
889  data_changed = true;
890 }
891 
892 /** Get button_minute value.
893  * Minute button pressed.
894  * @return button_minute value
895  */
896 bool
897 Roomba500Interface::is_button_minute() const
898 {
899  return data->button_minute;
900 }
901 
902 /** Get maximum length of button_minute value.
903  * @return length of button_minute value, can be length of the array or number of
904  * maximum number of characters for a string
905  */
906 size_t
907 Roomba500Interface::maxlenof_button_minute() const
908 {
909  return 1;
910 }
911 
912 /** Set button_minute value.
913  * Minute button pressed.
914  * @param new_button_minute new button_minute value
915  */
916 void
917 Roomba500Interface::set_button_minute(const bool new_button_minute)
918 {
919  data->button_minute = new_button_minute;
920  data_changed = true;
921 }
922 
923 /** Get button_hour value.
924  * Hour button pressed.
925  * @return button_hour value
926  */
927 bool
928 Roomba500Interface::is_button_hour() const
929 {
930  return data->button_hour;
931 }
932 
933 /** Get maximum length of button_hour value.
934  * @return length of button_hour value, can be length of the array or number of
935  * maximum number of characters for a string
936  */
937 size_t
938 Roomba500Interface::maxlenof_button_hour() const
939 {
940  return 1;
941 }
942 
943 /** Set button_hour value.
944  * Hour button pressed.
945  * @param new_button_hour new button_hour value
946  */
947 void
948 Roomba500Interface::set_button_hour(const bool new_button_hour)
949 {
950  data->button_hour = new_button_hour;
951  data_changed = true;
952 }
953 
954 /** Get button_day value.
955  * Day button pressed.
956  * @return button_day value
957  */
958 bool
959 Roomba500Interface::is_button_day() const
960 {
961  return data->button_day;
962 }
963 
964 /** Get maximum length of button_day value.
965  * @return length of button_day value, can be length of the array or number of
966  * maximum number of characters for a string
967  */
968 size_t
969 Roomba500Interface::maxlenof_button_day() const
970 {
971  return 1;
972 }
973 
974 /** Set button_day value.
975  * Day button pressed.
976  * @param new_button_day new button_day value
977  */
978 void
979 Roomba500Interface::set_button_day(const bool new_button_day)
980 {
981  data->button_day = new_button_day;
982  data_changed = true;
983 }
984 
985 /** Get button_schedule value.
986  * Schedule button pressed.
987  * @return button_schedule value
988  */
989 bool
990 Roomba500Interface::is_button_schedule() const
991 {
992  return data->button_schedule;
993 }
994 
995 /** Get maximum length of button_schedule value.
996  * @return length of button_schedule value, can be length of the array or number of
997  * maximum number of characters for a string
998  */
999 size_t
1000 Roomba500Interface::maxlenof_button_schedule() const
1001 {
1002  return 1;
1003 }
1004 
1005 /** Set button_schedule value.
1006  * Schedule button pressed.
1007  * @param new_button_schedule new button_schedule value
1008  */
1009 void
1010 Roomba500Interface::set_button_schedule(const bool new_button_schedule)
1011 {
1012  data->button_schedule = new_button_schedule;
1013  data_changed = true;
1014 }
1015 
1016 /** Get button_clock value.
1017  * Clock button pressed.
1018  * @return button_clock value
1019  */
1020 bool
1021 Roomba500Interface::is_button_clock() const
1022 {
1023  return data->button_clock;
1024 }
1025 
1026 /** Get maximum length of button_clock value.
1027  * @return length of button_clock value, can be length of the array or number of
1028  * maximum number of characters for a string
1029  */
1030 size_t
1031 Roomba500Interface::maxlenof_button_clock() const
1032 {
1033  return 1;
1034 }
1035 
1036 /** Set button_clock value.
1037  * Clock button pressed.
1038  * @param new_button_clock new button_clock value
1039  */
1040 void
1041 Roomba500Interface::set_button_clock(const bool new_button_clock)
1042 {
1043  data->button_clock = new_button_clock;
1044  data_changed = true;
1045 }
1046 
1047 /** Get distance value.
1048  * Travelled distance in m.
1049  * @return distance value
1050  */
1051 int16_t
1052 Roomba500Interface::distance() const
1053 {
1054  return data->distance;
1055 }
1056 
1057 /** Get maximum length of distance value.
1058  * @return length of distance value, can be length of the array or number of
1059  * maximum number of characters for a string
1060  */
1061 size_t
1062 Roomba500Interface::maxlenof_distance() const
1063 {
1064  return 1;
1065 }
1066 
1067 /** Set distance value.
1068  * Travelled distance in m.
1069  * @param new_distance new distance value
1070  */
1071 void
1072 Roomba500Interface::set_distance(const int16_t new_distance)
1073 {
1074  data->distance = new_distance;
1075  data_changed = true;
1076 }
1077 
1078 /** Get angle value.
1079  * Turned angle in radians.
1080  * @return angle value
1081  */
1082 int16_t
1083 Roomba500Interface::angle() const
1084 {
1085  return data->angle;
1086 }
1087 
1088 /** Get maximum length of angle value.
1089  * @return length of angle value, can be length of the array or number of
1090  * maximum number of characters for a string
1091  */
1092 size_t
1093 Roomba500Interface::maxlenof_angle() const
1094 {
1095  return 1;
1096 }
1097 
1098 /** Set angle value.
1099  * Turned angle in radians.
1100  * @param new_angle new angle value
1101  */
1102 void
1103 Roomba500Interface::set_angle(const int16_t new_angle)
1104 {
1105  data->angle = new_angle;
1106  data_changed = true;
1107 }
1108 
1109 /** Get charging_state value.
1110  * Charging state.
1111  * @return charging_state value
1112  */
1114 Roomba500Interface::charging_state() const
1115 {
1116  return (Roomba500Interface::ChargingState)data->charging_state;
1117 }
1118 
1119 /** Get maximum length of charging_state value.
1120  * @return length of charging_state value, can be length of the array or number of
1121  * maximum number of characters for a string
1122  */
1123 size_t
1124 Roomba500Interface::maxlenof_charging_state() const
1125 {
1126  return 1;
1127 }
1128 
1129 /** Set charging_state value.
1130  * Charging state.
1131  * @param new_charging_state new charging_state value
1132  */
1133 void
1134 Roomba500Interface::set_charging_state(const ChargingState new_charging_state)
1135 {
1136  data->charging_state = new_charging_state;
1137  data_changed = true;
1138 }
1139 
1140 /** Get voltage value.
1141  * Voltage in mV.
1142  * @return voltage value
1143  */
1144 uint16_t
1145 Roomba500Interface::voltage() const
1146 {
1147  return data->voltage;
1148 }
1149 
1150 /** Get maximum length of voltage value.
1151  * @return length of voltage value, can be length of the array or number of
1152  * maximum number of characters for a string
1153  */
1154 size_t
1155 Roomba500Interface::maxlenof_voltage() const
1156 {
1157  return 1;
1158 }
1159 
1160 /** Set voltage value.
1161  * Voltage in mV.
1162  * @param new_voltage new voltage value
1163  */
1164 void
1165 Roomba500Interface::set_voltage(const uint16_t new_voltage)
1166 {
1167  data->voltage = new_voltage;
1168  data_changed = true;
1169 }
1170 
1171 /** Get current value.
1172  * Current in mA.
1173  * @return current value
1174  */
1175 int16_t
1176 Roomba500Interface::current() const
1177 {
1178  return data->current;
1179 }
1180 
1181 /** Get maximum length of current value.
1182  * @return length of current value, can be length of the array or number of
1183  * maximum number of characters for a string
1184  */
1185 size_t
1186 Roomba500Interface::maxlenof_current() const
1187 {
1188  return 1;
1189 }
1190 
1191 /** Set current value.
1192  * Current in mA.
1193  * @param new_current new current value
1194  */
1195 void
1196 Roomba500Interface::set_current(const int16_t new_current)
1197 {
1198  data->current = new_current;
1199  data_changed = true;
1200 }
1201 
1202 /** Get temperature value.
1203  * Temperature in degree Celsius.
1204  * @return temperature value
1205  */
1206 int8_t
1207 Roomba500Interface::temperature() const
1208 {
1209  return data->temperature;
1210 }
1211 
1212 /** Get maximum length of temperature value.
1213  * @return length of temperature value, can be length of the array or number of
1214  * maximum number of characters for a string
1215  */
1216 size_t
1217 Roomba500Interface::maxlenof_temperature() const
1218 {
1219  return 1;
1220 }
1221 
1222 /** Set temperature value.
1223  * Temperature in degree Celsius.
1224  * @param new_temperature new temperature value
1225  */
1226 void
1227 Roomba500Interface::set_temperature(const int8_t new_temperature)
1228 {
1229  data->temperature = new_temperature;
1230  data_changed = true;
1231 }
1232 
1233 /** Get battery_charge value.
1234  * Battery charge in mAh.
1235  * @return battery_charge value
1236  */
1237 uint16_t
1238 Roomba500Interface::battery_charge() const
1239 {
1240  return data->battery_charge;
1241 }
1242 
1243 /** Get maximum length of battery_charge value.
1244  * @return length of battery_charge value, can be length of the array or number of
1245  * maximum number of characters for a string
1246  */
1247 size_t
1248 Roomba500Interface::maxlenof_battery_charge() const
1249 {
1250  return 1;
1251 }
1252 
1253 /** Set battery_charge value.
1254  * Battery charge in mAh.
1255  * @param new_battery_charge new battery_charge value
1256  */
1257 void
1258 Roomba500Interface::set_battery_charge(const uint16_t new_battery_charge)
1259 {
1260  data->battery_charge = new_battery_charge;
1261  data_changed = true;
1262 }
1263 
1264 /** Get battery_capacity value.
1265  * Battery capacity in mAh.
1266  * @return battery_capacity value
1267  */
1268 uint16_t
1269 Roomba500Interface::battery_capacity() const
1270 {
1271  return data->battery_capacity;
1272 }
1273 
1274 /** Get maximum length of battery_capacity value.
1275  * @return length of battery_capacity value, can be length of the array or number of
1276  * maximum number of characters for a string
1277  */
1278 size_t
1279 Roomba500Interface::maxlenof_battery_capacity() const
1280 {
1281  return 1;
1282 }
1283 
1284 /** Set battery_capacity value.
1285  * Battery capacity in mAh.
1286  * @param new_battery_capacity new battery_capacity value
1287  */
1288 void
1289 Roomba500Interface::set_battery_capacity(const uint16_t new_battery_capacity)
1290 {
1291  data->battery_capacity = new_battery_capacity;
1292  data_changed = true;
1293 }
1294 
1295 /** Get wall_signal value.
1296  * Raw wall signal
1297  * @return wall_signal value
1298  */
1299 uint16_t
1300 Roomba500Interface::wall_signal() const
1301 {
1302  return data->wall_signal;
1303 }
1304 
1305 /** Get maximum length of wall_signal value.
1306  * @return length of wall_signal value, can be length of the array or number of
1307  * maximum number of characters for a string
1308  */
1309 size_t
1310 Roomba500Interface::maxlenof_wall_signal() const
1311 {
1312  return 1;
1313 }
1314 
1315 /** Set wall_signal value.
1316  * Raw wall signal
1317  * @param new_wall_signal new wall_signal value
1318  */
1319 void
1320 Roomba500Interface::set_wall_signal(const uint16_t new_wall_signal)
1321 {
1322  data->wall_signal = new_wall_signal;
1323  data_changed = true;
1324 }
1325 
1326 /** Get cliff_left_signal value.
1327  * Raw left cliff signal.
1328  * @return cliff_left_signal value
1329  */
1330 uint16_t
1331 Roomba500Interface::cliff_left_signal() const
1332 {
1333  return data->cliff_left_signal;
1334 }
1335 
1336 /** Get maximum length of cliff_left_signal value.
1337  * @return length of cliff_left_signal value, can be length of the array or number of
1338  * maximum number of characters for a string
1339  */
1340 size_t
1341 Roomba500Interface::maxlenof_cliff_left_signal() const
1342 {
1343  return 1;
1344 }
1345 
1346 /** Set cliff_left_signal value.
1347  * Raw left cliff signal.
1348  * @param new_cliff_left_signal new cliff_left_signal value
1349  */
1350 void
1351 Roomba500Interface::set_cliff_left_signal(const uint16_t new_cliff_left_signal)
1352 {
1353  data->cliff_left_signal = new_cliff_left_signal;
1354  data_changed = true;
1355 }
1356 
1357 /** Get cliff_front_left_signal value.
1358  * Raw front left
1359  cliff signal.
1360  * @return cliff_front_left_signal value
1361  */
1362 uint16_t
1363 Roomba500Interface::cliff_front_left_signal() const
1364 {
1365  return data->cliff_front_left_signal;
1366 }
1367 
1368 /** Get maximum length of cliff_front_left_signal value.
1369  * @return length of cliff_front_left_signal value, can be length of the array or number of
1370  * maximum number of characters for a string
1371  */
1372 size_t
1373 Roomba500Interface::maxlenof_cliff_front_left_signal() const
1374 {
1375  return 1;
1376 }
1377 
1378 /** Set cliff_front_left_signal value.
1379  * Raw front left
1380  cliff signal.
1381  * @param new_cliff_front_left_signal new cliff_front_left_signal value
1382  */
1383 void
1384 Roomba500Interface::set_cliff_front_left_signal(const uint16_t new_cliff_front_left_signal)
1385 {
1386  data->cliff_front_left_signal = new_cliff_front_left_signal;
1387  data_changed = true;
1388 }
1389 
1390 /** Get cliff_front_right_signal value.
1391  * Raw front right
1392  cliff signal.
1393  * @return cliff_front_right_signal value
1394  */
1395 uint16_t
1396 Roomba500Interface::cliff_front_right_signal() const
1397 {
1398  return data->cliff_front_right_signal;
1399 }
1400 
1401 /** Get maximum length of cliff_front_right_signal value.
1402  * @return length of cliff_front_right_signal value, can be length of the array or number of
1403  * maximum number of characters for a string
1404  */
1405 size_t
1406 Roomba500Interface::maxlenof_cliff_front_right_signal() const
1407 {
1408  return 1;
1409 }
1410 
1411 /** Set cliff_front_right_signal value.
1412  * Raw front right
1413  cliff signal.
1414  * @param new_cliff_front_right_signal new cliff_front_right_signal value
1415  */
1416 void
1417 Roomba500Interface::set_cliff_front_right_signal(const uint16_t new_cliff_front_right_signal)
1418 {
1419  data->cliff_front_right_signal = new_cliff_front_right_signal;
1420  data_changed = true;
1421 }
1422 
1423 /** Get cliff_right_signal value.
1424  * Raw right cliff signal.
1425  * @return cliff_right_signal value
1426  */
1427 uint16_t
1428 Roomba500Interface::cliff_right_signal() const
1429 {
1430  return data->cliff_right_signal;
1431 }
1432 
1433 /** Get maximum length of cliff_right_signal value.
1434  * @return length of cliff_right_signal value, can be length of the array or number of
1435  * maximum number of characters for a string
1436  */
1437 size_t
1438 Roomba500Interface::maxlenof_cliff_right_signal() const
1439 {
1440  return 1;
1441 }
1442 
1443 /** Set cliff_right_signal value.
1444  * Raw right cliff signal.
1445  * @param new_cliff_right_signal new cliff_right_signal value
1446  */
1447 void
1448 Roomba500Interface::set_cliff_right_signal(const uint16_t new_cliff_right_signal)
1449 {
1450  data->cliff_right_signal = new_cliff_right_signal;
1451  data_changed = true;
1452 }
1453 
1454 /** Get home_base_charger_available value.
1455  *
1456  Home base charger available?
1457  * @return home_base_charger_available value
1458  */
1459 bool
1460 Roomba500Interface::is_home_base_charger_available() const
1461 {
1462  return data->home_base_charger_available;
1463 }
1464 
1465 /** Get maximum length of home_base_charger_available value.
1466  * @return length of home_base_charger_available value, can be length of the array or number of
1467  * maximum number of characters for a string
1468  */
1469 size_t
1470 Roomba500Interface::maxlenof_home_base_charger_available() const
1471 {
1472  return 1;
1473 }
1474 
1475 /** Set home_base_charger_available value.
1476  *
1477  Home base charger available?
1478  * @param new_home_base_charger_available new home_base_charger_available value
1479  */
1480 void
1481 Roomba500Interface::set_home_base_charger_available(const bool new_home_base_charger_available)
1482 {
1483  data->home_base_charger_available = new_home_base_charger_available;
1484  data_changed = true;
1485 }
1486 
1487 /** Get internal_charger_available value.
1488  *
1489  Internal charger available?
1490  * @return internal_charger_available value
1491  */
1492 bool
1493 Roomba500Interface::is_internal_charger_available() const
1494 {
1495  return data->internal_charger_available;
1496 }
1497 
1498 /** Get maximum length of internal_charger_available value.
1499  * @return length of internal_charger_available value, can be length of the array or number of
1500  * maximum number of characters for a string
1501  */
1502 size_t
1503 Roomba500Interface::maxlenof_internal_charger_available() const
1504 {
1505  return 1;
1506 }
1507 
1508 /** Set internal_charger_available value.
1509  *
1510  Internal charger available?
1511  * @param new_internal_charger_available new internal_charger_available value
1512  */
1513 void
1514 Roomba500Interface::set_internal_charger_available(const bool new_internal_charger_available)
1515 {
1516  data->internal_charger_available = new_internal_charger_available;
1517  data_changed = true;
1518 }
1519 
1520 /** Get song_number value.
1521  * Song number.
1522  * @return song_number value
1523  */
1524 uint8_t
1525 Roomba500Interface::song_number() const
1526 {
1527  return data->song_number;
1528 }
1529 
1530 /** Get maximum length of song_number value.
1531  * @return length of song_number value, can be length of the array or number of
1532  * maximum number of characters for a string
1533  */
1534 size_t
1535 Roomba500Interface::maxlenof_song_number() const
1536 {
1537  return 1;
1538 }
1539 
1540 /** Set song_number value.
1541  * Song number.
1542  * @param new_song_number new song_number value
1543  */
1544 void
1545 Roomba500Interface::set_song_number(const uint8_t new_song_number)
1546 {
1547  data->song_number = new_song_number;
1548  data_changed = true;
1549 }
1550 
1551 /** Get song_playing value.
1552  * Song playing?
1553  * @return song_playing value
1554  */
1555 bool
1556 Roomba500Interface::is_song_playing() const
1557 {
1558  return data->song_playing;
1559 }
1560 
1561 /** Get maximum length of song_playing value.
1562  * @return length of song_playing value, can be length of the array or number of
1563  * maximum number of characters for a string
1564  */
1565 size_t
1566 Roomba500Interface::maxlenof_song_playing() const
1567 {
1568  return 1;
1569 }
1570 
1571 /** Set song_playing value.
1572  * Song playing?
1573  * @param new_song_playing new song_playing value
1574  */
1575 void
1576 Roomba500Interface::set_song_playing(const bool new_song_playing)
1577 {
1578  data->song_playing = new_song_playing;
1579  data_changed = true;
1580 }
1581 
1582 /** Get velocity value.
1583  * Requested velocity in mm/s.
1584  * @return velocity value
1585  */
1586 int16_t
1587 Roomba500Interface::velocity() const
1588 {
1589  return data->velocity;
1590 }
1591 
1592 /** Get maximum length of velocity value.
1593  * @return length of velocity value, can be length of the array or number of
1594  * maximum number of characters for a string
1595  */
1596 size_t
1597 Roomba500Interface::maxlenof_velocity() const
1598 {
1599  return 1;
1600 }
1601 
1602 /** Set velocity value.
1603  * Requested velocity in mm/s.
1604  * @param new_velocity new velocity value
1605  */
1606 void
1607 Roomba500Interface::set_velocity(const int16_t new_velocity)
1608 {
1609  data->velocity = new_velocity;
1610  data_changed = true;
1611 }
1612 
1613 /** Get radius value.
1614  * Requested radius in mm.
1615  * @return radius value
1616  */
1617 int16_t
1618 Roomba500Interface::radius() const
1619 {
1620  return data->radius;
1621 }
1622 
1623 /** Get maximum length of radius value.
1624  * @return length of radius value, can be length of the array or number of
1625  * maximum number of characters for a string
1626  */
1627 size_t
1628 Roomba500Interface::maxlenof_radius() const
1629 {
1630  return 1;
1631 }
1632 
1633 /** Set radius value.
1634  * Requested radius in mm.
1635  * @param new_radius new radius value
1636  */
1637 void
1638 Roomba500Interface::set_radius(const int16_t new_radius)
1639 {
1640  data->radius = new_radius;
1641  data_changed = true;
1642 }
1643 
1644 /** Get velocity_right value.
1645  * Requested left velocity in mm/s.
1646  * @return velocity_right value
1647  */
1648 int16_t
1649 Roomba500Interface::velocity_right() const
1650 {
1651  return data->velocity_right;
1652 }
1653 
1654 /** Get maximum length of velocity_right value.
1655  * @return length of velocity_right value, can be length of the array or number of
1656  * maximum number of characters for a string
1657  */
1658 size_t
1659 Roomba500Interface::maxlenof_velocity_right() const
1660 {
1661  return 1;
1662 }
1663 
1664 /** Set velocity_right value.
1665  * Requested left velocity in mm/s.
1666  * @param new_velocity_right new velocity_right value
1667  */
1668 void
1669 Roomba500Interface::set_velocity_right(const int16_t new_velocity_right)
1670 {
1671  data->velocity_right = new_velocity_right;
1672  data_changed = true;
1673 }
1674 
1675 /** Get velocity_left value.
1676  * Requested right velocity in mm/s.
1677  * @return velocity_left value
1678  */
1679 int16_t
1680 Roomba500Interface::velocity_left() const
1681 {
1682  return data->velocity_left;
1683 }
1684 
1685 /** Get maximum length of velocity_left value.
1686  * @return length of velocity_left value, can be length of the array or number of
1687  * maximum number of characters for a string
1688  */
1689 size_t
1690 Roomba500Interface::maxlenof_velocity_left() const
1691 {
1692  return 1;
1693 }
1694 
1695 /** Set velocity_left value.
1696  * Requested right velocity in mm/s.
1697  * @param new_velocity_left new velocity_left value
1698  */
1699 void
1700 Roomba500Interface::set_velocity_left(const int16_t new_velocity_left)
1701 {
1702  data->velocity_left = new_velocity_left;
1703  data_changed = true;
1704 }
1705 
1706 /** Get encoder_counts_left value.
1707  * Encoder count left.
1708  * @return encoder_counts_left value
1709  */
1710 uint16_t
1711 Roomba500Interface::encoder_counts_left() const
1712 {
1713  return data->encoder_counts_left;
1714 }
1715 
1716 /** Get maximum length of encoder_counts_left value.
1717  * @return length of encoder_counts_left value, can be length of the array or number of
1718  * maximum number of characters for a string
1719  */
1720 size_t
1721 Roomba500Interface::maxlenof_encoder_counts_left() const
1722 {
1723  return 1;
1724 }
1725 
1726 /** Set encoder_counts_left value.
1727  * Encoder count left.
1728  * @param new_encoder_counts_left new encoder_counts_left value
1729  */
1730 void
1731 Roomba500Interface::set_encoder_counts_left(const uint16_t new_encoder_counts_left)
1732 {
1733  data->encoder_counts_left = new_encoder_counts_left;
1734  data_changed = true;
1735 }
1736 
1737 /** Get encoder_counts_right value.
1738  * Encoder count right.
1739  * @return encoder_counts_right value
1740  */
1741 uint16_t
1742 Roomba500Interface::encoder_counts_right() const
1743 {
1744  return data->encoder_counts_right;
1745 }
1746 
1747 /** Get maximum length of encoder_counts_right value.
1748  * @return length of encoder_counts_right value, can be length of the array or number of
1749  * maximum number of characters for a string
1750  */
1751 size_t
1752 Roomba500Interface::maxlenof_encoder_counts_right() const
1753 {
1754  return 1;
1755 }
1756 
1757 /** Set encoder_counts_right value.
1758  * Encoder count right.
1759  * @param new_encoder_counts_right new encoder_counts_right value
1760  */
1761 void
1762 Roomba500Interface::set_encoder_counts_right(const uint16_t new_encoder_counts_right)
1763 {
1764  data->encoder_counts_right = new_encoder_counts_right;
1765  data_changed = true;
1766 }
1767 
1768 /** Get bumper_left value.
1769  * Left bumper active?
1770  * @return bumper_left value
1771  */
1772 bool
1773 Roomba500Interface::is_bumper_left() const
1774 {
1775  return data->bumper_left;
1776 }
1777 
1778 /** Get maximum length of bumper_left value.
1779  * @return length of bumper_left value, can be length of the array or number of
1780  * maximum number of characters for a string
1781  */
1782 size_t
1783 Roomba500Interface::maxlenof_bumper_left() const
1784 {
1785  return 1;
1786 }
1787 
1788 /** Set bumper_left value.
1789  * Left bumper active?
1790  * @param new_bumper_left new bumper_left value
1791  */
1792 void
1793 Roomba500Interface::set_bumper_left(const bool new_bumper_left)
1794 {
1795  data->bumper_left = new_bumper_left;
1796  data_changed = true;
1797 }
1798 
1799 /** Get bumper_front_left value.
1800  * Front left bumper active?
1801  * @return bumper_front_left value
1802  */
1803 bool
1804 Roomba500Interface::is_bumper_front_left() const
1805 {
1806  return data->bumper_front_left;
1807 }
1808 
1809 /** Get maximum length of bumper_front_left value.
1810  * @return length of bumper_front_left value, can be length of the array or number of
1811  * maximum number of characters for a string
1812  */
1813 size_t
1814 Roomba500Interface::maxlenof_bumper_front_left() const
1815 {
1816  return 1;
1817 }
1818 
1819 /** Set bumper_front_left value.
1820  * Front left bumper active?
1821  * @param new_bumper_front_left new bumper_front_left value
1822  */
1823 void
1824 Roomba500Interface::set_bumper_front_left(const bool new_bumper_front_left)
1825 {
1826  data->bumper_front_left = new_bumper_front_left;
1827  data_changed = true;
1828 }
1829 
1830 /** Get bumper_center_left value.
1831  * Center left bumper active?
1832  * @return bumper_center_left value
1833  */
1834 bool
1835 Roomba500Interface::is_bumper_center_left() const
1836 {
1837  return data->bumper_center_left;
1838 }
1839 
1840 /** Get maximum length of bumper_center_left value.
1841  * @return length of bumper_center_left value, can be length of the array or number of
1842  * maximum number of characters for a string
1843  */
1844 size_t
1845 Roomba500Interface::maxlenof_bumper_center_left() const
1846 {
1847  return 1;
1848 }
1849 
1850 /** Set bumper_center_left value.
1851  * Center left bumper active?
1852  * @param new_bumper_center_left new bumper_center_left value
1853  */
1854 void
1855 Roomba500Interface::set_bumper_center_left(const bool new_bumper_center_left)
1856 {
1857  data->bumper_center_left = new_bumper_center_left;
1858  data_changed = true;
1859 }
1860 
1861 /** Get bumper_center_right value.
1862  * Center right bumper active?
1863  * @return bumper_center_right value
1864  */
1865 bool
1866 Roomba500Interface::is_bumper_center_right() const
1867 {
1868  return data->bumper_center_right;
1869 }
1870 
1871 /** Get maximum length of bumper_center_right value.
1872  * @return length of bumper_center_right value, can be length of the array or number of
1873  * maximum number of characters for a string
1874  */
1875 size_t
1876 Roomba500Interface::maxlenof_bumper_center_right() const
1877 {
1878  return 1;
1879 }
1880 
1881 /** Set bumper_center_right value.
1882  * Center right bumper active?
1883  * @param new_bumper_center_right new bumper_center_right value
1884  */
1885 void
1886 Roomba500Interface::set_bumper_center_right(const bool new_bumper_center_right)
1887 {
1888  data->bumper_center_right = new_bumper_center_right;
1889  data_changed = true;
1890 }
1891 
1892 /** Get bumper_front_right value.
1893  * Front right bumper active?
1894  * @return bumper_front_right value
1895  */
1896 bool
1897 Roomba500Interface::is_bumper_front_right() const
1898 {
1899  return data->bumper_front_right;
1900 }
1901 
1902 /** Get maximum length of bumper_front_right value.
1903  * @return length of bumper_front_right value, can be length of the array or number of
1904  * maximum number of characters for a string
1905  */
1906 size_t
1907 Roomba500Interface::maxlenof_bumper_front_right() const
1908 {
1909  return 1;
1910 }
1911 
1912 /** Set bumper_front_right value.
1913  * Front right bumper active?
1914  * @param new_bumper_front_right new bumper_front_right value
1915  */
1916 void
1917 Roomba500Interface::set_bumper_front_right(const bool new_bumper_front_right)
1918 {
1919  data->bumper_front_right = new_bumper_front_right;
1920  data_changed = true;
1921 }
1922 
1923 /** Get bumper_right value.
1924  * Right bumper active?
1925  * @return bumper_right value
1926  */
1927 bool
1928 Roomba500Interface::is_bumper_right() const
1929 {
1930  return data->bumper_right;
1931 }
1932 
1933 /** Get maximum length of bumper_right value.
1934  * @return length of bumper_right value, can be length of the array or number of
1935  * maximum number of characters for a string
1936  */
1937 size_t
1938 Roomba500Interface::maxlenof_bumper_right() const
1939 {
1940  return 1;
1941 }
1942 
1943 /** Set bumper_right value.
1944  * Right bumper active?
1945  * @param new_bumper_right new bumper_right value
1946  */
1947 void
1948 Roomba500Interface::set_bumper_right(const bool new_bumper_right)
1949 {
1950  data->bumper_right = new_bumper_right;
1951  data_changed = true;
1952 }
1953 
1954 /** Get light_bump_left value.
1955  * Raw left bumper signal.
1956  * @return light_bump_left value
1957  */
1958 uint16_t
1959 Roomba500Interface::light_bump_left() const
1960 {
1961  return data->light_bump_left;
1962 }
1963 
1964 /** Get maximum length of light_bump_left value.
1965  * @return length of light_bump_left value, can be length of the array or number of
1966  * maximum number of characters for a string
1967  */
1968 size_t
1969 Roomba500Interface::maxlenof_light_bump_left() const
1970 {
1971  return 1;
1972 }
1973 
1974 /** Set light_bump_left value.
1975  * Raw left bumper signal.
1976  * @param new_light_bump_left new light_bump_left value
1977  */
1978 void
1979 Roomba500Interface::set_light_bump_left(const uint16_t new_light_bump_left)
1980 {
1981  data->light_bump_left = new_light_bump_left;
1982  data_changed = true;
1983 }
1984 
1985 /** Get light_bump_front_left value.
1986  * Raw front left bumper
1987  signal.
1988  * @return light_bump_front_left value
1989  */
1990 uint16_t
1991 Roomba500Interface::light_bump_front_left() const
1992 {
1993  return data->light_bump_front_left;
1994 }
1995 
1996 /** Get maximum length of light_bump_front_left value.
1997  * @return length of light_bump_front_left value, can be length of the array or number of
1998  * maximum number of characters for a string
1999  */
2000 size_t
2001 Roomba500Interface::maxlenof_light_bump_front_left() const
2002 {
2003  return 1;
2004 }
2005 
2006 /** Set light_bump_front_left value.
2007  * Raw front left bumper
2008  signal.
2009  * @param new_light_bump_front_left new light_bump_front_left value
2010  */
2011 void
2012 Roomba500Interface::set_light_bump_front_left(const uint16_t new_light_bump_front_left)
2013 {
2014  data->light_bump_front_left = new_light_bump_front_left;
2015  data_changed = true;
2016 }
2017 
2018 /** Get light_bump_center_left value.
2019  * Raw center left
2020  bumper signal.
2021  * @return light_bump_center_left value
2022  */
2023 uint16_t
2024 Roomba500Interface::light_bump_center_left() const
2025 {
2026  return data->light_bump_center_left;
2027 }
2028 
2029 /** Get maximum length of light_bump_center_left value.
2030  * @return length of light_bump_center_left value, can be length of the array or number of
2031  * maximum number of characters for a string
2032  */
2033 size_t
2034 Roomba500Interface::maxlenof_light_bump_center_left() const
2035 {
2036  return 1;
2037 }
2038 
2039 /** Set light_bump_center_left value.
2040  * Raw center left
2041  bumper signal.
2042  * @param new_light_bump_center_left new light_bump_center_left value
2043  */
2044 void
2045 Roomba500Interface::set_light_bump_center_left(const uint16_t new_light_bump_center_left)
2046 {
2047  data->light_bump_center_left = new_light_bump_center_left;
2048  data_changed = true;
2049 }
2050 
2051 /** Get light_bump_center_right value.
2052  * Raw center right
2053  bumper signal.
2054  * @return light_bump_center_right value
2055  */
2056 uint16_t
2057 Roomba500Interface::light_bump_center_right() const
2058 {
2059  return data->light_bump_center_right;
2060 }
2061 
2062 /** Get maximum length of light_bump_center_right value.
2063  * @return length of light_bump_center_right value, can be length of the array or number of
2064  * maximum number of characters for a string
2065  */
2066 size_t
2067 Roomba500Interface::maxlenof_light_bump_center_right() const
2068 {
2069  return 1;
2070 }
2071 
2072 /** Set light_bump_center_right value.
2073  * Raw center right
2074  bumper signal.
2075  * @param new_light_bump_center_right new light_bump_center_right value
2076  */
2077 void
2078 Roomba500Interface::set_light_bump_center_right(const uint16_t new_light_bump_center_right)
2079 {
2080  data->light_bump_center_right = new_light_bump_center_right;
2081  data_changed = true;
2082 }
2083 
2084 /** Get light_bump_front_right value.
2085  * Raw front right
2086  bumper signal.
2087  * @return light_bump_front_right value
2088  */
2089 uint16_t
2090 Roomba500Interface::light_bump_front_right() const
2091 {
2092  return data->light_bump_front_right;
2093 }
2094 
2095 /** Get maximum length of light_bump_front_right value.
2096  * @return length of light_bump_front_right value, can be length of the array or number of
2097  * maximum number of characters for a string
2098  */
2099 size_t
2100 Roomba500Interface::maxlenof_light_bump_front_right() const
2101 {
2102  return 1;
2103 }
2104 
2105 /** Set light_bump_front_right value.
2106  * Raw front right
2107  bumper signal.
2108  * @param new_light_bump_front_right new light_bump_front_right value
2109  */
2110 void
2111 Roomba500Interface::set_light_bump_front_right(const uint16_t new_light_bump_front_right)
2112 {
2113  data->light_bump_front_right = new_light_bump_front_right;
2114  data_changed = true;
2115 }
2116 
2117 /** Get light_bump_right value.
2118  * Raw right bumper signal.
2119  * @return light_bump_right value
2120  */
2121 uint16_t
2122 Roomba500Interface::light_bump_right() const
2123 {
2124  return data->light_bump_right;
2125 }
2126 
2127 /** Get maximum length of light_bump_right value.
2128  * @return length of light_bump_right value, can be length of the array or number of
2129  * maximum number of characters for a string
2130  */
2131 size_t
2132 Roomba500Interface::maxlenof_light_bump_right() const
2133 {
2134  return 1;
2135 }
2136 
2137 /** Set light_bump_right value.
2138  * Raw right bumper signal.
2139  * @param new_light_bump_right new light_bump_right value
2140  */
2141 void
2142 Roomba500Interface::set_light_bump_right(const uint16_t new_light_bump_right)
2143 {
2144  data->light_bump_right = new_light_bump_right;
2145  data_changed = true;
2146 }
2147 
2148 /** Get ir_opcode_left value.
2149  *
2150  Left receiver opcode.
2151  * @return ir_opcode_left value
2152  */
2154 Roomba500Interface::ir_opcode_left() const
2155 {
2156  return (Roomba500Interface::InfraredCharacter)data->ir_opcode_left;
2157 }
2158 
2159 /** Get maximum length of ir_opcode_left value.
2160  * @return length of ir_opcode_left value, can be length of the array or number of
2161  * maximum number of characters for a string
2162  */
2163 size_t
2164 Roomba500Interface::maxlenof_ir_opcode_left() const
2165 {
2166  return 1;
2167 }
2168 
2169 /** Set ir_opcode_left value.
2170  *
2171  Left receiver opcode.
2172  * @param new_ir_opcode_left new ir_opcode_left value
2173  */
2174 void
2175 Roomba500Interface::set_ir_opcode_left(const InfraredCharacter new_ir_opcode_left)
2176 {
2177  data->ir_opcode_left = new_ir_opcode_left;
2178  data_changed = true;
2179 }
2180 
2181 /** Get ir_opcode_right value.
2182  *
2183  Right receiver opcode.
2184  * @return ir_opcode_right value
2185  */
2187 Roomba500Interface::ir_opcode_right() const
2188 {
2189  return (Roomba500Interface::InfraredCharacter)data->ir_opcode_right;
2190 }
2191 
2192 /** Get maximum length of ir_opcode_right value.
2193  * @return length of ir_opcode_right value, can be length of the array or number of
2194  * maximum number of characters for a string
2195  */
2196 size_t
2197 Roomba500Interface::maxlenof_ir_opcode_right() const
2198 {
2199  return 1;
2200 }
2201 
2202 /** Set ir_opcode_right value.
2203  *
2204  Right receiver opcode.
2205  * @param new_ir_opcode_right new ir_opcode_right value
2206  */
2207 void
2208 Roomba500Interface::set_ir_opcode_right(const InfraredCharacter new_ir_opcode_right)
2209 {
2210  data->ir_opcode_right = new_ir_opcode_right;
2211  data_changed = true;
2212 }
2213 
2214 /** Get left_motor_current value.
2215  * Left motor current in mA.
2216  * @return left_motor_current value
2217  */
2218 int16_t
2219 Roomba500Interface::left_motor_current() const
2220 {
2221  return data->left_motor_current;
2222 }
2223 
2224 /** Get maximum length of left_motor_current value.
2225  * @return length of left_motor_current value, can be length of the array or number of
2226  * maximum number of characters for a string
2227  */
2228 size_t
2229 Roomba500Interface::maxlenof_left_motor_current() const
2230 {
2231  return 1;
2232 }
2233 
2234 /** Set left_motor_current value.
2235  * Left motor current in mA.
2236  * @param new_left_motor_current new left_motor_current value
2237  */
2238 void
2239 Roomba500Interface::set_left_motor_current(const int16_t new_left_motor_current)
2240 {
2241  data->left_motor_current = new_left_motor_current;
2242  data_changed = true;
2243 }
2244 
2245 /** Get right_motor_current value.
2246  * Right motor current in mA.
2247  * @return right_motor_current value
2248  */
2249 int16_t
2250 Roomba500Interface::right_motor_current() const
2251 {
2252  return data->right_motor_current;
2253 }
2254 
2255 /** Get maximum length of right_motor_current value.
2256  * @return length of right_motor_current value, can be length of the array or number of
2257  * maximum number of characters for a string
2258  */
2259 size_t
2260 Roomba500Interface::maxlenof_right_motor_current() const
2261 {
2262  return 1;
2263 }
2264 
2265 /** Set right_motor_current value.
2266  * Right motor current in mA.
2267  * @param new_right_motor_current new right_motor_current value
2268  */
2269 void
2270 Roomba500Interface::set_right_motor_current(const int16_t new_right_motor_current)
2271 {
2272  data->right_motor_current = new_right_motor_current;
2273  data_changed = true;
2274 }
2275 
2276 /** Get main_brush_current value.
2277  * Main brush current in mA.
2278  * @return main_brush_current value
2279  */
2280 int16_t
2281 Roomba500Interface::main_brush_current() const
2282 {
2283  return data->main_brush_current;
2284 }
2285 
2286 /** Get maximum length of main_brush_current value.
2287  * @return length of main_brush_current value, can be length of the array or number of
2288  * maximum number of characters for a string
2289  */
2290 size_t
2291 Roomba500Interface::maxlenof_main_brush_current() const
2292 {
2293  return 1;
2294 }
2295 
2296 /** Set main_brush_current value.
2297  * Main brush current in mA.
2298  * @param new_main_brush_current new main_brush_current value
2299  */
2300 void
2301 Roomba500Interface::set_main_brush_current(const int16_t new_main_brush_current)
2302 {
2303  data->main_brush_current = new_main_brush_current;
2304  data_changed = true;
2305 }
2306 
2307 /** Get side_brush_current value.
2308  * Side brush current in mA.
2309  * @return side_brush_current value
2310  */
2311 int16_t
2312 Roomba500Interface::side_brush_current() const
2313 {
2314  return data->side_brush_current;
2315 }
2316 
2317 /** Get maximum length of side_brush_current value.
2318  * @return length of side_brush_current value, can be length of the array or number of
2319  * maximum number of characters for a string
2320  */
2321 size_t
2322 Roomba500Interface::maxlenof_side_brush_current() const
2323 {
2324  return 1;
2325 }
2326 
2327 /** Set side_brush_current value.
2328  * Side brush current in mA.
2329  * @param new_side_brush_current new side_brush_current value
2330  */
2331 void
2332 Roomba500Interface::set_side_brush_current(const int16_t new_side_brush_current)
2333 {
2334  data->side_brush_current = new_side_brush_current;
2335  data_changed = true;
2336 }
2337 
2338 /** Get caster_stasis value.
2339  * Caster wheel stasis.
2340  * @return caster_stasis value
2341  */
2342 bool
2343 Roomba500Interface::is_caster_stasis() const
2344 {
2345  return data->caster_stasis;
2346 }
2347 
2348 /** Get maximum length of caster_stasis value.
2349  * @return length of caster_stasis value, can be length of the array or number of
2350  * maximum number of characters for a string
2351  */
2352 size_t
2353 Roomba500Interface::maxlenof_caster_stasis() const
2354 {
2355  return 1;
2356 }
2357 
2358 /** Set caster_stasis value.
2359  * Caster wheel stasis.
2360  * @param new_caster_stasis new caster_stasis value
2361  */
2362 void
2363 Roomba500Interface::set_caster_stasis(const bool new_caster_stasis)
2364 {
2365  data->caster_stasis = new_caster_stasis;
2366  data_changed = true;
2367 }
2368 
2369 /* =========== message create =========== */
2370 Message *
2371 Roomba500Interface::create_message(const char *type) const
2372 {
2373  if ( strncmp("StopMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
2374  return new StopMessage();
2375  } else if ( strncmp("DockMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
2376  return new DockMessage();
2377  } else if ( strncmp("SetModeMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
2378  return new SetModeMessage();
2379  } else if ( strncmp("DriveStraightMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
2380  return new DriveStraightMessage();
2381  } else if ( strncmp("DriveMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
2382  return new DriveMessage();
2383  } else if ( strncmp("SetMotorsMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
2384  return new SetMotorsMessage();
2385  } else {
2386  throw UnknownTypeException("The given type '%s' does not match any known "
2387  "message type for this interface type.", type);
2388  }
2389 }
2390 
2391 
2392 /** Copy values from other interface.
2393  * @param other other interface to copy values from
2394  */
2395 void
2396 Roomba500Interface::copy_values(const Interface *other)
2397 {
2398  const Roomba500Interface *oi = dynamic_cast<const Roomba500Interface *>(other);
2399  if (oi == NULL) {
2400  throw TypeMismatchException("Can only copy values from interface of same type (%s vs. %s)",
2401  type(), other->type());
2402  }
2403  memcpy(data, oi->data, sizeof(Roomba500Interface_data_t));
2404 }
2405 
2406 const char *
2407 Roomba500Interface::enum_tostring(const char *enumtype, int val) const
2408 {
2409  if (strcmp(enumtype, "Mode") == 0) {
2410  return tostring_Mode((Mode)val);
2411  }
2412  if (strcmp(enumtype, "InfraredCharacter") == 0) {
2413  return tostring_InfraredCharacter((InfraredCharacter)val);
2414  }
2415  if (strcmp(enumtype, "ChargingState") == 0) {
2416  return tostring_ChargingState((ChargingState)val);
2417  }
2418  if (strcmp(enumtype, "BrushState") == 0) {
2419  return tostring_BrushState((BrushState)val);
2420  }
2421  throw UnknownTypeException("Unknown enum type %s", enumtype);
2422 }
2423 
2424 /* =========== messages =========== */
2425 /** @class Roomba500Interface::StopMessage <interfaces/Roomba500Interface.h>
2426  * StopMessage Fawkes BlackBoard Interface Message.
2427  *
2428 
2429  */
2430 
2431 
2432 /** Constructor */
2433 Roomba500Interface::StopMessage::StopMessage() : Message("StopMessage")
2434 {
2435  data_size = sizeof(StopMessage_data_t);
2436  data_ptr = malloc(data_size);
2437  memset(data_ptr, 0, data_size);
2438  data = (StopMessage_data_t *)data_ptr;
2440  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
2441  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
2442  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
2443  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
2444  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
2445  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
2446  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
2447  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
2448  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
2449  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
2450  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
2451  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
2452  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
2453  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
2454  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
2455  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
2456  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
2457  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
2458  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
2459  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
2460  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
2461  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
2462  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
2463  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
2464  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
2465  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
2466  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
2467  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2468  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
2469  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
2470  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
2471  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
2472  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
2473  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
2474  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
2475  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2476  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
2477  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
2478  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
2479  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
2480  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
2481  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
2482  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
2483  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
2484  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
2485  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
2486 }
2487 
2488 /** Destructor */
2490 {
2491  free(data_ptr);
2492 }
2493 
2494 /** Copy constructor.
2495  * @param m message to copy from
2496  */
2498 {
2499  data_size = m->data_size;
2500  data_ptr = malloc(data_size);
2501  memcpy(data_ptr, m->data_ptr, data_size);
2502  data = (StopMessage_data_t *)data_ptr;
2504 }
2505 
2506 /* Methods */
2507 /** Clone this message.
2508  * Produces a message of the same type as this message and copies the
2509  * data to the new message.
2510  * @return clone of this message
2511  */
2512 Message *
2514 {
2515  return new Roomba500Interface::StopMessage(this);
2516 }
2517 /** @class Roomba500Interface::DockMessage <interfaces/Roomba500Interface.h>
2518  * DockMessage Fawkes BlackBoard Interface Message.
2519  *
2520 
2521  */
2522 
2523 
2524 /** Constructor */
2526 {
2527  data_size = sizeof(DockMessage_data_t);
2528  data_ptr = malloc(data_size);
2529  memset(data_ptr, 0, data_size);
2530  data = (DockMessage_data_t *)data_ptr;
2532  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
2533  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
2534  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
2535  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
2536  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
2537  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
2538  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
2539  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
2540  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
2541  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
2542  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
2543  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
2544  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
2545  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
2546  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
2547  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
2548  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
2549  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
2550  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
2551  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
2552  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
2553  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
2554  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
2555  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
2556  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
2557  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
2558  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
2559  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2560  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
2561  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
2562  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
2563  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
2564  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
2565  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
2566  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
2567  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2568  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
2569  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
2570  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
2571  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
2572  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
2573  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
2574  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
2575  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
2576  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
2577  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
2578 }
2579 
2580 /** Destructor */
2582 {
2583  free(data_ptr);
2584 }
2585 
2586 /** Copy constructor.
2587  * @param m message to copy from
2588  */
2590 {
2591  data_size = m->data_size;
2592  data_ptr = malloc(data_size);
2593  memcpy(data_ptr, m->data_ptr, data_size);
2594  data = (DockMessage_data_t *)data_ptr;
2596 }
2597 
2598 /* Methods */
2599 /** Clone this message.
2600  * Produces a message of the same type as this message and copies the
2601  * data to the new message.
2602  * @return clone of this message
2603  */
2604 Message *
2606 {
2607  return new Roomba500Interface::DockMessage(this);
2608 }
2609 /** @class Roomba500Interface::SetModeMessage <interfaces/Roomba500Interface.h>
2610  * SetModeMessage Fawkes BlackBoard Interface Message.
2611  *
2612 
2613  */
2614 
2615 
2616 /** Constructor with initial values.
2617  * @param ini_mode initial value for mode
2618  */
2620 {
2621  data_size = sizeof(SetModeMessage_data_t);
2622  data_ptr = malloc(data_size);
2623  memset(data_ptr, 0, data_size);
2624  data = (SetModeMessage_data_t *)data_ptr;
2626  data->mode = ini_mode;
2627  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
2628  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
2629  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
2630  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
2631  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
2632  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
2633  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
2634  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
2635  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
2636  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
2637  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
2638  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
2639  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
2640  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
2641  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
2642  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
2643  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
2644  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
2645  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
2646  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
2647  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
2648  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
2649  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
2650  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
2651  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
2652  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
2653  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
2654  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2655  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
2656  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
2657  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
2658  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
2659  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
2660  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
2661  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
2662  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2663  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
2664  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
2665  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
2666  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
2667  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
2668  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
2669  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
2670  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
2671  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
2672  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
2673  add_fieldinfo(IFT_ENUM, "mode", 1, &data->mode, "Mode", &enum_map_Mode);
2674 }
2675 /** Constructor */
2677 {
2678  data_size = sizeof(SetModeMessage_data_t);
2679  data_ptr = malloc(data_size);
2680  memset(data_ptr, 0, data_size);
2681  data = (SetModeMessage_data_t *)data_ptr;
2683  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
2684  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
2685  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
2686  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
2687  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
2688  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
2689  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
2690  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
2691  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
2692  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
2693  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
2694  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
2695  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
2696  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
2697  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
2698  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
2699  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
2700  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
2701  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
2702  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
2703  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
2704  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
2705  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
2706  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
2707  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
2708  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
2709  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
2710  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2711  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
2712  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
2713  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
2714  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
2715  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
2716  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
2717  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
2718  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2719  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
2720  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
2721  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
2722  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
2723  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
2724  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
2725  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
2726  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
2727  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
2728  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
2729  add_fieldinfo(IFT_ENUM, "mode", 1, &data->mode, "Mode", &enum_map_Mode);
2730 }
2731 
2732 /** Destructor */
2734 {
2735  free(data_ptr);
2736 }
2737 
2738 /** Copy constructor.
2739  * @param m message to copy from
2740  */
2742 {
2743  data_size = m->data_size;
2744  data_ptr = malloc(data_size);
2745  memcpy(data_ptr, m->data_ptr, data_size);
2746  data = (SetModeMessage_data_t *)data_ptr;
2748 }
2749 
2750 /* Methods */
2751 /** Get mode value.
2752  * Open Interface mode.
2753  * @return mode value
2754  */
2757 {
2758  return (Roomba500Interface::Mode)data->mode;
2759 }
2760 
2761 /** Get maximum length of mode value.
2762  * @return length of mode value, can be length of the array or number of
2763  * maximum number of characters for a string
2764  */
2765 size_t
2767 {
2768  return 1;
2769 }
2770 
2771 /** Set mode value.
2772  * Open Interface mode.
2773  * @param new_mode new mode value
2774  */
2775 void
2777 {
2778  data->mode = new_mode;
2779 }
2780 
2781 /** Clone this message.
2782  * Produces a message of the same type as this message and copies the
2783  * data to the new message.
2784  * @return clone of this message
2785  */
2786 Message *
2788 {
2789  return new Roomba500Interface::SetModeMessage(this);
2790 }
2791 /** @class Roomba500Interface::DriveStraightMessage <interfaces/Roomba500Interface.h>
2792  * DriveStraightMessage Fawkes BlackBoard Interface Message.
2793  *
2794 
2795  */
2796 
2797 
2798 /** Constructor with initial values.
2799  * @param ini_velocity initial value for velocity
2800  */
2801 Roomba500Interface::DriveStraightMessage::DriveStraightMessage(const int16_t ini_velocity) : Message("DriveStraightMessage")
2802 {
2803  data_size = sizeof(DriveStraightMessage_data_t);
2804  data_ptr = malloc(data_size);
2805  memset(data_ptr, 0, data_size);
2806  data = (DriveStraightMessage_data_t *)data_ptr;
2808  data->velocity = ini_velocity;
2809  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
2810  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
2811  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
2812  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
2813  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
2814  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
2815  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
2816  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
2817  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
2818  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
2819  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
2820  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
2821  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
2822  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
2823  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
2824  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
2825  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
2826  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
2827  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
2828  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
2829  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
2830  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
2831  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
2832  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
2833  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
2834  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
2835  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
2836  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2837  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
2838  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
2839  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
2840  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
2841  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
2842  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
2843  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
2844  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2845  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
2846  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
2847  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
2848  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
2849  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
2850  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
2851  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
2852  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
2853  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
2854  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
2855  add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
2856 }
2857 /** Constructor */
2859 {
2860  data_size = sizeof(DriveStraightMessage_data_t);
2861  data_ptr = malloc(data_size);
2862  memset(data_ptr, 0, data_size);
2863  data = (DriveStraightMessage_data_t *)data_ptr;
2865  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
2866  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
2867  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
2868  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
2869  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
2870  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
2871  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
2872  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
2873  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
2874  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
2875  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
2876  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
2877  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
2878  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
2879  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
2880  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
2881  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
2882  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
2883  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
2884  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
2885  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
2886  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
2887  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
2888  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
2889  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
2890  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
2891  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
2892  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2893  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
2894  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
2895  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
2896  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
2897  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
2898  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
2899  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
2900  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
2901  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
2902  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
2903  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
2904  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
2905  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
2906  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
2907  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
2908  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
2909  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
2910  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
2911  add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
2912 }
2913 
2914 /** Destructor */
2916 {
2917  free(data_ptr);
2918 }
2919 
2920 /** Copy constructor.
2921  * @param m message to copy from
2922  */
2924 {
2925  data_size = m->data_size;
2926  data_ptr = malloc(data_size);
2927  memcpy(data_ptr, m->data_ptr, data_size);
2928  data = (DriveStraightMessage_data_t *)data_ptr;
2930 }
2931 
2932 /* Methods */
2933 /** Get velocity value.
2934  * Requested velocity in mm/s.
2935  * @return velocity value
2936  */
2937 int16_t
2939 {
2940  return data->velocity;
2941 }
2942 
2943 /** Get maximum length of velocity value.
2944  * @return length of velocity value, can be length of the array or number of
2945  * maximum number of characters for a string
2946  */
2947 size_t
2949 {
2950  return 1;
2951 }
2952 
2953 /** Set velocity value.
2954  * Requested velocity in mm/s.
2955  * @param new_velocity new velocity value
2956  */
2957 void
2959 {
2960  data->velocity = new_velocity;
2961 }
2962 
2963 /** Clone this message.
2964  * Produces a message of the same type as this message and copies the
2965  * data to the new message.
2966  * @return clone of this message
2967  */
2968 Message *
2970 {
2972 }
2973 /** @class Roomba500Interface::DriveMessage <interfaces/Roomba500Interface.h>
2974  * DriveMessage Fawkes BlackBoard Interface Message.
2975  *
2976 
2977  */
2978 
2979 
2980 /** Constructor with initial values.
2981  * @param ini_velocity initial value for velocity
2982  * @param ini_radius initial value for radius
2983  */
2984 Roomba500Interface::DriveMessage::DriveMessage(const int16_t ini_velocity, const int16_t ini_radius) : Message("DriveMessage")
2985 {
2986  data_size = sizeof(DriveMessage_data_t);
2987  data_ptr = malloc(data_size);
2988  memset(data_ptr, 0, data_size);
2989  data = (DriveMessage_data_t *)data_ptr;
2991  data->velocity = ini_velocity;
2992  data->radius = ini_radius;
2993  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
2994  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
2995  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
2996  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
2997  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
2998  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
2999  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
3000  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
3001  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
3002  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
3003  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
3004  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
3005  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
3006  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
3007  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
3008  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
3009  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
3010  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
3011  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
3012  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
3013  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
3014  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
3015  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
3016  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
3017  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
3018  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
3019  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
3020  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
3021  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
3022  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
3023  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
3024  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
3025  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
3026  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
3027  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
3028  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
3029  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
3030  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
3031  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
3032  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
3033  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
3034  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
3035  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
3036  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
3037  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
3038  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
3039  add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
3040  add_fieldinfo(IFT_INT16, "radius", 1, &data->radius);
3041 }
3042 /** Constructor */
3044 {
3045  data_size = sizeof(DriveMessage_data_t);
3046  data_ptr = malloc(data_size);
3047  memset(data_ptr, 0, data_size);
3048  data = (DriveMessage_data_t *)data_ptr;
3050  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
3051  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
3052  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
3053  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
3054  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
3055  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
3056  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
3057  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
3058  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
3059  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
3060  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
3061  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
3062  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
3063  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
3064  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
3065  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
3066  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
3067  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
3068  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
3069  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
3070  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
3071  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
3072  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
3073  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
3074  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
3075  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
3076  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
3077  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
3078  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
3079  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
3080  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
3081  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
3082  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
3083  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
3084  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
3085  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
3086  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
3087  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
3088  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
3089  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
3090  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
3091  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
3092  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
3093  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
3094  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
3095  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
3096  add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
3097  add_fieldinfo(IFT_INT16, "radius", 1, &data->radius);
3098 }
3099 
3100 /** Destructor */
3102 {
3103  free(data_ptr);
3104 }
3105 
3106 /** Copy constructor.
3107  * @param m message to copy from
3108  */
3110 {
3111  data_size = m->data_size;
3112  data_ptr = malloc(data_size);
3113  memcpy(data_ptr, m->data_ptr, data_size);
3114  data = (DriveMessage_data_t *)data_ptr;
3116 }
3117 
3118 /* Methods */
3119 /** Get velocity value.
3120  * Requested velocity in mm/s.
3121  * @return velocity value
3122  */
3123 int16_t
3125 {
3126  return data->velocity;
3127 }
3128 
3129 /** Get maximum length of velocity value.
3130  * @return length of velocity value, can be length of the array or number of
3131  * maximum number of characters for a string
3132  */
3133 size_t
3135 {
3136  return 1;
3137 }
3138 
3139 /** Set velocity value.
3140  * Requested velocity in mm/s.
3141  * @param new_velocity new velocity value
3142  */
3143 void
3145 {
3146  data->velocity = new_velocity;
3147 }
3148 
3149 /** Get radius value.
3150  * Requested radius in mm.
3151  * @return radius value
3152  */
3153 int16_t
3155 {
3156  return data->radius;
3157 }
3158 
3159 /** Get maximum length of radius value.
3160  * @return length of radius value, can be length of the array or number of
3161  * maximum number of characters for a string
3162  */
3163 size_t
3165 {
3166  return 1;
3167 }
3168 
3169 /** Set radius value.
3170  * Requested radius in mm.
3171  * @param new_radius new radius value
3172  */
3173 void
3175 {
3176  data->radius = new_radius;
3177 }
3178 
3179 /** Clone this message.
3180  * Produces a message of the same type as this message and copies the
3181  * data to the new message.
3182  * @return clone of this message
3183  */
3184 Message *
3186 {
3187  return new Roomba500Interface::DriveMessage(this);
3188 }
3189 /** @class Roomba500Interface::SetMotorsMessage <interfaces/Roomba500Interface.h>
3190  * SetMotorsMessage Fawkes BlackBoard Interface Message.
3191  *
3192 
3193  */
3194 
3195 
3196 /** Constructor with initial values.
3197  * @param ini_vacuuming initial value for vacuuming
3198  * @param ini_main initial value for main
3199  * @param ini_side initial value for side
3200  */
3201 Roomba500Interface::SetMotorsMessage::SetMotorsMessage(const bool ini_vacuuming, const BrushState ini_main, const BrushState ini_side) : Message("SetMotorsMessage")
3202 {
3203  data_size = sizeof(SetMotorsMessage_data_t);
3204  data_ptr = malloc(data_size);
3205  memset(data_ptr, 0, data_size);
3206  data = (SetMotorsMessage_data_t *)data_ptr;
3208  data->vacuuming = ini_vacuuming;
3209  data->main = ini_main;
3210  data->side = ini_side;
3211  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
3212  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
3213  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
3214  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
3215  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
3216  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
3217  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
3218  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
3219  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
3220  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
3221  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
3222  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
3223  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
3224  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
3225  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
3226  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
3227  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
3228  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
3229  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
3230  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
3231  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
3232  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
3233  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
3234  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
3235  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
3236  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
3237  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
3238  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
3239  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
3240  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
3241  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
3242  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
3243  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
3244  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
3245  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
3246  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
3247  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
3248  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
3249  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
3250  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
3251  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
3252  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
3253  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
3254  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
3255  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
3256  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
3257  add_fieldinfo(IFT_BOOL, "vacuuming", 1, &data->vacuuming);
3258  add_fieldinfo(IFT_ENUM, "main", 1, &data->main, "BrushState", &enum_map_BrushState);
3259  add_fieldinfo(IFT_ENUM, "side", 1, &data->side, "BrushState", &enum_map_BrushState);
3260 }
3261 /** Constructor */
3263 {
3264  data_size = sizeof(SetMotorsMessage_data_t);
3265  data_ptr = malloc(data_size);
3266  memset(data_ptr, 0, data_size);
3267  data = (SetMotorsMessage_data_t *)data_ptr;
3269  enum_map_Mode[(int)MODE_OFF] = "MODE_OFF";
3270  enum_map_Mode[(int)MODE_PASSIVE] = "MODE_PASSIVE";
3271  enum_map_Mode[(int)MODE_SAFE] = "MODE_SAFE";
3272  enum_map_Mode[(int)MODE_FULL] = "MODE_FULL";
3273  enum_map_InfraredCharacter[(int)IR_NONE] = "IR_NONE";
3274  enum_map_InfraredCharacter[(int)IR_REMOTE_LEFT] = "IR_REMOTE_LEFT";
3275  enum_map_InfraredCharacter[(int)IR_REMOTE_FORWARD] = "IR_REMOTE_FORWARD";
3276  enum_map_InfraredCharacter[(int)IR_REMOTE_RIGHT] = "IR_REMOTE_RIGHT";
3277  enum_map_InfraredCharacter[(int)IR_REMOTE_SPOT] = "IR_REMOTE_SPOT";
3278  enum_map_InfraredCharacter[(int)IR_REMOTE_MAX] = "IR_REMOTE_MAX";
3279  enum_map_InfraredCharacter[(int)IR_REMOTE_SMALL] = "IR_REMOTE_SMALL";
3280  enum_map_InfraredCharacter[(int)IR_REMOTE_MEDIUM] = "IR_REMOTE_MEDIUM";
3281  enum_map_InfraredCharacter[(int)IR_REMOTE_LARGE_CLEAN] = "IR_REMOTE_LARGE_CLEAN";
3282  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP] = "IR_REMOTE_STOP";
3283  enum_map_InfraredCharacter[(int)IR_REMOTE_POWER] = "IR_REMOTE_POWER";
3284  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_LEFT] = "IR_REMOTE_ARC_LEFT";
3285  enum_map_InfraredCharacter[(int)IR_REMOTE_ARC_RIGHT] = "IR_REMOTE_ARC_RIGHT";
3286  enum_map_InfraredCharacter[(int)IR_REMOTE_STOP2] = "IR_REMOTE_STOP2";
3287  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_DOWNLOAD] = "IR_SCHED_REMOTE_DOWNLOAD";
3288  enum_map_InfraredCharacter[(int)IR_SCHED_REMOTE_SEEK_DOCK] = "IR_SCHED_REMOTE_SEEK_DOCK";
3289  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RESERVED] = "IR_DISC_DOCK_RESERVED";
3290  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY] = "IR_DISC_DOCK_RED_BUOY";
3291  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY] = "IR_DISC_DOCK_GREEN_BUOY";
3292  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_FORCE_FIELD] = "IR_DISC_DOCK_FORCE_FIELD";
3293  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY] = "IR_DISC_DOCK_RED_GREEN_BUOY";
3294  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
3295  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
3296  enum_map_InfraredCharacter[(int)IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
3297  enum_map_InfraredCharacter[(int)IR_DOCK_RESERVED] = "IR_DOCK_RESERVED";
3298  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY] = "IR_DOCK_RED_BUOY";
3299  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY] = "IR_DOCK_GREEN_BUOY";
3300  enum_map_InfraredCharacter[(int)IR_DOCK_FORCE_FIELD] = "IR_DOCK_FORCE_FIELD";
3301  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY] = "IR_DOCK_RED_GREEN_BUOY";
3302  enum_map_InfraredCharacter[(int)IR_DOCK_RED_BUOY_FORCE_FIELD] = "IR_DOCK_RED_BUOY_FORCE_FIELD";
3303  enum_map_InfraredCharacter[(int)IR_DOCK_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
3304  enum_map_InfraredCharacter[(int)IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD] = "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
3305  enum_map_InfraredCharacter[(int)IR_VIRTUAL_WALL] = "IR_VIRTUAL_WALL";
3306  enum_map_ChargingState[(int)CHARGING_NO] = "CHARGING_NO";
3307  enum_map_ChargingState[(int)CHARGING_RECONDITIONING] = "CHARGING_RECONDITIONING";
3308  enum_map_ChargingState[(int)CHARGING_FULL] = "CHARGING_FULL";
3309  enum_map_ChargingState[(int)CHARGING_TRICKLE] = "CHARGING_TRICKLE";
3310  enum_map_ChargingState[(int)CHARGING_WAITING] = "CHARGING_WAITING";
3311  enum_map_ChargingState[(int)CHARGING_ERROR] = "CHARGING_ERROR";
3312  enum_map_BrushState[(int)BRUSHSTATE_OFF] = "BRUSHSTATE_OFF";
3313  enum_map_BrushState[(int)BRUSHSTATE_FORWARD] = "BRUSHSTATE_FORWARD";
3314  enum_map_BrushState[(int)BRUSHSTATE_BACKWARD] = "BRUSHSTATE_BACKWARD";
3315  add_fieldinfo(IFT_BOOL, "vacuuming", 1, &data->vacuuming);
3316  add_fieldinfo(IFT_ENUM, "main", 1, &data->main, "BrushState", &enum_map_BrushState);
3317  add_fieldinfo(IFT_ENUM, "side", 1, &data->side, "BrushState", &enum_map_BrushState);
3318 }
3319 
3320 /** Destructor */
3322 {
3323  free(data_ptr);
3324 }
3325 
3326 /** Copy constructor.
3327  * @param m message to copy from
3328  */
3330 {
3331  data_size = m->data_size;
3332  data_ptr = malloc(data_size);
3333  memcpy(data_ptr, m->data_ptr, data_size);
3334  data = (SetMotorsMessage_data_t *)data_ptr;
3336 }
3337 
3338 /* Methods */
3339 /** Get vacuuming value.
3340  * Enable vacuuming?
3341  * @return vacuuming value
3342  */
3343 bool
3345 {
3346  return data->vacuuming;
3347 }
3348 
3349 /** Get maximum length of vacuuming value.
3350  * @return length of vacuuming value, can be length of the array or number of
3351  * maximum number of characters for a string
3352  */
3353 size_t
3355 {
3356  return 1;
3357 }
3358 
3359 /** Set vacuuming value.
3360  * Enable vacuuming?
3361  * @param new_vacuuming new vacuuming value
3362  */
3363 void
3365 {
3366  data->vacuuming = new_vacuuming;
3367 }
3368 
3369 /** Get main value.
3370  * Main brush state.
3371  * @return main value
3372  */
3375 {
3376  return (Roomba500Interface::BrushState)data->main;
3377 }
3378 
3379 /** Get maximum length of main value.
3380  * @return length of main value, can be length of the array or number of
3381  * maximum number of characters for a string
3382  */
3383 size_t
3385 {
3386  return 1;
3387 }
3388 
3389 /** Set main value.
3390  * Main brush state.
3391  * @param new_main new main value
3392  */
3393 void
3395 {
3396  data->main = new_main;
3397 }
3398 
3399 /** Get side value.
3400  * Side brush state.
3401  * @return side value
3402  */
3405 {
3406  return (Roomba500Interface::BrushState)data->side;
3407 }
3408 
3409 /** Get maximum length of side value.
3410  * @return length of side value, can be length of the array or number of
3411  * maximum number of characters for a string
3412  */
3413 size_t
3415 {
3416  return 1;
3417 }
3418 
3419 /** Set side value.
3420  * Side brush state.
3421  * @param new_side new side value
3422  */
3423 void
3425 {
3426  data->side = new_side;
3427 }
3428 
3429 /** Clone this message.
3430  * Produces a message of the same type as this message and copies the
3431  * data to the new message.
3432  * @return clone of this message
3433  */
3434 Message *
3436 {
3437  return new Roomba500Interface::SetMotorsMessage(this);
3438 }
3439 /** Check if message is valid and can be enqueued.
3440  * @param message Message to check
3441  * @return true if the message is valid, false otherwise.
3442  */
3443 bool
3445 {
3446  const StopMessage *m0 = dynamic_cast<const StopMessage *>(message);
3447  if ( m0 != NULL ) {
3448  return true;
3449  }
3450  const DockMessage *m1 = dynamic_cast<const DockMessage *>(message);
3451  if ( m1 != NULL ) {
3452  return true;
3453  }
3454  const SetModeMessage *m2 = dynamic_cast<const SetModeMessage *>(message);
3455  if ( m2 != NULL ) {
3456  return true;
3457  }
3458  const DriveStraightMessage *m3 = dynamic_cast<const DriveStraightMessage *>(message);
3459  if ( m3 != NULL ) {
3460  return true;
3461  }
3462  const DriveMessage *m4 = dynamic_cast<const DriveMessage *>(message);
3463  if ( m4 != NULL ) {
3464  return true;
3465  }
3466  const SetMotorsMessage *m5 = dynamic_cast<const SetMotorsMessage *>(message);
3467  if ( m5 != NULL ) {
3468  return true;
3469  }
3470  return false;
3471 }
3472 
3473 /// @cond INTERNALS
3474 EXPORT_INTERFACE(Roomba500Interface)
3475 /// @endcond
3476 
3477 
3478 } // end namespace fawkes
size_t maxlenof_velocity() const
Get maximum length of velocity value.
virtual Message * clone() const
Clone this message.
void set_velocity(const int16_t new_velocity)
Set velocity value.
void * data_ptr
Pointer to memory that contains local data.
Definition: message.h:124
size_t maxlenof_mode() const
Get maximum length of mode value.
Roomba 500 dock: red and green buoy.
Base class for all messages passed through interfaces in Fawkes BlackBoard.
Definition: message.h:44
Roomba Discovery dock: red buoy and force field.
ChargingState
Current charging state.
IR Remote Control: spot button.
virtual Message * clone() const
Clone this message.
StopMessage Fawkes BlackBoard Interface Message.
bool is_vacuuming() const
Get vacuuming value.
Mode
Open Interface mode.
void set_radius(const int16_t new_radius)
Set radius value.
IR Remote Control: right arc button.
Roomba Discovery dock: red and green buoy and force field.
Roomba Discovery dock: green buoy and force field.
Fawkes library namespace.
IR Remote Control: max button.
Timestamp data, must be present and first entries for each interface data structs! This leans on time...
Definition: message.h:129
void set_main(const BrushState new_main)
Set main value.
InfraredCharacter
Infrared character values.
Passive mode, no control, only listening.
IR Remote Control: small button.
Base class for all Fawkes BlackBoard interfaces.
Definition: interface.h:79
virtual Message * clone() const
Clone this message.
16 bit integer field
Definition: types.h:39
IR Remote Control: stop button.
IR Remote Control: left arc button.
IR Remote Control: medium button.
DockMessage Fawkes BlackBoard Interface Message.
Roomba Discovery dock: green buoy and force field.
IR scheduling remote: seek dock button.
message_data_ts_t * data_ts
data timestamp aliasing pointer
Definition: message.h:133
size_t maxlenof_side() const
Get maximum length of side value.
unsigned int data_size
Size of memory needed to hold all data.
Definition: message.h:125
IR Remote Control: right button.
size_t maxlenof_radius() const
Get maximum length of radius value.
IR Remote Control: forward button.
Roomba Discovery dock: red and green buoy.
IR Remote Control: left button.
const char * type() const
Get type of interface.
Definition: interface.cpp:651
void set_side(const BrushState new_side)
Set side value.
void set_vacuuming(const bool new_vacuuming)
Set vacuuming value.
IR Remote Control: power button.
IR scheduling remote: download button.
virtual bool message_valid(const Message *message) const
Check if message is valid and can be enqueued.
SetMotorsMessage Fawkes BlackBoard Interface Message.
size_t maxlenof_vacuuming() const
Get maximum length of vacuuming value.
void set_mode(const Mode new_mode)
Set mode value.
int16_t radius() const
Get radius value.
Roomba 500 dock: red and green buoy and force field.
Roomba500Interface Fawkes BlackBoard Interface.
int16_t velocity() const
Get velocity value.
Control acquired, safety measures in place.
SetModeMessage Fawkes BlackBoard Interface Message.
IR Remote Control: stop button.
Control acquired, safety measures disabled.
size_t maxlenof_velocity() const
Get maximum length of velocity value.
Roomba 500 dock: green buoy and force field.
virtual Message * clone() const
Clone this message.
size_t maxlenof_main() const
Get maximum length of main value.
void set_velocity(const int16_t new_velocity)
Set velocity value.
IR Remote Control: large/clean button.
Roomba 500 dock: red buoy and force field.
void add_fieldinfo(interface_fieldtype_t type, const char *name, size_t length, void *value, const char *enumtype=0, const interface_enum_map_t *enum_map=0)
Add an entry to the info list.
Definition: message.cpp:436
boolean field
Definition: types.h:36
DriveStraightMessage Fawkes BlackBoard Interface Message.
DriveMessage Fawkes BlackBoard Interface Message.
Roomba 500 dock: green buoy and force field.
BrushState
State of the brushes.
field with interface specific enum type
Definition: types.h:49
virtual Message * clone() const
Clone this message.
virtual Message * clone() const
Clone this message.