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