8 #ifndef INCLUDE_WALLABY_CREATE_HPP_
9 #define INCLUDE_WALLABY_CREATE_HPP_
40 typedef unsigned int speed_t;
59 void append(
const unsigned char& byte);
60 void append(
const unsigned char *data,
const size_t& size);
63 void remove(
const size_t& i,
const size_t& len = 1);
65 const unsigned char *data()
const;
68 unsigned char byte(
const size_t& i);
73 std::vector<unsigned char> m_script;
195 class CliffFrontLeft;
196 class CliffFrontRight;
200 class CliffLeftSignal;
201 class CliffFrontLeftSignal;
202 class CliffFrontRightSignal;
203 class CliffRightSignal;
204 class CargoBayAnalogSignal;
205 class CargoBayDigitalInputs;
208 class BatteryTemperature;
210 class BatteryCapacity;
215 class WheelDropRight;
217 class WheelDropCaster;
220 class LightBumpFrontLeft;
221 class LightBumpFrontRight;
222 class LightBumpRight;
223 class LightBumpCenterLeft;
224 class LightBumpCenterRight;
226 class LightBumpLeftSignal;
227 class LightBumpFrontLeftSignal;
228 class LightBumpFrontRightSignal;
229 class LightBumpRightSignal;
230 class LightBumpCenterLeftSignal;
231 class LightBumpCenterRightSignal;
281 bool connect(
const BaudRate baudRate);
296 bool isConnected()
const;
299 void setPassiveMode();
308 bool write(
const unsigned char& c);
311 bool write(
const unsigned char *data,
const size_t& len);
328 int read(
unsigned char *data,
const size_t& len);
337 bool blockingRead(
unsigned char *data,
const size_t& size,
unsigned timeout = 25);
343 return blockingRead(reinterpret_cast<unsigned char *>(&data),
sizeof(T),
344 timeout ? timeout :
sizeof(T) * 7);
347 void setLeds(
const bool& advance,
const bool& play,
const unsigned char& color,
const unsigned char& brightness);
349 void drive(
const short& velocity,
const short& radius);
350 void driveDirect(
const short& left,
const short& right);
351 void driveStraight(
const short& speed);
360 void turn(
const short& angle,
const unsigned short& speed);
368 void move(
const short& millimeters,
const unsigned short& speed);
374 void spin(
const short& speed);
381 short angularVelocity()
const;
383 void spinClockwise(
const short& speed);
384 void spinCounterClockwise(
const short& speed);
386 bool setBaudRate(
const unsigned char& baudCode);
388 void setDistance(
const int distance);
389 void setAngle(
const int angle);
441 void setRefreshRate(
const unsigned short& refreshRate);
442 const unsigned short& refreshRate()
const;
449 static Create *instance();
462 pthread_mutex_lock(&m_mutex);
469 pthread_mutex_unlock(&m_mutex);
481 void setLocalBaudRate(
const speed_t& baudRate);
489 inline void lazyDelete(T *&ptr)
494 inline timeval timeOfDay()
const
498 GetSystemTimeAsFileTime(&ft);
499 unsigned long t = (ULONGLONG)ft.dwLowDateTime + ((ULONGLONG)(ft.dwHighDateTime) << 32);
502 tv.tv_usec = t % 1000L;
503 tv.tv_sec = (t - tv.tv_usec) / 1000L;
507 gettimeofday(&ret, NULL);
512 inline bool hasRequiredTimePassed(
const timeval& timestamp)
const
515 timeval current = timeOfDay();
517 timersub(¤t, ×tamp, &result);
518 const long msecs = result.tv_sec * 1000 + result.tv_usec / 1000;
519 return msecs > m_refreshRate;
525 inline double timevalToFloat(
const timeval& tv)
527 return ((
double)tv.tv_sec) + ((double)tv.tv_usec / 1000000.0);
530 inline float deg2rad(
const float& deg)
532 return deg / 180.0 *
PI;
537 void updateSensorPacket1();
538 void updateSensorPacket2(
bool forceUpdate =
false);
539 void updateSensorPacket3();
540 void updateSensorPacket4();
541 void updateSensorPacket5();
542 void updateSensorPacket101();
546 unsigned short m_refreshRate;
554 timeval timestamps[6];
562 mutable CreateSensors::PlayButton *m_playButton;
563 mutable CreateSensors::AdvanceButton *m_advanceButton;
565 mutable CreateSensors::Wall *m_wall;
566 mutable CreateSensors::CliffLeft *m_cliffLeft;
567 mutable CreateSensors::CliffFrontLeft *m_cliffFrontLeft;
568 mutable CreateSensors::CliffFrontRight *m_cliffFrontRight;
569 mutable CreateSensors::CliffRight *m_cliffRight;
570 mutable CreateSensors::VirtualWall *m_virtualWall;
572 mutable CreateSensors::WallSignal *m_wallSignal;
573 mutable CreateSensors::CliffLeftSignal *m_cliffLeftSignal;
574 mutable CreateSensors::CliffFrontLeftSignal *m_cliffFrontLeftSignal;
575 mutable CreateSensors::CliffFrontRightSignal *m_cliffFrontRightSignal;
576 mutable CreateSensors::CliffRightSignal *m_cliffRightSignal;
577 mutable CreateSensors::CargoBayAnalogSignal *m_cargoBayAnalogSignal;
578 mutable CreateSensors::CargoBayDigitalInputs *m_cargoBayDigitalInputs;
580 mutable CreateSensors::LightBumpLeft *m_lightBumpLeft;
581 mutable CreateSensors::LightBumpFrontLeft *m_lightBumpFrontLeft;
582 mutable CreateSensors::LightBumpCenterLeft *m_lightBumpCenterLeft;
583 mutable CreateSensors::LightBumpCenterRight *m_lightBumpCenterRight;
584 mutable CreateSensors::LightBumpFrontRight *m_lightBumpFrontRight;
585 mutable CreateSensors::LightBumpRight *m_lightBumpRight;
587 mutable CreateSensors::LightBumpLeftSignal *m_lightBumpLeftSignal;
588 mutable CreateSensors::LightBumpFrontLeftSignal *m_lightBumpFrontLeftSignal;
589 mutable CreateSensors::LightBumpCenterLeftSignal *m_lightBumpCenterLeftSignal;
590 mutable CreateSensors::LightBumpCenterRightSignal *m_lightBumpCenterRightSignal;
591 mutable CreateSensors::LightBumpFrontRightSignal *m_lightBumpFrontRightSignal;
592 mutable CreateSensors::LightBumpRightSignal *m_lightBumpRightSignal;
594 mutable CreateSensors::IR *m_ir;
596 mutable CreateSensors::ChargingState *m_chargingState;
597 mutable CreateSensors::BatteryTemperature *m_batteryTemperature;
598 mutable CreateSensors::BatteryCharge *m_batteryCharge;
599 mutable CreateSensors::BatteryCapacity *m_batteryCapacity;
601 mutable CreateSensors::Angle *m_angle;
602 mutable CreateSensors::Distance *m_distance;
604 mutable CreateSensors::BumpLeft *m_bumpLeft;
605 mutable CreateSensors::BumpRight *m_bumpRight;
607 mutable CreateSensors::WheelDropLeft *m_wheelDropLeft;
608 mutable CreateSensors::WheelDropRight *m_wheelDropRight;
609 mutable CreateSensors::WheelDropCaster *m_wheelDropCaster;
615 pthread_mutex_t m_mutex;
short rightVelocity
Definition: create.hpp:86
unsigned char numberOfStreamPackets
Definition: create.hpp:158
Definition: create.hpp:114
char stasis
Definition: create.hpp:185
unsigned char batteryCapacity[2]
Definition: create.hpp:132
void endAtomicOperation()
Definition: create.hpp:466
unsigned char cliffFrontLeft
Definition: create.hpp:103
unsigned char lightBumpLeftSignal[2]
Definition: create.hpp:174
Definition: create.hpp:189
unsigned char lightBumpFrontLeftSignal[2]
Definition: create.hpp:175
char leftVelocity[2]
Definition: create.hpp:162
unsigned char chargingSourcesAvailable
Definition: create.hpp:147
int distance
Definition: create.hpp:83
unsigned char userDigitalInputs
Definition: create.hpp:145
unsigned char lightBumpCenterLeftSignal[2]
Definition: create.hpp:176
unsigned char cargoBayDigitalInputs
Definition: create.hpp:107
unsigned char lightBumpRightSignal[2]
Definition: create.hpp:179
unsigned char lightBumpBits
Definition: create.hpp:173
Definition: create.hpp:79
unsigned char buttons
Definition: create.hpp:117
short leftVelocity
Definition: create.hpp:87
Mode
Definition: create.hpp:250
Definition: create.hpp:153
unsigned char lowSideDriverAndWheelOvercurrents
Definition: create.hpp:108
char sideBrushMotorCurrent[2]
Definition: create.hpp:184
unsigned char cliffRight
Definition: create.hpp:105
unsigned char ir
Definition: create.hpp:116
unsigned char userAnalogInput[2]
Definition: create.hpp:146
void beginAtomicOperation()
Definition: create.hpp:459
char rightVelocity[2]
Definition: create.hpp:161
unsigned char lightBumpFrontRightSignal[2]
Definition: create.hpp:178
unsigned char mode
Definition: create.hpp:155
unsigned char voltage[2]
Definition: create.hpp:128
char rightMotorCurrent[2]
Definition: create.hpp:182
char mainBrushMotorCurrent[2]
Definition: create.hpp:183
char radius[2]
Definition: create.hpp:160
#define PI
Definition: create.hpp:47
Definition: create.hpp:53
unsigned char cliffFrontRightSignal[2]
Definition: create.hpp:143
short radius
Definition: create.hpp:85
unsigned char leftEncoderCounts[2]
Definition: create.hpp:170
unsigned char cliffLeftSignal[2]
Definition: create.hpp:141
Facilitates communication with the iRobot (R) Create (TM)
Definition: create.hpp:241
unsigned char cliffLeft
Definition: create.hpp:102
unsigned char bumpsAndWheelDrops
Definition: create.hpp:100
unsigned char cliffRightSignal[2]
Definition: create.hpp:144
unsigned char batteryCharge[2]
Definition: create.hpp:131
BaudRate
Definition: create.hpp:268
unsigned char cliffFrontLeftSignal[2]
Definition: create.hpp:142
char leftMotorCurrent[2]
Definition: create.hpp:181
unsigned char lightBumpCenterRightSignal[2]
Definition: create.hpp:177
Definition: create.hpp:125
timeval timestamp
Definition: create.hpp:81
int angle
Definition: create.hpp:84
Definition: create.hpp:251
unsigned char songPlaying
Definition: create.hpp:157
unsigned char chargingState
Definition: create.hpp:127
char velocity[2]
Definition: create.hpp:159
Definition: create.hpp:252
#define EXPORT_SYM
Definition: export.h:14
char batteryTemperature
Definition: create.hpp:130
void setDefaultBaudRate(const BaudRate defaultBaudRate)
Definition: create.hpp:473
Definition: create.hpp:98
unsigned char angle[2]
Definition: create.hpp:119
unsigned char rightEncoderCounts[2]
Definition: create.hpp:171
unsigned char virtualWall
Definition: create.hpp:106
Definition: create.hpp:168
unsigned char distance[2]
Definition: create.hpp:118
unsigned char cliffFrontRight
Definition: create.hpp:104
unsigned char wall
Definition: create.hpp:101
Definition: create.hpp:138
char current[2]
Definition: create.hpp:129
unsigned char songNumber
Definition: create.hpp:156
BaudRate defaultBaudRate() const
Definition: create.hpp:474
unsigned char wallSignal[2]
Definition: create.hpp:140
bool blockingRead(T &data, unsigned timeout=0)
Definition: create.hpp:341
Definition: create.hpp:93
BaudRate
Definition: create.h:454
Definition: create.hpp:253