Fawkes API  Fawkes Development Version
Roomba500Interface.cpp
00001 
00002 /***************************************************************************
00003  *  Roomba500Interface.cpp - Fawkes BlackBoard Interface - Roomba500Interface
00004  *
00005  *  Templated created:   Thu Oct 12 10:49:19 2006
00006  *  Copyright  2011  Tim Niemueller
00007  *
00008  ****************************************************************************/
00009 
00010 /*  This program is free software; you can redistribute it and/or modify
00011  *  it under the terms of the GNU General Public License as published by
00012  *  the Free Software Foundation; either version 2 of the License, or
00013  *  (at your option) any later version. A runtime exception applies to
00014  *  this software (see LICENSE.GPL_WRE file mentioned below for details).
00015  *
00016  *  This program is distributed in the hope that it will be useful,
00017  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  *  GNU Library General Public License for more details.
00020  *
00021  *  Read the full text in the LICENSE.GPL_WRE file in the doc directory.
00022  */
00023 
00024 #include <interfaces/Roomba500Interface.h>
00025 
00026 #include <core/exceptions/software.h>
00027 
00028 #include <cstring>
00029 #include <cstdlib>
00030 
00031 namespace fawkes {
00032 
00033 /** @class Roomba500Interface <interfaces/Roomba500Interface.h>
00034  * Roomba500Interface Fawkes BlackBoard Interface.
00035  * 
00036       Roomba 500 hardware interface.      
00037     
00038  * @ingroup FawkesInterfaces
00039  */
00040 
00041 
00042 
00043 /** Constructor */
00044 Roomba500Interface::Roomba500Interface() : Interface()
00045 {
00046   data_size = sizeof(Roomba500Interface_data_t);
00047   data_ptr  = malloc(data_size);
00048   data      = (Roomba500Interface_data_t *)data_ptr;
00049   data_ts   = (interface_data_ts_t *)data_ptr;
00050   memset(data_ptr, 0, data_size);
00051   add_fieldinfo(IFT_ENUM, "mode", 1, &data->mode, "Mode");
00052   add_fieldinfo(IFT_BOOL, "wheel_drop_left", 1, &data->wheel_drop_left);
00053   add_fieldinfo(IFT_BOOL, "wheel_drop_right", 1, &data->wheel_drop_right);
00054   add_fieldinfo(IFT_BOOL, "bump_left", 1, &data->bump_left);
00055   add_fieldinfo(IFT_BOOL, "bump_right", 1, &data->bump_right);
00056   add_fieldinfo(IFT_BOOL, "wall", 1, &data->wall);
00057   add_fieldinfo(IFT_BOOL, "cliff_left", 1, &data->cliff_left);
00058   add_fieldinfo(IFT_BOOL, "cliff_front_left", 1, &data->cliff_front_left);
00059   add_fieldinfo(IFT_BOOL, "cliff_front_right", 1, &data->cliff_front_right);
00060   add_fieldinfo(IFT_BOOL, "cliff_right", 1, &data->cliff_right);
00061   add_fieldinfo(IFT_BOOL, "virtual_wall", 1, &data->virtual_wall);
00062   add_fieldinfo(IFT_BOOL, "overcurrent_side_brush", 1, &data->overcurrent_side_brush);
00063   add_fieldinfo(IFT_BOOL, "overcurrent_main_brush", 1, &data->overcurrent_main_brush);
00064   add_fieldinfo(IFT_BOOL, "overcurrent_left_wheel", 1, &data->overcurrent_left_wheel);
00065   add_fieldinfo(IFT_BOOL, "overcurrent_right_wheel", 1, &data->overcurrent_right_wheel);
00066   add_fieldinfo(IFT_BOOL, "dirt_detect", 1, &data->dirt_detect);
00067   add_fieldinfo(IFT_ENUM, "ir_opcode_omni", 1, &data->ir_opcode_omni, "InfraredCharacter");
00068   add_fieldinfo(IFT_BOOL, "button_clean", 1, &data->button_clean);
00069   add_fieldinfo(IFT_BOOL, "button_spot", 1, &data->button_spot);
00070   add_fieldinfo(IFT_BOOL, "button_dock", 1, &data->button_dock);
00071   add_fieldinfo(IFT_BOOL, "button_minute", 1, &data->button_minute);
00072   add_fieldinfo(IFT_BOOL, "button_hour", 1, &data->button_hour);
00073   add_fieldinfo(IFT_BOOL, "button_day", 1, &data->button_day);
00074   add_fieldinfo(IFT_BOOL, "button_schedule", 1, &data->button_schedule);
00075   add_fieldinfo(IFT_BOOL, "button_clock", 1, &data->button_clock);
00076   add_fieldinfo(IFT_INT16, "distance", 1, &data->distance);
00077   add_fieldinfo(IFT_INT16, "angle", 1, &data->angle);
00078   add_fieldinfo(IFT_ENUM, "charging_state", 1, &data->charging_state, "ChargingState");
00079   add_fieldinfo(IFT_UINT16, "voltage", 1, &data->voltage);
00080   add_fieldinfo(IFT_INT16, "current", 1, &data->current);
00081   add_fieldinfo(IFT_INT8, "temperature", 1, &data->temperature);
00082   add_fieldinfo(IFT_UINT16, "battery_charge", 1, &data->battery_charge);
00083   add_fieldinfo(IFT_UINT16, "battery_capacity", 1, &data->battery_capacity);
00084   add_fieldinfo(IFT_UINT16, "wall_signal", 1, &data->wall_signal);
00085   add_fieldinfo(IFT_UINT16, "cliff_left_signal", 1, &data->cliff_left_signal);
00086   add_fieldinfo(IFT_UINT16, "cliff_front_left_signal", 1, &data->cliff_front_left_signal);
00087   add_fieldinfo(IFT_UINT16, "cliff_front_right_signal", 1, &data->cliff_front_right_signal);
00088   add_fieldinfo(IFT_UINT16, "cliff_right_signal", 1, &data->cliff_right_signal);
00089   add_fieldinfo(IFT_BOOL, "home_base_charger_available", 1, &data->home_base_charger_available);
00090   add_fieldinfo(IFT_BOOL, "internal_charger_available", 1, &data->internal_charger_available);
00091   add_fieldinfo(IFT_UINT8, "song_number", 1, &data->song_number);
00092   add_fieldinfo(IFT_BOOL, "song_playing", 1, &data->song_playing);
00093   add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
00094   add_fieldinfo(IFT_INT16, "radius", 1, &data->radius);
00095   add_fieldinfo(IFT_INT16, "velocity_right", 1, &data->velocity_right);
00096   add_fieldinfo(IFT_INT16, "velocity_left", 1, &data->velocity_left);
00097   add_fieldinfo(IFT_UINT16, "encoder_counts_left", 1, &data->encoder_counts_left);
00098   add_fieldinfo(IFT_UINT16, "encoder_counts_right", 1, &data->encoder_counts_right);
00099   add_fieldinfo(IFT_BOOL, "bumper_left", 1, &data->bumper_left);
00100   add_fieldinfo(IFT_BOOL, "bumper_front_left", 1, &data->bumper_front_left);
00101   add_fieldinfo(IFT_BOOL, "bumper_center_left", 1, &data->bumper_center_left);
00102   add_fieldinfo(IFT_BOOL, "bumper_center_right", 1, &data->bumper_center_right);
00103   add_fieldinfo(IFT_BOOL, "bumper_front_right", 1, &data->bumper_front_right);
00104   add_fieldinfo(IFT_BOOL, "bumper_right", 1, &data->bumper_right);
00105   add_fieldinfo(IFT_UINT16, "light_bump_left", 1, &data->light_bump_left);
00106   add_fieldinfo(IFT_UINT16, "light_bump_front_left", 1, &data->light_bump_front_left);
00107   add_fieldinfo(IFT_UINT16, "light_bump_center_left", 1, &data->light_bump_center_left);
00108   add_fieldinfo(IFT_UINT16, "light_bump_center_right", 1, &data->light_bump_center_right);
00109   add_fieldinfo(IFT_UINT16, "light_bump_front_right", 1, &data->light_bump_front_right);
00110   add_fieldinfo(IFT_UINT16, "light_bump_right", 1, &data->light_bump_right);
00111   add_fieldinfo(IFT_ENUM, "ir_opcode_left", 1, &data->ir_opcode_left, "InfraredCharacter");
00112   add_fieldinfo(IFT_ENUM, "ir_opcode_right", 1, &data->ir_opcode_right, "InfraredCharacter");
00113   add_fieldinfo(IFT_INT16, "left_motor_current", 1, &data->left_motor_current);
00114   add_fieldinfo(IFT_INT16, "right_motor_current", 1, &data->right_motor_current);
00115   add_fieldinfo(IFT_INT16, "main_brush_current", 1, &data->main_brush_current);
00116   add_fieldinfo(IFT_INT16, "side_brush_current", 1, &data->side_brush_current);
00117   add_fieldinfo(IFT_BOOL, "caster_stasis", 1, &data->caster_stasis);
00118   add_messageinfo("StopMessage");
00119   add_messageinfo("DockMessage");
00120   add_messageinfo("SetModeMessage");
00121   add_messageinfo("DriveStraightMessage");
00122   add_messageinfo("DriveMessage");
00123   add_messageinfo("SetMotorsMessage");
00124   unsigned char tmp_hash[] = {0x60, 0xa1, 0x1e, 0x86, 0x89, 0x2, 0x20, 0x34, 0x89, 0x32, 0xdb, 0x69, 0xee, 0x12, 0x86, 0x43};
00125   set_hash(tmp_hash);
00126 }
00127 
00128 /** Destructor */
00129 Roomba500Interface::~Roomba500Interface()
00130 {
00131   free(data_ptr);
00132 }
00133 /** Convert Mode constant to string.
00134  * @param value value to convert to string
00135  * @return constant value as string.
00136  */
00137 const char *
00138 Roomba500Interface::tostring_Mode(Mode value) const
00139 {
00140   switch (value) {
00141   case MODE_OFF: return "MODE_OFF";
00142   case MODE_PASSIVE: return "MODE_PASSIVE";
00143   case MODE_SAFE: return "MODE_SAFE";
00144   case MODE_FULL: return "MODE_FULL";
00145   default: return "UNKNOWN";
00146   }
00147 }
00148 /** Convert InfraredCharacter constant to string.
00149  * @param value value to convert to string
00150  * @return constant value as string.
00151  */
00152 const char *
00153 Roomba500Interface::tostring_InfraredCharacter(InfraredCharacter value) const
00154 {
00155   switch (value) {
00156   case IR_NONE: return "IR_NONE";
00157   case IR_REMOTE_LEFT: return "IR_REMOTE_LEFT";
00158   case IR_REMOTE_FORWARD: return "IR_REMOTE_FORWARD";
00159   case IR_REMOTE_RIGHT: return "IR_REMOTE_RIGHT";
00160   case IR_REMOTE_SPOT: return "IR_REMOTE_SPOT";
00161   case IR_REMOTE_MAX: return "IR_REMOTE_MAX";
00162   case IR_REMOTE_SMALL: return "IR_REMOTE_SMALL";
00163   case IR_REMOTE_MEDIUM: return "IR_REMOTE_MEDIUM";
00164   case IR_REMOTE_LARGE_CLEAN: return "IR_REMOTE_LARGE_CLEAN";
00165   case IR_REMOTE_STOP: return "IR_REMOTE_STOP";
00166   case IR_REMOTE_POWER: return "IR_REMOTE_POWER";
00167   case IR_REMOTE_ARC_LEFT: return "IR_REMOTE_ARC_LEFT";
00168   case IR_REMOTE_ARC_RIGHT: return "IR_REMOTE_ARC_RIGHT";
00169   case IR_REMOTE_STOP2: return "IR_REMOTE_STOP2";
00170   case IR_SCHED_REMOTE_DOWNLOAD: return "IR_SCHED_REMOTE_DOWNLOAD";
00171   case IR_SCHED_REMOTE_SEEK_DOCK: return "IR_SCHED_REMOTE_SEEK_DOCK";
00172   case IR_DISC_DOCK_RESERVED: return "IR_DISC_DOCK_RESERVED";
00173   case IR_DISC_DOCK_RED_BUOY: return "IR_DISC_DOCK_RED_BUOY";
00174   case IR_DISC_DOCK_GREEN_BUOY: return "IR_DISC_DOCK_GREEN_BUOY";
00175   case IR_DISC_DOCK_FORCE_FIELD: return "IR_DISC_DOCK_FORCE_FIELD";
00176   case IR_DISC_DOCK_RED_GREEN_BUOY: return "IR_DISC_DOCK_RED_GREEN_BUOY";
00177   case IR_DISC_DOCK_RED_BUOY_FORCE_FIELD: return "IR_DISC_DOCK_RED_BUOY_FORCE_FIELD";
00178   case IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD: return "IR_DISC_DOCK_GREEN_BUOY_FORCE_FIELD";
00179   case IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD: return "IR_DISC_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
00180   case IR_DOCK_RESERVED: return "IR_DOCK_RESERVED";
00181   case IR_DOCK_RED_BUOY: return "IR_DOCK_RED_BUOY";
00182   case IR_DOCK_GREEN_BUOY: return "IR_DOCK_GREEN_BUOY";
00183   case IR_DOCK_FORCE_FIELD: return "IR_DOCK_FORCE_FIELD";
00184   case IR_DOCK_RED_GREEN_BUOY: return "IR_DOCK_RED_GREEN_BUOY";
00185   case IR_DOCK_RED_BUOY_FORCE_FIELD: return "IR_DOCK_RED_BUOY_FORCE_FIELD";
00186   case IR_DOCK_GREEN_BUOY_FORCE_FIELD: return "IR_DOCK_GREEN_BUOY_FORCE_FIELD";
00187   case IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD: return "IR_DOCK_RED_GREEN_BUOY_FORCE_FIELD";
00188   case IR_VIRTUAL_WALL: return "IR_VIRTUAL_WALL";
00189   default: return "UNKNOWN";
00190   }
00191 }
00192 /** Convert ChargingState constant to string.
00193  * @param value value to convert to string
00194  * @return constant value as string.
00195  */
00196 const char *
00197 Roomba500Interface::tostring_ChargingState(ChargingState value) const
00198 {
00199   switch (value) {
00200   case CHARGING_NO: return "CHARGING_NO";
00201   case CHARGING_RECONDITIONING: return "CHARGING_RECONDITIONING";
00202   case CHARGING_FULL: return "CHARGING_FULL";
00203   case CHARGING_TRICKLE: return "CHARGING_TRICKLE";
00204   case CHARGING_WAITING: return "CHARGING_WAITING";
00205   case CHARGING_ERROR: return "CHARGING_ERROR";
00206   default: return "UNKNOWN";
00207   }
00208 }
00209 /** Convert BrushState constant to string.
00210  * @param value value to convert to string
00211  * @return constant value as string.
00212  */
00213 const char *
00214 Roomba500Interface::tostring_BrushState(BrushState value) const
00215 {
00216   switch (value) {
00217   case BRUSHSTATE_OFF: return "BRUSHSTATE_OFF";
00218   case BRUSHSTATE_FORWARD: return "BRUSHSTATE_FORWARD";
00219   case BRUSHSTATE_BACKWARD: return "BRUSHSTATE_BACKWARD";
00220   default: return "UNKNOWN";
00221   }
00222 }
00223 /* Methods */
00224 /** Get mode value.
00225  * Open Interface mode.
00226  * @return mode value
00227  */
00228 Roomba500Interface::Mode
00229 Roomba500Interface::mode() const
00230 {
00231   return (Roomba500Interface::Mode)data->mode;
00232 }
00233 
00234 /** Get maximum length of mode value.
00235  * @return length of mode value, can be length of the array or number of 
00236  * maximum number of characters for a string
00237  */
00238 size_t
00239 Roomba500Interface::maxlenof_mode() const
00240 {
00241   return 1;
00242 }
00243 
00244 /** Set mode value.
00245  * Open Interface mode.
00246  * @param new_mode new mode value
00247  */
00248 void
00249 Roomba500Interface::set_mode(const Mode new_mode)
00250 {
00251   data->mode = new_mode;
00252   data_changed = true;
00253 }
00254 
00255 /** Get wheel_drop_left value.
00256  * Left wheel drop sensor.
00257  * @return wheel_drop_left value
00258  */
00259 bool
00260 Roomba500Interface::is_wheel_drop_left() const
00261 {
00262   return data->wheel_drop_left;
00263 }
00264 
00265 /** Get maximum length of wheel_drop_left value.
00266  * @return length of wheel_drop_left value, can be length of the array or number of 
00267  * maximum number of characters for a string
00268  */
00269 size_t
00270 Roomba500Interface::maxlenof_wheel_drop_left() const
00271 {
00272   return 1;
00273 }
00274 
00275 /** Set wheel_drop_left value.
00276  * Left wheel drop sensor.
00277  * @param new_wheel_drop_left new wheel_drop_left value
00278  */
00279 void
00280 Roomba500Interface::set_wheel_drop_left(const bool new_wheel_drop_left)
00281 {
00282   data->wheel_drop_left = new_wheel_drop_left;
00283   data_changed = true;
00284 }
00285 
00286 /** Get wheel_drop_right value.
00287  * Right wheel drop sensor.
00288  * @return wheel_drop_right value
00289  */
00290 bool
00291 Roomba500Interface::is_wheel_drop_right() const
00292 {
00293   return data->wheel_drop_right;
00294 }
00295 
00296 /** Get maximum length of wheel_drop_right value.
00297  * @return length of wheel_drop_right value, can be length of the array or number of 
00298  * maximum number of characters for a string
00299  */
00300 size_t
00301 Roomba500Interface::maxlenof_wheel_drop_right() const
00302 {
00303   return 1;
00304 }
00305 
00306 /** Set wheel_drop_right value.
00307  * Right wheel drop sensor.
00308  * @param new_wheel_drop_right new wheel_drop_right value
00309  */
00310 void
00311 Roomba500Interface::set_wheel_drop_right(const bool new_wheel_drop_right)
00312 {
00313   data->wheel_drop_right = new_wheel_drop_right;
00314   data_changed = true;
00315 }
00316 
00317 /** Get bump_left value.
00318  * Bump on left.
00319  * @return bump_left value
00320  */
00321 bool
00322 Roomba500Interface::is_bump_left() const
00323 {
00324   return data->bump_left;
00325 }
00326 
00327 /** Get maximum length of bump_left value.
00328  * @return length of bump_left value, can be length of the array or number of 
00329  * maximum number of characters for a string
00330  */
00331 size_t
00332 Roomba500Interface::maxlenof_bump_left() const
00333 {
00334   return 1;
00335 }
00336 
00337 /** Set bump_left value.
00338  * Bump on left.
00339  * @param new_bump_left new bump_left value
00340  */
00341 void
00342 Roomba500Interface::set_bump_left(const bool new_bump_left)
00343 {
00344   data->bump_left = new_bump_left;
00345   data_changed = true;
00346 }
00347 
00348 /** Get bump_right value.
00349  * Bump on right.
00350  * @return bump_right value
00351  */
00352 bool
00353 Roomba500Interface::is_bump_right() const
00354 {
00355   return data->bump_right;
00356 }
00357 
00358 /** Get maximum length of bump_right value.
00359  * @return length of bump_right value, can be length of the array or number of 
00360  * maximum number of characters for a string
00361  */
00362 size_t
00363 Roomba500Interface::maxlenof_bump_right() const
00364 {
00365   return 1;
00366 }
00367 
00368 /** Set bump_right value.
00369  * Bump on right.
00370  * @param new_bump_right new bump_right value
00371  */
00372 void
00373 Roomba500Interface::set_bump_right(const bool new_bump_right)
00374 {
00375   data->bump_right = new_bump_right;
00376   data_changed = true;
00377 }
00378 
00379 /** Get wall value.
00380  * Wall sensor.
00381  * @return wall value
00382  */
00383 bool
00384 Roomba500Interface::is_wall() const
00385 {
00386   return data->wall;
00387 }
00388 
00389 /** Get maximum length of wall value.
00390  * @return length of wall value, can be length of the array or number of 
00391  * maximum number of characters for a string
00392  */
00393 size_t
00394 Roomba500Interface::maxlenof_wall() const
00395 {
00396   return 1;
00397 }
00398 
00399 /** Set wall value.
00400  * Wall sensor.
00401  * @param new_wall new wall value
00402  */
00403 void
00404 Roomba500Interface::set_wall(const bool new_wall)
00405 {
00406   data->wall = new_wall;
00407   data_changed = true;
00408 }
00409 
00410 /** Get cliff_left value.
00411  * Cliff detected left.
00412  * @return cliff_left value
00413  */
00414 bool
00415 Roomba500Interface::is_cliff_left() const
00416 {
00417   return data->cliff_left;
00418 }
00419 
00420 /** Get maximum length of cliff_left value.
00421  * @return length of cliff_left value, can be length of the array or number of 
00422  * maximum number of characters for a string
00423  */
00424 size_t
00425 Roomba500Interface::maxlenof_cliff_left() const
00426 {
00427   return 1;
00428 }
00429 
00430 /** Set cliff_left value.
00431  * Cliff detected left.
00432  * @param new_cliff_left new cliff_left value
00433  */
00434 void
00435 Roomba500Interface::set_cliff_left(const bool new_cliff_left)
00436 {
00437   data->cliff_left = new_cliff_left;
00438   data_changed = true;
00439 }
00440 
00441 /** Get cliff_front_left value.
00442  * Cliff detected front left.
00443  * @return cliff_front_left value
00444  */
00445 bool
00446 Roomba500Interface::is_cliff_front_left() const
00447 {
00448   return data->cliff_front_left;
00449 }
00450 
00451 /** Get maximum length of cliff_front_left value.
00452  * @return length of cliff_front_left value, can be length of the array or number of 
00453  * maximum number of characters for a string
00454  */
00455 size_t
00456 Roomba500Interface::maxlenof_cliff_front_left() const
00457 {
00458   return 1;
00459 }
00460 
00461 /** Set cliff_front_left value.
00462  * Cliff detected front left.
00463  * @param new_cliff_front_left new cliff_front_left value
00464  */
00465 void
00466 Roomba500Interface::set_cliff_front_left(const bool new_cliff_front_left)
00467 {
00468   data->cliff_front_left = new_cliff_front_left;
00469   data_changed = true;
00470 }
00471 
00472 /** Get cliff_front_right value.
00473  * Cliff detected front right.
00474  * @return cliff_front_right value
00475  */
00476 bool
00477 Roomba500Interface::is_cliff_front_right() const
00478 {
00479   return data->cliff_front_right;
00480 }
00481 
00482 /** Get maximum length of cliff_front_right value.
00483  * @return length of cliff_front_right value, can be length of the array or number of 
00484  * maximum number of characters for a string
00485  */
00486 size_t
00487 Roomba500Interface::maxlenof_cliff_front_right() const
00488 {
00489   return 1;
00490 }
00491 
00492 /** Set cliff_front_right value.
00493  * Cliff detected front right.
00494  * @param new_cliff_front_right new cliff_front_right value
00495  */
00496 void
00497 Roomba500Interface::set_cliff_front_right(const bool new_cliff_front_right)
00498 {
00499   data->cliff_front_right = new_cliff_front_right;
00500   data_changed = true;
00501 }
00502 
00503 /** Get cliff_right value.
00504  * Cliff detected right.
00505  * @return cliff_right value
00506  */
00507 bool
00508 Roomba500Interface::is_cliff_right() const
00509 {
00510   return data->cliff_right;
00511 }
00512 
00513 /** Get maximum length of cliff_right value.
00514  * @return length of cliff_right value, can be length of the array or number of 
00515  * maximum number of characters for a string
00516  */
00517 size_t
00518 Roomba500Interface::maxlenof_cliff_right() const
00519 {
00520   return 1;
00521 }
00522 
00523 /** Set cliff_right value.
00524  * Cliff detected right.
00525  * @param new_cliff_right new cliff_right value
00526  */
00527 void
00528 Roomba500Interface::set_cliff_right(const bool new_cliff_right)
00529 {
00530   data->cliff_right = new_cliff_right;
00531   data_changed = true;
00532 }
00533 
00534 /** Get virtual_wall value.
00535  * Virtual wall detected.
00536  * @return virtual_wall value
00537  */
00538 bool
00539 Roomba500Interface::is_virtual_wall() const
00540 {
00541   return data->virtual_wall;
00542 }
00543 
00544 /** Get maximum length of virtual_wall value.
00545  * @return length of virtual_wall value, can be length of the array or number of 
00546  * maximum number of characters for a string
00547  */
00548 size_t
00549 Roomba500Interface::maxlenof_virtual_wall() const
00550 {
00551   return 1;
00552 }
00553 
00554 /** Set virtual_wall value.
00555  * Virtual wall detected.
00556  * @param new_virtual_wall new virtual_wall value
00557  */
00558 void
00559 Roomba500Interface::set_virtual_wall(const bool new_virtual_wall)
00560 {
00561   data->virtual_wall = new_virtual_wall;
00562   data_changed = true;
00563 }
00564 
00565 /** Get overcurrent_side_brush value.
00566  * Overcurrent on side brush.
00567  * @return overcurrent_side_brush value
00568  */
00569 bool
00570 Roomba500Interface::is_overcurrent_side_brush() const
00571 {
00572   return data->overcurrent_side_brush;
00573 }
00574 
00575 /** Get maximum length of overcurrent_side_brush value.
00576  * @return length of overcurrent_side_brush value, can be length of the array or number of 
00577  * maximum number of characters for a string
00578  */
00579 size_t
00580 Roomba500Interface::maxlenof_overcurrent_side_brush() const
00581 {
00582   return 1;
00583 }
00584 
00585 /** Set overcurrent_side_brush value.
00586  * Overcurrent on side brush.
00587  * @param new_overcurrent_side_brush new overcurrent_side_brush value
00588  */
00589 void
00590 Roomba500Interface::set_overcurrent_side_brush(const bool new_overcurrent_side_brush)
00591 {
00592   data->overcurrent_side_brush = new_overcurrent_side_brush;
00593   data_changed = true;
00594 }
00595 
00596 /** Get overcurrent_main_brush value.
00597  * Overcurrent on main brush.
00598  * @return overcurrent_main_brush value
00599  */
00600 bool
00601 Roomba500Interface::is_overcurrent_main_brush() const
00602 {
00603   return data->overcurrent_main_brush;
00604 }
00605 
00606 /** Get maximum length of overcurrent_main_brush value.
00607  * @return length of overcurrent_main_brush value, can be length of the array or number of 
00608  * maximum number of characters for a string
00609  */
00610 size_t
00611 Roomba500Interface::maxlenof_overcurrent_main_brush() const
00612 {
00613   return 1;
00614 }
00615 
00616 /** Set overcurrent_main_brush value.
00617  * Overcurrent on main brush.
00618  * @param new_overcurrent_main_brush new overcurrent_main_brush value
00619  */
00620 void
00621 Roomba500Interface::set_overcurrent_main_brush(const bool new_overcurrent_main_brush)
00622 {
00623   data->overcurrent_main_brush = new_overcurrent_main_brush;
00624   data_changed = true;
00625 }
00626 
00627 /** Get overcurrent_left_wheel value.
00628  * Overcurrent on left wheel.
00629  * @return overcurrent_left_wheel value
00630  */
00631 bool
00632 Roomba500Interface::is_overcurrent_left_wheel() const
00633 {
00634   return data->overcurrent_left_wheel;
00635 }
00636 
00637 /** Get maximum length of overcurrent_left_wheel value.
00638  * @return length of overcurrent_left_wheel value, can be length of the array or number of 
00639  * maximum number of characters for a string
00640  */
00641 size_t
00642 Roomba500Interface::maxlenof_overcurrent_left_wheel() const
00643 {
00644   return 1;
00645 }
00646 
00647 /** Set overcurrent_left_wheel value.
00648  * Overcurrent on left wheel.
00649  * @param new_overcurrent_left_wheel new overcurrent_left_wheel value
00650  */
00651 void
00652 Roomba500Interface::set_overcurrent_left_wheel(const bool new_overcurrent_left_wheel)
00653 {
00654   data->overcurrent_left_wheel = new_overcurrent_left_wheel;
00655   data_changed = true;
00656 }
00657 
00658 /** Get overcurrent_right_wheel value.
00659  * Overcurrent on right wheel.
00660  * @return overcurrent_right_wheel value
00661  */
00662 bool
00663 Roomba500Interface::is_overcurrent_right_wheel() const
00664 {
00665   return data->overcurrent_right_wheel;
00666 }
00667 
00668 /** Get maximum length of overcurrent_right_wheel value.
00669  * @return length of overcurrent_right_wheel value, can be length of the array or number of 
00670  * maximum number of characters for a string
00671  */
00672 size_t
00673 Roomba500Interface::maxlenof_overcurrent_right_wheel() const
00674 {
00675   return 1;
00676 }
00677 
00678 /** Set overcurrent_right_wheel value.
00679  * Overcurrent on right wheel.
00680  * @param new_overcurrent_right_wheel new overcurrent_right_wheel value
00681  */
00682 void
00683 Roomba500Interface::set_overcurrent_right_wheel(const bool new_overcurrent_right_wheel)
00684 {
00685   data->overcurrent_right_wheel = new_overcurrent_right_wheel;
00686   data_changed = true;
00687 }
00688 
00689 /** Get dirt_detect value.
00690  * Dirt detected?
00691  * @return dirt_detect value
00692  */
00693 bool
00694 Roomba500Interface::is_dirt_detect() const
00695 {
00696   return data->dirt_detect;
00697 }
00698 
00699 /** Get maximum length of dirt_detect value.
00700  * @return length of dirt_detect value, can be length of the array or number of 
00701  * maximum number of characters for a string
00702  */
00703 size_t
00704 Roomba500Interface::maxlenof_dirt_detect() const
00705 {
00706   return 1;
00707 }
00708 
00709 /** Set dirt_detect value.
00710  * Dirt detected?
00711  * @param new_dirt_detect new dirt_detect value
00712  */
00713 void
00714 Roomba500Interface::set_dirt_detect(const bool new_dirt_detect)
00715 {
00716   data->dirt_detect = new_dirt_detect;
00717   data_changed = true;
00718 }
00719 
00720 /** Get ir_opcode_omni value.
00721  * Omni IR receiver code.
00722  * @return ir_opcode_omni value
00723  */
00724 Roomba500Interface::InfraredCharacter
00725 Roomba500Interface::ir_opcode_omni() const
00726 {
00727   return (Roomba500Interface::InfraredCharacter)data->ir_opcode_omni;
00728 }
00729 
00730 /** Get maximum length of ir_opcode_omni value.
00731  * @return length of ir_opcode_omni value, can be length of the array or number of 
00732  * maximum number of characters for a string
00733  */
00734 size_t
00735 Roomba500Interface::maxlenof_ir_opcode_omni() const
00736 {
00737   return 1;
00738 }
00739 
00740 /** Set ir_opcode_omni value.
00741  * Omni IR receiver code.
00742  * @param new_ir_opcode_omni new ir_opcode_omni value
00743  */
00744 void
00745 Roomba500Interface::set_ir_opcode_omni(const InfraredCharacter new_ir_opcode_omni)
00746 {
00747   data->ir_opcode_omni = new_ir_opcode_omni;
00748   data_changed = true;
00749 }
00750 
00751 /** Get button_clean value.
00752  * Clean button pressed.
00753  * @return button_clean value
00754  */
00755 bool
00756 Roomba500Interface::is_button_clean() const
00757 {
00758   return data->button_clean;
00759 }
00760 
00761 /** Get maximum length of button_clean value.
00762  * @return length of button_clean value, can be length of the array or number of 
00763  * maximum number of characters for a string
00764  */
00765 size_t
00766 Roomba500Interface::maxlenof_button_clean() const
00767 {
00768   return 1;
00769 }
00770 
00771 /** Set button_clean value.
00772  * Clean button pressed.
00773  * @param new_button_clean new button_clean value
00774  */
00775 void
00776 Roomba500Interface::set_button_clean(const bool new_button_clean)
00777 {
00778   data->button_clean = new_button_clean;
00779   data_changed = true;
00780 }
00781 
00782 /** Get button_spot value.
00783  * Spot button pressed.
00784  * @return button_spot value
00785  */
00786 bool
00787 Roomba500Interface::is_button_spot() const
00788 {
00789   return data->button_spot;
00790 }
00791 
00792 /** Get maximum length of button_spot value.
00793  * @return length of button_spot value, can be length of the array or number of 
00794  * maximum number of characters for a string
00795  */
00796 size_t
00797 Roomba500Interface::maxlenof_button_spot() const
00798 {
00799   return 1;
00800 }
00801 
00802 /** Set button_spot value.
00803  * Spot button pressed.
00804  * @param new_button_spot new button_spot value
00805  */
00806 void
00807 Roomba500Interface::set_button_spot(const bool new_button_spot)
00808 {
00809   data->button_spot = new_button_spot;
00810   data_changed = true;
00811 }
00812 
00813 /** Get button_dock value.
00814  * Dock button pressed.
00815  * @return button_dock value
00816  */
00817 bool
00818 Roomba500Interface::is_button_dock() const
00819 {
00820   return data->button_dock;
00821 }
00822 
00823 /** Get maximum length of button_dock value.
00824  * @return length of button_dock value, can be length of the array or number of 
00825  * maximum number of characters for a string
00826  */
00827 size_t
00828 Roomba500Interface::maxlenof_button_dock() const
00829 {
00830   return 1;
00831 }
00832 
00833 /** Set button_dock value.
00834  * Dock button pressed.
00835  * @param new_button_dock new button_dock value
00836  */
00837 void
00838 Roomba500Interface::set_button_dock(const bool new_button_dock)
00839 {
00840   data->button_dock = new_button_dock;
00841   data_changed = true;
00842 }
00843 
00844 /** Get button_minute value.
00845  * Minute button pressed.
00846  * @return button_minute value
00847  */
00848 bool
00849 Roomba500Interface::is_button_minute() const
00850 {
00851   return data->button_minute;
00852 }
00853 
00854 /** Get maximum length of button_minute value.
00855  * @return length of button_minute value, can be length of the array or number of 
00856  * maximum number of characters for a string
00857  */
00858 size_t
00859 Roomba500Interface::maxlenof_button_minute() const
00860 {
00861   return 1;
00862 }
00863 
00864 /** Set button_minute value.
00865  * Minute button pressed.
00866  * @param new_button_minute new button_minute value
00867  */
00868 void
00869 Roomba500Interface::set_button_minute(const bool new_button_minute)
00870 {
00871   data->button_minute = new_button_minute;
00872   data_changed = true;
00873 }
00874 
00875 /** Get button_hour value.
00876  * Hour button pressed.
00877  * @return button_hour value
00878  */
00879 bool
00880 Roomba500Interface::is_button_hour() const
00881 {
00882   return data->button_hour;
00883 }
00884 
00885 /** Get maximum length of button_hour value.
00886  * @return length of button_hour value, can be length of the array or number of 
00887  * maximum number of characters for a string
00888  */
00889 size_t
00890 Roomba500Interface::maxlenof_button_hour() const
00891 {
00892   return 1;
00893 }
00894 
00895 /** Set button_hour value.
00896  * Hour button pressed.
00897  * @param new_button_hour new button_hour value
00898  */
00899 void
00900 Roomba500Interface::set_button_hour(const bool new_button_hour)
00901 {
00902   data->button_hour = new_button_hour;
00903   data_changed = true;
00904 }
00905 
00906 /** Get button_day value.
00907  * Day button pressed.
00908  * @return button_day value
00909  */
00910 bool
00911 Roomba500Interface::is_button_day() const
00912 {
00913   return data->button_day;
00914 }
00915 
00916 /** Get maximum length of button_day value.
00917  * @return length of button_day value, can be length of the array or number of 
00918  * maximum number of characters for a string
00919  */
00920 size_t
00921 Roomba500Interface::maxlenof_button_day() const
00922 {
00923   return 1;
00924 }
00925 
00926 /** Set button_day value.
00927  * Day button pressed.
00928  * @param new_button_day new button_day value
00929  */
00930 void
00931 Roomba500Interface::set_button_day(const bool new_button_day)
00932 {
00933   data->button_day = new_button_day;
00934   data_changed = true;
00935 }
00936 
00937 /** Get button_schedule value.
00938  * Schedule button pressed.
00939  * @return button_schedule value
00940  */
00941 bool
00942 Roomba500Interface::is_button_schedule() const
00943 {
00944   return data->button_schedule;
00945 }
00946 
00947 /** Get maximum length of button_schedule value.
00948  * @return length of button_schedule value, can be length of the array or number of 
00949  * maximum number of characters for a string
00950  */
00951 size_t
00952 Roomba500Interface::maxlenof_button_schedule() const
00953 {
00954   return 1;
00955 }
00956 
00957 /** Set button_schedule value.
00958  * Schedule button pressed.
00959  * @param new_button_schedule new button_schedule value
00960  */
00961 void
00962 Roomba500Interface::set_button_schedule(const bool new_button_schedule)
00963 {
00964   data->button_schedule = new_button_schedule;
00965   data_changed = true;
00966 }
00967 
00968 /** Get button_clock value.
00969  * Clock button pressed.
00970  * @return button_clock value
00971  */
00972 bool
00973 Roomba500Interface::is_button_clock() const
00974 {
00975   return data->button_clock;
00976 }
00977 
00978 /** Get maximum length of button_clock value.
00979  * @return length of button_clock value, can be length of the array or number of 
00980  * maximum number of characters for a string
00981  */
00982 size_t
00983 Roomba500Interface::maxlenof_button_clock() const
00984 {
00985   return 1;
00986 }
00987 
00988 /** Set button_clock value.
00989  * Clock button pressed.
00990  * @param new_button_clock new button_clock value
00991  */
00992 void
00993 Roomba500Interface::set_button_clock(const bool new_button_clock)
00994 {
00995   data->button_clock = new_button_clock;
00996   data_changed = true;
00997 }
00998 
00999 /** Get distance value.
01000  * Travelled distance in m.
01001  * @return distance value
01002  */
01003 int16_t
01004 Roomba500Interface::distance() const
01005 {
01006   return data->distance;
01007 }
01008 
01009 /** Get maximum length of distance value.
01010  * @return length of distance value, can be length of the array or number of 
01011  * maximum number of characters for a string
01012  */
01013 size_t
01014 Roomba500Interface::maxlenof_distance() const
01015 {
01016   return 1;
01017 }
01018 
01019 /** Set distance value.
01020  * Travelled distance in m.
01021  * @param new_distance new distance value
01022  */
01023 void
01024 Roomba500Interface::set_distance(const int16_t new_distance)
01025 {
01026   data->distance = new_distance;
01027   data_changed = true;
01028 }
01029 
01030 /** Get angle value.
01031  * Turned angle in radians.
01032  * @return angle value
01033  */
01034 int16_t
01035 Roomba500Interface::angle() const
01036 {
01037   return data->angle;
01038 }
01039 
01040 /** Get maximum length of angle value.
01041  * @return length of angle value, can be length of the array or number of 
01042  * maximum number of characters for a string
01043  */
01044 size_t
01045 Roomba500Interface::maxlenof_angle() const
01046 {
01047   return 1;
01048 }
01049 
01050 /** Set angle value.
01051  * Turned angle in radians.
01052  * @param new_angle new angle value
01053  */
01054 void
01055 Roomba500Interface::set_angle(const int16_t new_angle)
01056 {
01057   data->angle = new_angle;
01058   data_changed = true;
01059 }
01060 
01061 /** Get charging_state value.
01062  * Charging state.
01063  * @return charging_state value
01064  */
01065 Roomba500Interface::ChargingState
01066 Roomba500Interface::charging_state() const
01067 {
01068   return (Roomba500Interface::ChargingState)data->charging_state;
01069 }
01070 
01071 /** Get maximum length of charging_state value.
01072  * @return length of charging_state value, can be length of the array or number of 
01073  * maximum number of characters for a string
01074  */
01075 size_t
01076 Roomba500Interface::maxlenof_charging_state() const
01077 {
01078   return 1;
01079 }
01080 
01081 /** Set charging_state value.
01082  * Charging state.
01083  * @param new_charging_state new charging_state value
01084  */
01085 void
01086 Roomba500Interface::set_charging_state(const ChargingState new_charging_state)
01087 {
01088   data->charging_state = new_charging_state;
01089   data_changed = true;
01090 }
01091 
01092 /** Get voltage value.
01093  * Voltage in mV.
01094  * @return voltage value
01095  */
01096 uint16_t
01097 Roomba500Interface::voltage() const
01098 {
01099   return data->voltage;
01100 }
01101 
01102 /** Get maximum length of voltage value.
01103  * @return length of voltage value, can be length of the array or number of 
01104  * maximum number of characters for a string
01105  */
01106 size_t
01107 Roomba500Interface::maxlenof_voltage() const
01108 {
01109   return 1;
01110 }
01111 
01112 /** Set voltage value.
01113  * Voltage in mV.
01114  * @param new_voltage new voltage value
01115  */
01116 void
01117 Roomba500Interface::set_voltage(const uint16_t new_voltage)
01118 {
01119   data->voltage = new_voltage;
01120   data_changed = true;
01121 }
01122 
01123 /** Get current value.
01124  * Current in mA.
01125  * @return current value
01126  */
01127 int16_t
01128 Roomba500Interface::current() const
01129 {
01130   return data->current;
01131 }
01132 
01133 /** Get maximum length of current value.
01134  * @return length of current value, can be length of the array or number of 
01135  * maximum number of characters for a string
01136  */
01137 size_t
01138 Roomba500Interface::maxlenof_current() const
01139 {
01140   return 1;
01141 }
01142 
01143 /** Set current value.
01144  * Current in mA.
01145  * @param new_current new current value
01146  */
01147 void
01148 Roomba500Interface::set_current(const int16_t new_current)
01149 {
01150   data->current = new_current;
01151   data_changed = true;
01152 }
01153 
01154 /** Get temperature value.
01155  * Temperature in degree Celsius.
01156  * @return temperature value
01157  */
01158 int8_t
01159 Roomba500Interface::temperature() const
01160 {
01161   return data->temperature;
01162 }
01163 
01164 /** Get maximum length of temperature value.
01165  * @return length of temperature value, can be length of the array or number of 
01166  * maximum number of characters for a string
01167  */
01168 size_t
01169 Roomba500Interface::maxlenof_temperature() const
01170 {
01171   return 1;
01172 }
01173 
01174 /** Set temperature value.
01175  * Temperature in degree Celsius.
01176  * @param new_temperature new temperature value
01177  */
01178 void
01179 Roomba500Interface::set_temperature(const int8_t new_temperature)
01180 {
01181   data->temperature = new_temperature;
01182   data_changed = true;
01183 }
01184 
01185 /** Get battery_charge value.
01186  * Battery charge in mAh.
01187  * @return battery_charge value
01188  */
01189 uint16_t
01190 Roomba500Interface::battery_charge() const
01191 {
01192   return data->battery_charge;
01193 }
01194 
01195 /** Get maximum length of battery_charge value.
01196  * @return length of battery_charge value, can be length of the array or number of 
01197  * maximum number of characters for a string
01198  */
01199 size_t
01200 Roomba500Interface::maxlenof_battery_charge() const
01201 {
01202   return 1;
01203 }
01204 
01205 /** Set battery_charge value.
01206  * Battery charge in mAh.
01207  * @param new_battery_charge new battery_charge value
01208  */
01209 void
01210 Roomba500Interface::set_battery_charge(const uint16_t new_battery_charge)
01211 {
01212   data->battery_charge = new_battery_charge;
01213   data_changed = true;
01214 }
01215 
01216 /** Get battery_capacity value.
01217  * Battery capacity in mAh.
01218  * @return battery_capacity value
01219  */
01220 uint16_t
01221 Roomba500Interface::battery_capacity() const
01222 {
01223   return data->battery_capacity;
01224 }
01225 
01226 /** Get maximum length of battery_capacity value.
01227  * @return length of battery_capacity value, can be length of the array or number of 
01228  * maximum number of characters for a string
01229  */
01230 size_t
01231 Roomba500Interface::maxlenof_battery_capacity() const
01232 {
01233   return 1;
01234 }
01235 
01236 /** Set battery_capacity value.
01237  * Battery capacity in mAh.
01238  * @param new_battery_capacity new battery_capacity value
01239  */
01240 void
01241 Roomba500Interface::set_battery_capacity(const uint16_t new_battery_capacity)
01242 {
01243   data->battery_capacity = new_battery_capacity;
01244   data_changed = true;
01245 }
01246 
01247 /** Get wall_signal value.
01248  * Raw wall signal
01249  * @return wall_signal value
01250  */
01251 uint16_t
01252 Roomba500Interface::wall_signal() const
01253 {
01254   return data->wall_signal;
01255 }
01256 
01257 /** Get maximum length of wall_signal value.
01258  * @return length of wall_signal value, can be length of the array or number of 
01259  * maximum number of characters for a string
01260  */
01261 size_t
01262 Roomba500Interface::maxlenof_wall_signal() const
01263 {
01264   return 1;
01265 }
01266 
01267 /** Set wall_signal value.
01268  * Raw wall signal
01269  * @param new_wall_signal new wall_signal value
01270  */
01271 void
01272 Roomba500Interface::set_wall_signal(const uint16_t new_wall_signal)
01273 {
01274   data->wall_signal = new_wall_signal;
01275   data_changed = true;
01276 }
01277 
01278 /** Get cliff_left_signal value.
01279  * Raw left cliff signal.
01280  * @return cliff_left_signal value
01281  */
01282 uint16_t
01283 Roomba500Interface::cliff_left_signal() const
01284 {
01285   return data->cliff_left_signal;
01286 }
01287 
01288 /** Get maximum length of cliff_left_signal value.
01289  * @return length of cliff_left_signal value, can be length of the array or number of 
01290  * maximum number of characters for a string
01291  */
01292 size_t
01293 Roomba500Interface::maxlenof_cliff_left_signal() const
01294 {
01295   return 1;
01296 }
01297 
01298 /** Set cliff_left_signal value.
01299  * Raw left cliff signal.
01300  * @param new_cliff_left_signal new cliff_left_signal value
01301  */
01302 void
01303 Roomba500Interface::set_cliff_left_signal(const uint16_t new_cliff_left_signal)
01304 {
01305   data->cliff_left_signal = new_cliff_left_signal;
01306   data_changed = true;
01307 }
01308 
01309 /** Get cliff_front_left_signal value.
01310  * Raw front left
01311       cliff signal.
01312  * @return cliff_front_left_signal value
01313  */
01314 uint16_t
01315 Roomba500Interface::cliff_front_left_signal() const
01316 {
01317   return data->cliff_front_left_signal;
01318 }
01319 
01320 /** Get maximum length of cliff_front_left_signal value.
01321  * @return length of cliff_front_left_signal value, can be length of the array or number of 
01322  * maximum number of characters for a string
01323  */
01324 size_t
01325 Roomba500Interface::maxlenof_cliff_front_left_signal() const
01326 {
01327   return 1;
01328 }
01329 
01330 /** Set cliff_front_left_signal value.
01331  * Raw front left
01332       cliff signal.
01333  * @param new_cliff_front_left_signal new cliff_front_left_signal value
01334  */
01335 void
01336 Roomba500Interface::set_cliff_front_left_signal(const uint16_t new_cliff_front_left_signal)
01337 {
01338   data->cliff_front_left_signal = new_cliff_front_left_signal;
01339   data_changed = true;
01340 }
01341 
01342 /** Get cliff_front_right_signal value.
01343  * Raw front right
01344       cliff signal.
01345  * @return cliff_front_right_signal value
01346  */
01347 uint16_t
01348 Roomba500Interface::cliff_front_right_signal() const
01349 {
01350   return data->cliff_front_right_signal;
01351 }
01352 
01353 /** Get maximum length of cliff_front_right_signal value.
01354  * @return length of cliff_front_right_signal value, can be length of the array or number of 
01355  * maximum number of characters for a string
01356  */
01357 size_t
01358 Roomba500Interface::maxlenof_cliff_front_right_signal() const
01359 {
01360   return 1;
01361 }
01362 
01363 /** Set cliff_front_right_signal value.
01364  * Raw front right
01365       cliff signal.
01366  * @param new_cliff_front_right_signal new cliff_front_right_signal value
01367  */
01368 void
01369 Roomba500Interface::set_cliff_front_right_signal(const uint16_t new_cliff_front_right_signal)
01370 {
01371   data->cliff_front_right_signal = new_cliff_front_right_signal;
01372   data_changed = true;
01373 }
01374 
01375 /** Get cliff_right_signal value.
01376  * Raw right cliff signal.
01377  * @return cliff_right_signal value
01378  */
01379 uint16_t
01380 Roomba500Interface::cliff_right_signal() const
01381 {
01382   return data->cliff_right_signal;
01383 }
01384 
01385 /** Get maximum length of cliff_right_signal value.
01386  * @return length of cliff_right_signal value, can be length of the array or number of 
01387  * maximum number of characters for a string
01388  */
01389 size_t
01390 Roomba500Interface::maxlenof_cliff_right_signal() const
01391 {
01392   return 1;
01393 }
01394 
01395 /** Set cliff_right_signal value.
01396  * Raw right cliff signal.
01397  * @param new_cliff_right_signal new cliff_right_signal value
01398  */
01399 void
01400 Roomba500Interface::set_cliff_right_signal(const uint16_t new_cliff_right_signal)
01401 {
01402   data->cliff_right_signal = new_cliff_right_signal;
01403   data_changed = true;
01404 }
01405 
01406 /** Get home_base_charger_available value.
01407  * 
01408       Home base charger available?
01409  * @return home_base_charger_available value
01410  */
01411 bool
01412 Roomba500Interface::is_home_base_charger_available() const
01413 {
01414   return data->home_base_charger_available;
01415 }
01416 
01417 /** Get maximum length of home_base_charger_available value.
01418  * @return length of home_base_charger_available value, can be length of the array or number of 
01419  * maximum number of characters for a string
01420  */
01421 size_t
01422 Roomba500Interface::maxlenof_home_base_charger_available() const
01423 {
01424   return 1;
01425 }
01426 
01427 /** Set home_base_charger_available value.
01428  * 
01429       Home base charger available?
01430  * @param new_home_base_charger_available new home_base_charger_available value
01431  */
01432 void
01433 Roomba500Interface::set_home_base_charger_available(const bool new_home_base_charger_available)
01434 {
01435   data->home_base_charger_available = new_home_base_charger_available;
01436   data_changed = true;
01437 }
01438 
01439 /** Get internal_charger_available value.
01440  * 
01441       Internal charger available?
01442  * @return internal_charger_available value
01443  */
01444 bool
01445 Roomba500Interface::is_internal_charger_available() const
01446 {
01447   return data->internal_charger_available;
01448 }
01449 
01450 /** Get maximum length of internal_charger_available value.
01451  * @return length of internal_charger_available value, can be length of the array or number of 
01452  * maximum number of characters for a string
01453  */
01454 size_t
01455 Roomba500Interface::maxlenof_internal_charger_available() const
01456 {
01457   return 1;
01458 }
01459 
01460 /** Set internal_charger_available value.
01461  * 
01462       Internal charger available?
01463  * @param new_internal_charger_available new internal_charger_available value
01464  */
01465 void
01466 Roomba500Interface::set_internal_charger_available(const bool new_internal_charger_available)
01467 {
01468   data->internal_charger_available = new_internal_charger_available;
01469   data_changed = true;
01470 }
01471 
01472 /** Get song_number value.
01473  * Song number.
01474  * @return song_number value
01475  */
01476 uint8_t
01477 Roomba500Interface::song_number() const
01478 {
01479   return data->song_number;
01480 }
01481 
01482 /** Get maximum length of song_number value.
01483  * @return length of song_number value, can be length of the array or number of 
01484  * maximum number of characters for a string
01485  */
01486 size_t
01487 Roomba500Interface::maxlenof_song_number() const
01488 {
01489   return 1;
01490 }
01491 
01492 /** Set song_number value.
01493  * Song number.
01494  * @param new_song_number new song_number value
01495  */
01496 void
01497 Roomba500Interface::set_song_number(const uint8_t new_song_number)
01498 {
01499   data->song_number = new_song_number;
01500   data_changed = true;
01501 }
01502 
01503 /** Get song_playing value.
01504  * Song playing?
01505  * @return song_playing value
01506  */
01507 bool
01508 Roomba500Interface::is_song_playing() const
01509 {
01510   return data->song_playing;
01511 }
01512 
01513 /** Get maximum length of song_playing value.
01514  * @return length of song_playing value, can be length of the array or number of 
01515  * maximum number of characters for a string
01516  */
01517 size_t
01518 Roomba500Interface::maxlenof_song_playing() const
01519 {
01520   return 1;
01521 }
01522 
01523 /** Set song_playing value.
01524  * Song playing?
01525  * @param new_song_playing new song_playing value
01526  */
01527 void
01528 Roomba500Interface::set_song_playing(const bool new_song_playing)
01529 {
01530   data->song_playing = new_song_playing;
01531   data_changed = true;
01532 }
01533 
01534 /** Get velocity value.
01535  * Requested velocity in mm/s.
01536  * @return velocity value
01537  */
01538 int16_t
01539 Roomba500Interface::velocity() const
01540 {
01541   return data->velocity;
01542 }
01543 
01544 /** Get maximum length of velocity value.
01545  * @return length of velocity value, can be length of the array or number of 
01546  * maximum number of characters for a string
01547  */
01548 size_t
01549 Roomba500Interface::maxlenof_velocity() const
01550 {
01551   return 1;
01552 }
01553 
01554 /** Set velocity value.
01555  * Requested velocity in mm/s.
01556  * @param new_velocity new velocity value
01557  */
01558 void
01559 Roomba500Interface::set_velocity(const int16_t new_velocity)
01560 {
01561   data->velocity = new_velocity;
01562   data_changed = true;
01563 }
01564 
01565 /** Get radius value.
01566  * Requested radius in mm.
01567  * @return radius value
01568  */
01569 int16_t
01570 Roomba500Interface::radius() const
01571 {
01572   return data->radius;
01573 }
01574 
01575 /** Get maximum length of radius value.
01576  * @return length of radius value, can be length of the array or number of 
01577  * maximum number of characters for a string
01578  */
01579 size_t
01580 Roomba500Interface::maxlenof_radius() const
01581 {
01582   return 1;
01583 }
01584 
01585 /** Set radius value.
01586  * Requested radius in mm.
01587  * @param new_radius new radius value
01588  */
01589 void
01590 Roomba500Interface::set_radius(const int16_t new_radius)
01591 {
01592   data->radius = new_radius;
01593   data_changed = true;
01594 }
01595 
01596 /** Get velocity_right value.
01597  * Requested left velocity in mm/s.
01598  * @return velocity_right value
01599  */
01600 int16_t
01601 Roomba500Interface::velocity_right() const
01602 {
01603   return data->velocity_right;
01604 }
01605 
01606 /** Get maximum length of velocity_right value.
01607  * @return length of velocity_right value, can be length of the array or number of 
01608  * maximum number of characters for a string
01609  */
01610 size_t
01611 Roomba500Interface::maxlenof_velocity_right() const
01612 {
01613   return 1;
01614 }
01615 
01616 /** Set velocity_right value.
01617  * Requested left velocity in mm/s.
01618  * @param new_velocity_right new velocity_right value
01619  */
01620 void
01621 Roomba500Interface::set_velocity_right(const int16_t new_velocity_right)
01622 {
01623   data->velocity_right = new_velocity_right;
01624   data_changed = true;
01625 }
01626 
01627 /** Get velocity_left value.
01628  * Requested right velocity in mm/s.
01629  * @return velocity_left value
01630  */
01631 int16_t
01632 Roomba500Interface::velocity_left() const
01633 {
01634   return data->velocity_left;
01635 }
01636 
01637 /** Get maximum length of velocity_left value.
01638  * @return length of velocity_left value, can be length of the array or number of 
01639  * maximum number of characters for a string
01640  */
01641 size_t
01642 Roomba500Interface::maxlenof_velocity_left() const
01643 {
01644   return 1;
01645 }
01646 
01647 /** Set velocity_left value.
01648  * Requested right velocity in mm/s.
01649  * @param new_velocity_left new velocity_left value
01650  */
01651 void
01652 Roomba500Interface::set_velocity_left(const int16_t new_velocity_left)
01653 {
01654   data->velocity_left = new_velocity_left;
01655   data_changed = true;
01656 }
01657 
01658 /** Get encoder_counts_left value.
01659  * Encoder count left.
01660  * @return encoder_counts_left value
01661  */
01662 uint16_t
01663 Roomba500Interface::encoder_counts_left() const
01664 {
01665   return data->encoder_counts_left;
01666 }
01667 
01668 /** Get maximum length of encoder_counts_left value.
01669  * @return length of encoder_counts_left value, can be length of the array or number of 
01670  * maximum number of characters for a string
01671  */
01672 size_t
01673 Roomba500Interface::maxlenof_encoder_counts_left() const
01674 {
01675   return 1;
01676 }
01677 
01678 /** Set encoder_counts_left value.
01679  * Encoder count left.
01680  * @param new_encoder_counts_left new encoder_counts_left value
01681  */
01682 void
01683 Roomba500Interface::set_encoder_counts_left(const uint16_t new_encoder_counts_left)
01684 {
01685   data->encoder_counts_left = new_encoder_counts_left;
01686   data_changed = true;
01687 }
01688 
01689 /** Get encoder_counts_right value.
01690  * Encoder count right.
01691  * @return encoder_counts_right value
01692  */
01693 uint16_t
01694 Roomba500Interface::encoder_counts_right() const
01695 {
01696   return data->encoder_counts_right;
01697 }
01698 
01699 /** Get maximum length of encoder_counts_right value.
01700  * @return length of encoder_counts_right value, can be length of the array or number of 
01701  * maximum number of characters for a string
01702  */
01703 size_t
01704 Roomba500Interface::maxlenof_encoder_counts_right() const
01705 {
01706   return 1;
01707 }
01708 
01709 /** Set encoder_counts_right value.
01710  * Encoder count right.
01711  * @param new_encoder_counts_right new encoder_counts_right value
01712  */
01713 void
01714 Roomba500Interface::set_encoder_counts_right(const uint16_t new_encoder_counts_right)
01715 {
01716   data->encoder_counts_right = new_encoder_counts_right;
01717   data_changed = true;
01718 }
01719 
01720 /** Get bumper_left value.
01721  * Left bumper active?
01722  * @return bumper_left value
01723  */
01724 bool
01725 Roomba500Interface::is_bumper_left() const
01726 {
01727   return data->bumper_left;
01728 }
01729 
01730 /** Get maximum length of bumper_left value.
01731  * @return length of bumper_left value, can be length of the array or number of 
01732  * maximum number of characters for a string
01733  */
01734 size_t
01735 Roomba500Interface::maxlenof_bumper_left() const
01736 {
01737   return 1;
01738 }
01739 
01740 /** Set bumper_left value.
01741  * Left bumper active?
01742  * @param new_bumper_left new bumper_left value
01743  */
01744 void
01745 Roomba500Interface::set_bumper_left(const bool new_bumper_left)
01746 {
01747   data->bumper_left = new_bumper_left;
01748   data_changed = true;
01749 }
01750 
01751 /** Get bumper_front_left value.
01752  * Front left bumper active?
01753  * @return bumper_front_left value
01754  */
01755 bool
01756 Roomba500Interface::is_bumper_front_left() const
01757 {
01758   return data->bumper_front_left;
01759 }
01760 
01761 /** Get maximum length of bumper_front_left value.
01762  * @return length of bumper_front_left value, can be length of the array or number of 
01763  * maximum number of characters for a string
01764  */
01765 size_t
01766 Roomba500Interface::maxlenof_bumper_front_left() const
01767 {
01768   return 1;
01769 }
01770 
01771 /** Set bumper_front_left value.
01772  * Front left bumper active?
01773  * @param new_bumper_front_left new bumper_front_left value
01774  */
01775 void
01776 Roomba500Interface::set_bumper_front_left(const bool new_bumper_front_left)
01777 {
01778   data->bumper_front_left = new_bumper_front_left;
01779   data_changed = true;
01780 }
01781 
01782 /** Get bumper_center_left value.
01783  * Center left bumper active?
01784  * @return bumper_center_left value
01785  */
01786 bool
01787 Roomba500Interface::is_bumper_center_left() const
01788 {
01789   return data->bumper_center_left;
01790 }
01791 
01792 /** Get maximum length of bumper_center_left value.
01793  * @return length of bumper_center_left value, can be length of the array or number of 
01794  * maximum number of characters for a string
01795  */
01796 size_t
01797 Roomba500Interface::maxlenof_bumper_center_left() const
01798 {
01799   return 1;
01800 }
01801 
01802 /** Set bumper_center_left value.
01803  * Center left bumper active?
01804  * @param new_bumper_center_left new bumper_center_left value
01805  */
01806 void
01807 Roomba500Interface::set_bumper_center_left(const bool new_bumper_center_left)
01808 {
01809   data->bumper_center_left = new_bumper_center_left;
01810   data_changed = true;
01811 }
01812 
01813 /** Get bumper_center_right value.
01814  * Center right bumper active?
01815  * @return bumper_center_right value
01816  */
01817 bool
01818 Roomba500Interface::is_bumper_center_right() const
01819 {
01820   return data->bumper_center_right;
01821 }
01822 
01823 /** Get maximum length of bumper_center_right value.
01824  * @return length of bumper_center_right value, can be length of the array or number of 
01825  * maximum number of characters for a string
01826  */
01827 size_t
01828 Roomba500Interface::maxlenof_bumper_center_right() const
01829 {
01830   return 1;
01831 }
01832 
01833 /** Set bumper_center_right value.
01834  * Center right bumper active?
01835  * @param new_bumper_center_right new bumper_center_right value
01836  */
01837 void
01838 Roomba500Interface::set_bumper_center_right(const bool new_bumper_center_right)
01839 {
01840   data->bumper_center_right = new_bumper_center_right;
01841   data_changed = true;
01842 }
01843 
01844 /** Get bumper_front_right value.
01845  * Front right bumper active?
01846  * @return bumper_front_right value
01847  */
01848 bool
01849 Roomba500Interface::is_bumper_front_right() const
01850 {
01851   return data->bumper_front_right;
01852 }
01853 
01854 /** Get maximum length of bumper_front_right value.
01855  * @return length of bumper_front_right value, can be length of the array or number of 
01856  * maximum number of characters for a string
01857  */
01858 size_t
01859 Roomba500Interface::maxlenof_bumper_front_right() const
01860 {
01861   return 1;
01862 }
01863 
01864 /** Set bumper_front_right value.
01865  * Front right bumper active?
01866  * @param new_bumper_front_right new bumper_front_right value
01867  */
01868 void
01869 Roomba500Interface::set_bumper_front_right(const bool new_bumper_front_right)
01870 {
01871   data->bumper_front_right = new_bumper_front_right;
01872   data_changed = true;
01873 }
01874 
01875 /** Get bumper_right value.
01876  * Right bumper active?
01877  * @return bumper_right value
01878  */
01879 bool
01880 Roomba500Interface::is_bumper_right() const
01881 {
01882   return data->bumper_right;
01883 }
01884 
01885 /** Get maximum length of bumper_right value.
01886  * @return length of bumper_right value, can be length of the array or number of 
01887  * maximum number of characters for a string
01888  */
01889 size_t
01890 Roomba500Interface::maxlenof_bumper_right() const
01891 {
01892   return 1;
01893 }
01894 
01895 /** Set bumper_right value.
01896  * Right bumper active?
01897  * @param new_bumper_right new bumper_right value
01898  */
01899 void
01900 Roomba500Interface::set_bumper_right(const bool new_bumper_right)
01901 {
01902   data->bumper_right = new_bumper_right;
01903   data_changed = true;
01904 }
01905 
01906 /** Get light_bump_left value.
01907  * Raw left bumper signal.
01908  * @return light_bump_left value
01909  */
01910 uint16_t
01911 Roomba500Interface::light_bump_left() const
01912 {
01913   return data->light_bump_left;
01914 }
01915 
01916 /** Get maximum length of light_bump_left value.
01917  * @return length of light_bump_left value, can be length of the array or number of 
01918  * maximum number of characters for a string
01919  */
01920 size_t
01921 Roomba500Interface::maxlenof_light_bump_left() const
01922 {
01923   return 1;
01924 }
01925 
01926 /** Set light_bump_left value.
01927  * Raw left bumper signal.
01928  * @param new_light_bump_left new light_bump_left value
01929  */
01930 void
01931 Roomba500Interface::set_light_bump_left(const uint16_t new_light_bump_left)
01932 {
01933   data->light_bump_left = new_light_bump_left;
01934   data_changed = true;
01935 }
01936 
01937 /** Get light_bump_front_left value.
01938  * Raw front left bumper
01939       signal.
01940  * @return light_bump_front_left value
01941  */
01942 uint16_t
01943 Roomba500Interface::light_bump_front_left() const
01944 {
01945   return data->light_bump_front_left;
01946 }
01947 
01948 /** Get maximum length of light_bump_front_left value.
01949  * @return length of light_bump_front_left value, can be length of the array or number of 
01950  * maximum number of characters for a string
01951  */
01952 size_t
01953 Roomba500Interface::maxlenof_light_bump_front_left() const
01954 {
01955   return 1;
01956 }
01957 
01958 /** Set light_bump_front_left value.
01959  * Raw front left bumper
01960       signal.
01961  * @param new_light_bump_front_left new light_bump_front_left value
01962  */
01963 void
01964 Roomba500Interface::set_light_bump_front_left(const uint16_t new_light_bump_front_left)
01965 {
01966   data->light_bump_front_left = new_light_bump_front_left;
01967   data_changed = true;
01968 }
01969 
01970 /** Get light_bump_center_left value.
01971  * Raw center left
01972       bumper signal.
01973  * @return light_bump_center_left value
01974  */
01975 uint16_t
01976 Roomba500Interface::light_bump_center_left() const
01977 {
01978   return data->light_bump_center_left;
01979 }
01980 
01981 /** Get maximum length of light_bump_center_left value.
01982  * @return length of light_bump_center_left value, can be length of the array or number of 
01983  * maximum number of characters for a string
01984  */
01985 size_t
01986 Roomba500Interface::maxlenof_light_bump_center_left() const
01987 {
01988   return 1;
01989 }
01990 
01991 /** Set light_bump_center_left value.
01992  * Raw center left
01993       bumper signal.
01994  * @param new_light_bump_center_left new light_bump_center_left value
01995  */
01996 void
01997 Roomba500Interface::set_light_bump_center_left(const uint16_t new_light_bump_center_left)
01998 {
01999   data->light_bump_center_left = new_light_bump_center_left;
02000   data_changed = true;
02001 }
02002 
02003 /** Get light_bump_center_right value.
02004  * Raw center right
02005       bumper signal.
02006  * @return light_bump_center_right value
02007  */
02008 uint16_t
02009 Roomba500Interface::light_bump_center_right() const
02010 {
02011   return data->light_bump_center_right;
02012 }
02013 
02014 /** Get maximum length of light_bump_center_right value.
02015  * @return length of light_bump_center_right value, can be length of the array or number of 
02016  * maximum number of characters for a string
02017  */
02018 size_t
02019 Roomba500Interface::maxlenof_light_bump_center_right() const
02020 {
02021   return 1;
02022 }
02023 
02024 /** Set light_bump_center_right value.
02025  * Raw center right
02026       bumper signal.
02027  * @param new_light_bump_center_right new light_bump_center_right value
02028  */
02029 void
02030 Roomba500Interface::set_light_bump_center_right(const uint16_t new_light_bump_center_right)
02031 {
02032   data->light_bump_center_right = new_light_bump_center_right;
02033   data_changed = true;
02034 }
02035 
02036 /** Get light_bump_front_right value.
02037  * Raw front right
02038       bumper signal.
02039  * @return light_bump_front_right value
02040  */
02041 uint16_t
02042 Roomba500Interface::light_bump_front_right() const
02043 {
02044   return data->light_bump_front_right;
02045 }
02046 
02047 /** Get maximum length of light_bump_front_right value.
02048  * @return length of light_bump_front_right value, can be length of the array or number of 
02049  * maximum number of characters for a string
02050  */
02051 size_t
02052 Roomba500Interface::maxlenof_light_bump_front_right() const
02053 {
02054   return 1;
02055 }
02056 
02057 /** Set light_bump_front_right value.
02058  * Raw front right
02059       bumper signal.
02060  * @param new_light_bump_front_right new light_bump_front_right value
02061  */
02062 void
02063 Roomba500Interface::set_light_bump_front_right(const uint16_t new_light_bump_front_right)
02064 {
02065   data->light_bump_front_right = new_light_bump_front_right;
02066   data_changed = true;
02067 }
02068 
02069 /** Get light_bump_right value.
02070  * Raw right bumper signal.
02071  * @return light_bump_right value
02072  */
02073 uint16_t
02074 Roomba500Interface::light_bump_right() const
02075 {
02076   return data->light_bump_right;
02077 }
02078 
02079 /** Get maximum length of light_bump_right value.
02080  * @return length of light_bump_right value, can be length of the array or number of 
02081  * maximum number of characters for a string
02082  */
02083 size_t
02084 Roomba500Interface::maxlenof_light_bump_right() const
02085 {
02086   return 1;
02087 }
02088 
02089 /** Set light_bump_right value.
02090  * Raw right bumper signal.
02091  * @param new_light_bump_right new light_bump_right value
02092  */
02093 void
02094 Roomba500Interface::set_light_bump_right(const uint16_t new_light_bump_right)
02095 {
02096   data->light_bump_right = new_light_bump_right;
02097   data_changed = true;
02098 }
02099 
02100 /** Get ir_opcode_left value.
02101  * 
02102       Left receiver opcode.
02103  * @return ir_opcode_left value
02104  */
02105 Roomba500Interface::InfraredCharacter
02106 Roomba500Interface::ir_opcode_left() const
02107 {
02108   return (Roomba500Interface::InfraredCharacter)data->ir_opcode_left;
02109 }
02110 
02111 /** Get maximum length of ir_opcode_left value.
02112  * @return length of ir_opcode_left value, can be length of the array or number of 
02113  * maximum number of characters for a string
02114  */
02115 size_t
02116 Roomba500Interface::maxlenof_ir_opcode_left() const
02117 {
02118   return 1;
02119 }
02120 
02121 /** Set ir_opcode_left value.
02122  * 
02123       Left receiver opcode.
02124  * @param new_ir_opcode_left new ir_opcode_left value
02125  */
02126 void
02127 Roomba500Interface::set_ir_opcode_left(const InfraredCharacter new_ir_opcode_left)
02128 {
02129   data->ir_opcode_left = new_ir_opcode_left;
02130   data_changed = true;
02131 }
02132 
02133 /** Get ir_opcode_right value.
02134  * 
02135       Right receiver opcode.
02136  * @return ir_opcode_right value
02137  */
02138 Roomba500Interface::InfraredCharacter
02139 Roomba500Interface::ir_opcode_right() const
02140 {
02141   return (Roomba500Interface::InfraredCharacter)data->ir_opcode_right;
02142 }
02143 
02144 /** Get maximum length of ir_opcode_right value.
02145  * @return length of ir_opcode_right value, can be length of the array or number of 
02146  * maximum number of characters for a string
02147  */
02148 size_t
02149 Roomba500Interface::maxlenof_ir_opcode_right() const
02150 {
02151   return 1;
02152 }
02153 
02154 /** Set ir_opcode_right value.
02155  * 
02156       Right receiver opcode.
02157  * @param new_ir_opcode_right new ir_opcode_right value
02158  */
02159 void
02160 Roomba500Interface::set_ir_opcode_right(const InfraredCharacter new_ir_opcode_right)
02161 {
02162   data->ir_opcode_right = new_ir_opcode_right;
02163   data_changed = true;
02164 }
02165 
02166 /** Get left_motor_current value.
02167  * Left motor current in mA.
02168  * @return left_motor_current value
02169  */
02170 int16_t
02171 Roomba500Interface::left_motor_current() const
02172 {
02173   return data->left_motor_current;
02174 }
02175 
02176 /** Get maximum length of left_motor_current value.
02177  * @return length of left_motor_current value, can be length of the array or number of 
02178  * maximum number of characters for a string
02179  */
02180 size_t
02181 Roomba500Interface::maxlenof_left_motor_current() const
02182 {
02183   return 1;
02184 }
02185 
02186 /** Set left_motor_current value.
02187  * Left motor current in mA.
02188  * @param new_left_motor_current new left_motor_current value
02189  */
02190 void
02191 Roomba500Interface::set_left_motor_current(const int16_t new_left_motor_current)
02192 {
02193   data->left_motor_current = new_left_motor_current;
02194   data_changed = true;
02195 }
02196 
02197 /** Get right_motor_current value.
02198  * Right motor current in mA.
02199  * @return right_motor_current value
02200  */
02201 int16_t
02202 Roomba500Interface::right_motor_current() const
02203 {
02204   return data->right_motor_current;
02205 }
02206 
02207 /** Get maximum length of right_motor_current value.
02208  * @return length of right_motor_current value, can be length of the array or number of 
02209  * maximum number of characters for a string
02210  */
02211 size_t
02212 Roomba500Interface::maxlenof_right_motor_current() const
02213 {
02214   return 1;
02215 }
02216 
02217 /** Set right_motor_current value.
02218  * Right motor current in mA.
02219  * @param new_right_motor_current new right_motor_current value
02220  */
02221 void
02222 Roomba500Interface::set_right_motor_current(const int16_t new_right_motor_current)
02223 {
02224   data->right_motor_current = new_right_motor_current;
02225   data_changed = true;
02226 }
02227 
02228 /** Get main_brush_current value.
02229  * Main brush current in mA.
02230  * @return main_brush_current value
02231  */
02232 int16_t
02233 Roomba500Interface::main_brush_current() const
02234 {
02235   return data->main_brush_current;
02236 }
02237 
02238 /** Get maximum length of main_brush_current value.
02239  * @return length of main_brush_current value, can be length of the array or number of 
02240  * maximum number of characters for a string
02241  */
02242 size_t
02243 Roomba500Interface::maxlenof_main_brush_current() const
02244 {
02245   return 1;
02246 }
02247 
02248 /** Set main_brush_current value.
02249  * Main brush current in mA.
02250  * @param new_main_brush_current new main_brush_current value
02251  */
02252 void
02253 Roomba500Interface::set_main_brush_current(const int16_t new_main_brush_current)
02254 {
02255   data->main_brush_current = new_main_brush_current;
02256   data_changed = true;
02257 }
02258 
02259 /** Get side_brush_current value.
02260  * Side brush current in mA.
02261  * @return side_brush_current value
02262  */
02263 int16_t
02264 Roomba500Interface::side_brush_current() const
02265 {
02266   return data->side_brush_current;
02267 }
02268 
02269 /** Get maximum length of side_brush_current value.
02270  * @return length of side_brush_current value, can be length of the array or number of 
02271  * maximum number of characters for a string
02272  */
02273 size_t
02274 Roomba500Interface::maxlenof_side_brush_current() const
02275 {
02276   return 1;
02277 }
02278 
02279 /** Set side_brush_current value.
02280  * Side brush current in mA.
02281  * @param new_side_brush_current new side_brush_current value
02282  */
02283 void
02284 Roomba500Interface::set_side_brush_current(const int16_t new_side_brush_current)
02285 {
02286   data->side_brush_current = new_side_brush_current;
02287   data_changed = true;
02288 }
02289 
02290 /** Get caster_stasis value.
02291  * Caster wheel stasis.
02292  * @return caster_stasis value
02293  */
02294 bool
02295 Roomba500Interface::is_caster_stasis() const
02296 {
02297   return data->caster_stasis;
02298 }
02299 
02300 /** Get maximum length of caster_stasis value.
02301  * @return length of caster_stasis value, can be length of the array or number of 
02302  * maximum number of characters for a string
02303  */
02304 size_t
02305 Roomba500Interface::maxlenof_caster_stasis() const
02306 {
02307   return 1;
02308 }
02309 
02310 /** Set caster_stasis value.
02311  * Caster wheel stasis.
02312  * @param new_caster_stasis new caster_stasis value
02313  */
02314 void
02315 Roomba500Interface::set_caster_stasis(const bool new_caster_stasis)
02316 {
02317   data->caster_stasis = new_caster_stasis;
02318   data_changed = true;
02319 }
02320 
02321 /* =========== message create =========== */
02322 Message *
02323 Roomba500Interface::create_message(const char *type) const
02324 {
02325   if ( strncmp("StopMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
02326     return new StopMessage();
02327   } else if ( strncmp("DockMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
02328     return new DockMessage();
02329   } else if ( strncmp("SetModeMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
02330     return new SetModeMessage();
02331   } else if ( strncmp("DriveStraightMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
02332     return new DriveStraightMessage();
02333   } else if ( strncmp("DriveMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
02334     return new DriveMessage();
02335   } else if ( strncmp("SetMotorsMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
02336     return new SetMotorsMessage();
02337   } else {
02338     throw UnknownTypeException("The given type '%s' does not match any known "
02339                                "message type for this interface type.", type);
02340   }
02341 }
02342 
02343 
02344 /** Copy values from other interface.
02345  * @param other other interface to copy values from
02346  */
02347 void
02348 Roomba500Interface::copy_values(const Interface *other)
02349 {
02350   const Roomba500Interface *oi = dynamic_cast<const Roomba500Interface *>(other);
02351   if (oi == NULL) {
02352     throw TypeMismatchException("Can only copy values from interface of same type (%s vs. %s)",
02353                                 type(), other->type());
02354   }
02355   memcpy(data, oi->data, sizeof(Roomba500Interface_data_t));
02356 }
02357 
02358 const char *
02359 Roomba500Interface::enum_tostring(const char *enumtype, int val) const
02360 {
02361   if (strcmp(enumtype, "Mode") == 0) {
02362     return tostring_Mode((Mode)val);
02363   }
02364   if (strcmp(enumtype, "InfraredCharacter") == 0) {
02365     return tostring_InfraredCharacter((InfraredCharacter)val);
02366   }
02367   if (strcmp(enumtype, "ChargingState") == 0) {
02368     return tostring_ChargingState((ChargingState)val);
02369   }
02370   if (strcmp(enumtype, "BrushState") == 0) {
02371     return tostring_BrushState((BrushState)val);
02372   }
02373   throw UnknownTypeException("Unknown enum type %s", enumtype);
02374 }
02375 
02376 /* =========== messages =========== */
02377 /** @class Roomba500Interface::StopMessage <interfaces/Roomba500Interface.h>
02378  * StopMessage Fawkes BlackBoard Interface Message.
02379  * 
02380     
02381  */
02382 
02383 
02384 /** Constructor */
02385 Roomba500Interface::StopMessage::StopMessage() : Message("StopMessage")
02386 {
02387   data_size = sizeof(StopMessage_data_t);
02388   data_ptr  = malloc(data_size);
02389   memset(data_ptr, 0, data_size);
02390   data      = (StopMessage_data_t *)data_ptr;
02391   data_ts   = (message_data_ts_t *)data_ptr;
02392 }
02393 
02394 /** Destructor */
02395 Roomba500Interface::StopMessage::~StopMessage()
02396 {
02397   free(data_ptr);
02398 }
02399 
02400 /** Copy constructor.
02401  * @param m message to copy from
02402  */
02403 Roomba500Interface::StopMessage::StopMessage(const StopMessage *m) : Message("StopMessage")
02404 {
02405   data_size = m->data_size;
02406   data_ptr  = malloc(data_size);
02407   memcpy(data_ptr, m->data_ptr, data_size);
02408   data      = (StopMessage_data_t *)data_ptr;
02409   data_ts   = (message_data_ts_t *)data_ptr;
02410 }
02411 
02412 /* Methods */
02413 /** Clone this message.
02414  * Produces a message of the same type as this message and copies the
02415  * data to the new message.
02416  * @return clone of this message
02417  */
02418 Message *
02419 Roomba500Interface::StopMessage::clone() const
02420 {
02421   return new Roomba500Interface::StopMessage(this);
02422 }
02423 /** @class Roomba500Interface::DockMessage <interfaces/Roomba500Interface.h>
02424  * DockMessage Fawkes BlackBoard Interface Message.
02425  * 
02426     
02427  */
02428 
02429 
02430 /** Constructor */
02431 Roomba500Interface::DockMessage::DockMessage() : Message("DockMessage")
02432 {
02433   data_size = sizeof(DockMessage_data_t);
02434   data_ptr  = malloc(data_size);
02435   memset(data_ptr, 0, data_size);
02436   data      = (DockMessage_data_t *)data_ptr;
02437   data_ts   = (message_data_ts_t *)data_ptr;
02438 }
02439 
02440 /** Destructor */
02441 Roomba500Interface::DockMessage::~DockMessage()
02442 {
02443   free(data_ptr);
02444 }
02445 
02446 /** Copy constructor.
02447  * @param m message to copy from
02448  */
02449 Roomba500Interface::DockMessage::DockMessage(const DockMessage *m) : Message("DockMessage")
02450 {
02451   data_size = m->data_size;
02452   data_ptr  = malloc(data_size);
02453   memcpy(data_ptr, m->data_ptr, data_size);
02454   data      = (DockMessage_data_t *)data_ptr;
02455   data_ts   = (message_data_ts_t *)data_ptr;
02456 }
02457 
02458 /* Methods */
02459 /** Clone this message.
02460  * Produces a message of the same type as this message and copies the
02461  * data to the new message.
02462  * @return clone of this message
02463  */
02464 Message *
02465 Roomba500Interface::DockMessage::clone() const
02466 {
02467   return new Roomba500Interface::DockMessage(this);
02468 }
02469 /** @class Roomba500Interface::SetModeMessage <interfaces/Roomba500Interface.h>
02470  * SetModeMessage Fawkes BlackBoard Interface Message.
02471  * 
02472     
02473  */
02474 
02475 
02476 /** Constructor with initial values.
02477  * @param ini_mode initial value for mode
02478  */
02479 Roomba500Interface::SetModeMessage::SetModeMessage(const Mode ini_mode) : Message("SetModeMessage")
02480 {
02481   data_size = sizeof(SetModeMessage_data_t);
02482   data_ptr  = malloc(data_size);
02483   memset(data_ptr, 0, data_size);
02484   data      = (SetModeMessage_data_t *)data_ptr;
02485   data_ts   = (message_data_ts_t *)data_ptr;
02486   data->mode = ini_mode;
02487   add_fieldinfo(IFT_ENUM, "mode", 1, &data->mode, "Mode");
02488 }
02489 /** Constructor */
02490 Roomba500Interface::SetModeMessage::SetModeMessage() : Message("SetModeMessage")
02491 {
02492   data_size = sizeof(SetModeMessage_data_t);
02493   data_ptr  = malloc(data_size);
02494   memset(data_ptr, 0, data_size);
02495   data      = (SetModeMessage_data_t *)data_ptr;
02496   data_ts   = (message_data_ts_t *)data_ptr;
02497   add_fieldinfo(IFT_ENUM, "mode", 1, &data->mode, "Mode");
02498 }
02499 
02500 /** Destructor */
02501 Roomba500Interface::SetModeMessage::~SetModeMessage()
02502 {
02503   free(data_ptr);
02504 }
02505 
02506 /** Copy constructor.
02507  * @param m message to copy from
02508  */
02509 Roomba500Interface::SetModeMessage::SetModeMessage(const SetModeMessage *m) : Message("SetModeMessage")
02510 {
02511   data_size = m->data_size;
02512   data_ptr  = malloc(data_size);
02513   memcpy(data_ptr, m->data_ptr, data_size);
02514   data      = (SetModeMessage_data_t *)data_ptr;
02515   data_ts   = (message_data_ts_t *)data_ptr;
02516 }
02517 
02518 /* Methods */
02519 /** Get mode value.
02520  * Open Interface mode.
02521  * @return mode value
02522  */
02523 Roomba500Interface::Mode
02524 Roomba500Interface::SetModeMessage::mode() const
02525 {
02526   return (Roomba500Interface::Mode)data->mode;
02527 }
02528 
02529 /** Get maximum length of mode value.
02530  * @return length of mode value, can be length of the array or number of 
02531  * maximum number of characters for a string
02532  */
02533 size_t
02534 Roomba500Interface::SetModeMessage::maxlenof_mode() const
02535 {
02536   return 1;
02537 }
02538 
02539 /** Set mode value.
02540  * Open Interface mode.
02541  * @param new_mode new mode value
02542  */
02543 void
02544 Roomba500Interface::SetModeMessage::set_mode(const Mode new_mode)
02545 {
02546   data->mode = new_mode;
02547 }
02548 
02549 /** Clone this message.
02550  * Produces a message of the same type as this message and copies the
02551  * data to the new message.
02552  * @return clone of this message
02553  */
02554 Message *
02555 Roomba500Interface::SetModeMessage::clone() const
02556 {
02557   return new Roomba500Interface::SetModeMessage(this);
02558 }
02559 /** @class Roomba500Interface::DriveStraightMessage <interfaces/Roomba500Interface.h>
02560  * DriveStraightMessage Fawkes BlackBoard Interface Message.
02561  * 
02562     
02563  */
02564 
02565 
02566 /** Constructor with initial values.
02567  * @param ini_velocity initial value for velocity
02568  */
02569 Roomba500Interface::DriveStraightMessage::DriveStraightMessage(const int16_t ini_velocity) : Message("DriveStraightMessage")
02570 {
02571   data_size = sizeof(DriveStraightMessage_data_t);
02572   data_ptr  = malloc(data_size);
02573   memset(data_ptr, 0, data_size);
02574   data      = (DriveStraightMessage_data_t *)data_ptr;
02575   data_ts   = (message_data_ts_t *)data_ptr;
02576   data->velocity = ini_velocity;
02577   add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
02578 }
02579 /** Constructor */
02580 Roomba500Interface::DriveStraightMessage::DriveStraightMessage() : Message("DriveStraightMessage")
02581 {
02582   data_size = sizeof(DriveStraightMessage_data_t);
02583   data_ptr  = malloc(data_size);
02584   memset(data_ptr, 0, data_size);
02585   data      = (DriveStraightMessage_data_t *)data_ptr;
02586   data_ts   = (message_data_ts_t *)data_ptr;
02587   add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
02588 }
02589 
02590 /** Destructor */
02591 Roomba500Interface::DriveStraightMessage::~DriveStraightMessage()
02592 {
02593   free(data_ptr);
02594 }
02595 
02596 /** Copy constructor.
02597  * @param m message to copy from
02598  */
02599 Roomba500Interface::DriveStraightMessage::DriveStraightMessage(const DriveStraightMessage *m) : Message("DriveStraightMessage")
02600 {
02601   data_size = m->data_size;
02602   data_ptr  = malloc(data_size);
02603   memcpy(data_ptr, m->data_ptr, data_size);
02604   data      = (DriveStraightMessage_data_t *)data_ptr;
02605   data_ts   = (message_data_ts_t *)data_ptr;
02606 }
02607 
02608 /* Methods */
02609 /** Get velocity value.
02610  * Requested velocity in mm/s.
02611  * @return velocity value
02612  */
02613 int16_t
02614 Roomba500Interface::DriveStraightMessage::velocity() const
02615 {
02616   return data->velocity;
02617 }
02618 
02619 /** Get maximum length of velocity value.
02620  * @return length of velocity value, can be length of the array or number of 
02621  * maximum number of characters for a string
02622  */
02623 size_t
02624 Roomba500Interface::DriveStraightMessage::maxlenof_velocity() const
02625 {
02626   return 1;
02627 }
02628 
02629 /** Set velocity value.
02630  * Requested velocity in mm/s.
02631  * @param new_velocity new velocity value
02632  */
02633 void
02634 Roomba500Interface::DriveStraightMessage::set_velocity(const int16_t new_velocity)
02635 {
02636   data->velocity = new_velocity;
02637 }
02638 
02639 /** Clone this message.
02640  * Produces a message of the same type as this message and copies the
02641  * data to the new message.
02642  * @return clone of this message
02643  */
02644 Message *
02645 Roomba500Interface::DriveStraightMessage::clone() const
02646 {
02647   return new Roomba500Interface::DriveStraightMessage(this);
02648 }
02649 /** @class Roomba500Interface::DriveMessage <interfaces/Roomba500Interface.h>
02650  * DriveMessage Fawkes BlackBoard Interface Message.
02651  * 
02652     
02653  */
02654 
02655 
02656 /** Constructor with initial values.
02657  * @param ini_velocity initial value for velocity
02658  * @param ini_radius initial value for radius
02659  */
02660 Roomba500Interface::DriveMessage::DriveMessage(const int16_t ini_velocity, const int16_t ini_radius) : Message("DriveMessage")
02661 {
02662   data_size = sizeof(DriveMessage_data_t);
02663   data_ptr  = malloc(data_size);
02664   memset(data_ptr, 0, data_size);
02665   data      = (DriveMessage_data_t *)data_ptr;
02666   data_ts   = (message_data_ts_t *)data_ptr;
02667   data->velocity = ini_velocity;
02668   data->radius = ini_radius;
02669   add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
02670   add_fieldinfo(IFT_INT16, "radius", 1, &data->radius);
02671 }
02672 /** Constructor */
02673 Roomba500Interface::DriveMessage::DriveMessage() : Message("DriveMessage")
02674 {
02675   data_size = sizeof(DriveMessage_data_t);
02676   data_ptr  = malloc(data_size);
02677   memset(data_ptr, 0, data_size);
02678   data      = (DriveMessage_data_t *)data_ptr;
02679   data_ts   = (message_data_ts_t *)data_ptr;
02680   add_fieldinfo(IFT_INT16, "velocity", 1, &data->velocity);
02681   add_fieldinfo(IFT_INT16, "radius", 1, &data->radius);
02682 }
02683 
02684 /** Destructor */
02685 Roomba500Interface::DriveMessage::~DriveMessage()
02686 {
02687   free(data_ptr);
02688 }
02689 
02690 /** Copy constructor.
02691  * @param m message to copy from
02692  */
02693 Roomba500Interface::DriveMessage::DriveMessage(const DriveMessage *m) : Message("DriveMessage")
02694 {
02695   data_size = m->data_size;
02696   data_ptr  = malloc(data_size);
02697   memcpy(data_ptr, m->data_ptr, data_size);
02698   data      = (DriveMessage_data_t *)data_ptr;
02699   data_ts   = (message_data_ts_t *)data_ptr;
02700 }
02701 
02702 /* Methods */
02703 /** Get velocity value.
02704  * Requested velocity in mm/s.
02705  * @return velocity value
02706  */
02707 int16_t
02708 Roomba500Interface::DriveMessage::velocity() const
02709 {
02710   return data->velocity;
02711 }
02712 
02713 /** Get maximum length of velocity value.
02714  * @return length of velocity value, can be length of the array or number of 
02715  * maximum number of characters for a string
02716  */
02717 size_t
02718 Roomba500Interface::DriveMessage::maxlenof_velocity() const
02719 {
02720   return 1;
02721 }
02722 
02723 /** Set velocity value.
02724  * Requested velocity in mm/s.
02725  * @param new_velocity new velocity value
02726  */
02727 void
02728 Roomba500Interface::DriveMessage::set_velocity(const int16_t new_velocity)
02729 {
02730   data->velocity = new_velocity;
02731 }
02732 
02733 /** Get radius value.
02734  * Requested radius in mm.
02735  * @return radius value
02736  */
02737 int16_t
02738 Roomba500Interface::DriveMessage::radius() const
02739 {
02740   return data->radius;
02741 }
02742 
02743 /** Get maximum length of radius value.
02744  * @return length of radius value, can be length of the array or number of 
02745  * maximum number of characters for a string
02746  */
02747 size_t
02748 Roomba500Interface::DriveMessage::maxlenof_radius() const
02749 {
02750   return 1;
02751 }
02752 
02753 /** Set radius value.
02754  * Requested radius in mm.
02755  * @param new_radius new radius value
02756  */
02757 void
02758 Roomba500Interface::DriveMessage::set_radius(const int16_t new_radius)
02759 {
02760   data->radius = new_radius;
02761 }
02762 
02763 /** Clone this message.
02764  * Produces a message of the same type as this message and copies the
02765  * data to the new message.
02766  * @return clone of this message
02767  */
02768 Message *
02769 Roomba500Interface::DriveMessage::clone() const
02770 {
02771   return new Roomba500Interface::DriveMessage(this);
02772 }
02773 /** @class Roomba500Interface::SetMotorsMessage <interfaces/Roomba500Interface.h>
02774  * SetMotorsMessage Fawkes BlackBoard Interface Message.
02775  * 
02776     
02777  */
02778 
02779 
02780 /** Constructor with initial values.
02781  * @param ini_vacuuming initial value for vacuuming
02782  * @param ini_main initial value for main
02783  * @param ini_side initial value for side
02784  */
02785 Roomba500Interface::SetMotorsMessage::SetMotorsMessage(const bool ini_vacuuming, const BrushState ini_main, const BrushState ini_side) : Message("SetMotorsMessage")
02786 {
02787   data_size = sizeof(SetMotorsMessage_data_t);
02788   data_ptr  = malloc(data_size);
02789   memset(data_ptr, 0, data_size);
02790   data      = (SetMotorsMessage_data_t *)data_ptr;
02791   data_ts   = (message_data_ts_t *)data_ptr;
02792   data->vacuuming = ini_vacuuming;
02793   data->main = ini_main;
02794   data->side = ini_side;
02795   add_fieldinfo(IFT_BOOL, "vacuuming", 1, &data->vacuuming);
02796   add_fieldinfo(IFT_ENUM, "main", 1, &data->main, "BrushState");
02797   add_fieldinfo(IFT_ENUM, "side", 1, &data->side, "BrushState");
02798 }
02799 /** Constructor */
02800 Roomba500Interface::SetMotorsMessage::SetMotorsMessage() : Message("SetMotorsMessage")
02801 {
02802   data_size = sizeof(SetMotorsMessage_data_t);
02803   data_ptr  = malloc(data_size);
02804   memset(data_ptr, 0, data_size);
02805   data      = (SetMotorsMessage_data_t *)data_ptr;
02806   data_ts   = (message_data_ts_t *)data_ptr;
02807   add_fieldinfo(IFT_BOOL, "vacuuming", 1, &data->vacuuming);
02808   add_fieldinfo(IFT_ENUM, "main", 1, &data->main, "BrushState");
02809   add_fieldinfo(IFT_ENUM, "side", 1, &data->side, "BrushState");
02810 }
02811 
02812 /** Destructor */
02813 Roomba500Interface::SetMotorsMessage::~SetMotorsMessage()
02814 {
02815   free(data_ptr);
02816 }
02817 
02818 /** Copy constructor.
02819  * @param m message to copy from
02820  */
02821 Roomba500Interface::SetMotorsMessage::SetMotorsMessage(const SetMotorsMessage *m) : Message("SetMotorsMessage")
02822 {
02823   data_size = m->data_size;
02824   data_ptr  = malloc(data_size);
02825   memcpy(data_ptr, m->data_ptr, data_size);
02826   data      = (SetMotorsMessage_data_t *)data_ptr;
02827   data_ts   = (message_data_ts_t *)data_ptr;
02828 }
02829 
02830 /* Methods */
02831 /** Get vacuuming value.
02832  * Enable vacuuming?
02833  * @return vacuuming value
02834  */
02835 bool
02836 Roomba500Interface::SetMotorsMessage::is_vacuuming() const
02837 {
02838   return data->vacuuming;
02839 }
02840 
02841 /** Get maximum length of vacuuming value.
02842  * @return length of vacuuming value, can be length of the array or number of 
02843  * maximum number of characters for a string
02844  */
02845 size_t
02846 Roomba500Interface::SetMotorsMessage::maxlenof_vacuuming() const
02847 {
02848   return 1;
02849 }
02850 
02851 /** Set vacuuming value.
02852  * Enable vacuuming?
02853  * @param new_vacuuming new vacuuming value
02854  */
02855 void
02856 Roomba500Interface::SetMotorsMessage::set_vacuuming(const bool new_vacuuming)
02857 {
02858   data->vacuuming = new_vacuuming;
02859 }
02860 
02861 /** Get main value.
02862  * Main brush state.
02863  * @return main value
02864  */
02865 Roomba500Interface::BrushState
02866 Roomba500Interface::SetMotorsMessage::main() const
02867 {
02868   return (Roomba500Interface::BrushState)data->main;
02869 }
02870 
02871 /** Get maximum length of main value.
02872  * @return length of main value, can be length of the array or number of 
02873  * maximum number of characters for a string
02874  */
02875 size_t
02876 Roomba500Interface::SetMotorsMessage::maxlenof_main() const
02877 {
02878   return 1;
02879 }
02880 
02881 /** Set main value.
02882  * Main brush state.
02883  * @param new_main new main value
02884  */
02885 void
02886 Roomba500Interface::SetMotorsMessage::set_main(const BrushState new_main)
02887 {
02888   data->main = new_main;
02889 }
02890 
02891 /** Get side value.
02892  * Side brush state.
02893  * @return side value
02894  */
02895 Roomba500Interface::BrushState
02896 Roomba500Interface::SetMotorsMessage::side() const
02897 {
02898   return (Roomba500Interface::BrushState)data->side;
02899 }
02900 
02901 /** Get maximum length of side value.
02902  * @return length of side value, can be length of the array or number of 
02903  * maximum number of characters for a string
02904  */
02905 size_t
02906 Roomba500Interface::SetMotorsMessage::maxlenof_side() const
02907 {
02908   return 1;
02909 }
02910 
02911 /** Set side value.
02912  * Side brush state.
02913  * @param new_side new side value
02914  */
02915 void
02916 Roomba500Interface::SetMotorsMessage::set_side(const BrushState new_side)
02917 {
02918   data->side = new_side;
02919 }
02920 
02921 /** Clone this message.
02922  * Produces a message of the same type as this message and copies the
02923  * data to the new message.
02924  * @return clone of this message
02925  */
02926 Message *
02927 Roomba500Interface::SetMotorsMessage::clone() const
02928 {
02929   return new Roomba500Interface::SetMotorsMessage(this);
02930 }
02931 /** Check if message is valid and can be enqueued.
02932  * @param message Message to check
02933  * @return true if the message is valid, false otherwise.
02934  */
02935 bool
02936 Roomba500Interface::message_valid(const Message *message) const
02937 {
02938   const StopMessage *m0 = dynamic_cast<const StopMessage *>(message);
02939   if ( m0 != NULL ) {
02940     return true;
02941   }
02942   const DockMessage *m1 = dynamic_cast<const DockMessage *>(message);
02943   if ( m1 != NULL ) {
02944     return true;
02945   }
02946   const SetModeMessage *m2 = dynamic_cast<const SetModeMessage *>(message);
02947   if ( m2 != NULL ) {
02948     return true;
02949   }
02950   const DriveStraightMessage *m3 = dynamic_cast<const DriveStraightMessage *>(message);
02951   if ( m3 != NULL ) {
02952     return true;
02953   }
02954   const DriveMessage *m4 = dynamic_cast<const DriveMessage *>(message);
02955   if ( m4 != NULL ) {
02956     return true;
02957   }
02958   const SetMotorsMessage *m5 = dynamic_cast<const SetMotorsMessage *>(message);
02959   if ( m5 != NULL ) {
02960     return true;
02961   }
02962   return false;
02963 }
02964 
02965 /// @cond INTERNALS
02966 EXPORT_INTERFACE(Roomba500Interface)
02967 /// @endcond
02968 
02969 
02970 } // end namespace fawkes