48 typedef unsigned int speed_t;
67 void append(
const unsigned char& byte);
68 void append(
const unsigned char *data,
const size_t& size);
71 void remove(
const size_t& i,
const size_t& len = 1);
73 const unsigned char *data()
const;
76 unsigned char byte(
const size_t& i);
81 std::vector<unsigned char> m_script;
180 class CliffFrontLeft;
181 class CliffFrontRight;
185 class CliffLeftSignal;
186 class CliffFrontLeftSignal;
187 class CliffFrontRightSignal;
188 class CliffRightSignal;
189 class CargoBayAnalogSignal;
190 class CargoBayDigitalInputs;
193 class BatteryTemperature;
195 class BatteryCapacity;
200 class WheelDropRight;
202 class WheelDropCaster;
252 bool connect(
const BaudRate baudRate);
267 bool isConnected()
const;
269 void setPassiveMode();
278 bool write(
const unsigned char& c);
281 bool write(
const unsigned char *data,
const size_t& len);
298 int read(
unsigned char *data,
const size_t& len);
307 bool blockingRead(
unsigned char *data,
const size_t& size,
unsigned timeout = 25);
313 return blockingRead(reinterpret_cast<unsigned char *>(&data),
sizeof(T),
314 timeout ? timeout :
sizeof(T) * 7);
317 void setLeds(
const bool& advance,
const bool& play,
const unsigned char& color,
const unsigned char& brightness);
319 void drive(
const short& velocity,
const short& radius);
320 void driveDirect(
const short& left,
const short& right);
321 void driveStraight(
const short& speed);
330 void turn(
const short& angle,
const unsigned short& speed);
338 void move(
const short& millimeters,
const unsigned short& speed);
344 void spin(
const short& speed);
351 short angularVelocity()
const;
353 void spinClockwise(
const short& speed);
354 void spinCounterClockwise(
const short& speed);
356 bool setBaudRate(
const unsigned char& baudCode);
358 void setDistance(
const int distance);
359 void setAngle(
const int angle);
397 void setRefreshRate(
const unsigned short& refreshRate);
398 const unsigned short& refreshRate()
const;
405 static Create *instance();
417 pthread_mutex_lock(&m_mutex);
424 pthread_mutex_unlock(&m_mutex);
436 void setLocalBaudRate(
const speed_t& baudRate);
444 inline void lazyDelete(T *&ptr)
449 inline timeval timeOfDay()
const
453 GetSystemTimeAsFileTime(&ft);
454 unsigned long t = (ULONGLONG)ft.dwLowDateTime + ((ULONGLONG)(ft.dwHighDateTime) << 32);
457 tv.tv_usec = t % 1000L;
458 tv.tv_sec = (t - tv.tv_usec) / 1000L;
462 gettimeofday(&ret, NULL);
467 inline bool hasRequiredTimePassed(
const timeval& timestamp)
const
470 timeval current = timeOfDay();
472 timersub(¤t, ×tamp, &result);
473 const long msecs = result.tv_sec * 1000 + result.tv_usec / 1000;
474 return msecs > m_refreshRate;
480 inline double timevalToFloat(
const timeval& tv)
482 return ((
double)tv.tv_sec) + ((double)tv.tv_usec / 1000000.0);
485 inline float deg2rad(
const float& deg)
487 return deg / 180.0 *
PI;
492 void updateSensorPacket1();
493 void updateSensorPacket2(
bool forceUpdate =
false);
494 void updateSensorPacket3();
495 void updateSensorPacket4();
496 void updateSensorPacket5();
500 unsigned short m_refreshRate;
507 timeval timestamps[5];
514 mutable CreateSensors::PlayButton *m_playButton;
515 mutable CreateSensors::AdvanceButton *m_advanceButton;
517 mutable CreateSensors::Wall *m_wall;
518 mutable CreateSensors::CliffLeft *m_cliffLeft;
519 mutable CreateSensors::CliffFrontLeft *m_cliffFrontLeft;
520 mutable CreateSensors::CliffFrontRight *m_cliffFrontRight;
521 mutable CreateSensors::CliffRight *m_cliffRight;
522 mutable CreateSensors::VirtualWall *m_virtualWall;
524 mutable CreateSensors::WallSignal *m_wallSignal;
525 mutable CreateSensors::CliffLeftSignal *m_cliffLeftSignal;
526 mutable CreateSensors::CliffFrontLeftSignal *m_cliffFrontLeftSignal;
527 mutable CreateSensors::CliffFrontRightSignal *m_cliffFrontRightSignal;
528 mutable CreateSensors::CliffRightSignal *m_cliffRightSignal;
529 mutable CreateSensors::CargoBayAnalogSignal *m_cargoBayAnalogSignal;
530 mutable CreateSensors::CargoBayDigitalInputs *m_cargoBayDigitalInputs;
532 mutable CreateSensors::IR *m_ir;
534 mutable CreateSensors::ChargingState *m_chargingState;
535 mutable CreateSensors::BatteryTemperature *m_batteryTemperature;
536 mutable CreateSensors::BatteryCharge *m_batteryCharge;
537 mutable CreateSensors::BatteryCapacity *m_batteryCapacity;
539 mutable CreateSensors::Angle *m_angle;
540 mutable CreateSensors::Distance *m_distance;
542 mutable CreateSensors::BumpLeft *m_bumpLeft;
543 mutable CreateSensors::BumpRight *m_bumpRight;
545 mutable CreateSensors::WheelDropLeft *m_wheelDropLeft;
546 mutable CreateSensors::WheelDropRight *m_wheelDropRight;
547 mutable CreateSensors::WheelDropCaster *m_wheelDropCaster;
553 pthread_mutex_t m_mutex;
short rightVelocity
Definition: create.hpp:94
unsigned char numberOfStreamPackets
Definition: create.hpp:166
Definition: create.hpp:122
unsigned char batteryCapacity[2]
Definition: create.hpp:140
void endAtomicOperation()
Definition: create.hpp:421
unsigned char cliffFrontLeft
Definition: create.hpp:111
Definition: create.hpp:174
char leftVelocity[2]
Definition: create.hpp:170
unsigned char chargingSourcesAvailable
Definition: create.hpp:155
int distance
Definition: create.hpp:91
unsigned char userDigitalInputs
Definition: create.hpp:153
unsigned char cargoBayDigitalInputs
Definition: create.hpp:115
Definition: create.hpp:87
unsigned char buttons
Definition: create.hpp:125
short leftVelocity
Definition: create.hpp:95
Mode
Definition: create.hpp:221
Definition: create.hpp:161
unsigned char lowSideDriverAndWheelOvercurrents
Definition: create.hpp:116
unsigned char cliffRight
Definition: create.hpp:113
unsigned char ir
Definition: create.hpp:124
unsigned char userAnalogInput[2]
Definition: create.hpp:154
void beginAtomicOperation()
Definition: create.hpp:414
char rightVelocity[2]
Definition: create.hpp:169
unsigned char mode
Definition: create.hpp:163
unsigned char voltage[2]
Definition: create.hpp:136
char radius[2]
Definition: create.hpp:168
#define PI
Definition: create.hpp:55
Definition: create.hpp:61
unsigned char cliffFrontRightSignal[2]
Definition: create.hpp:151
short radius
Definition: create.hpp:93
unsigned char cliffLeftSignal[2]
Definition: create.hpp:149
Facilitates communication with the iRobot (R) Create (TM)
Definition: create.hpp:212
unsigned char cliffLeft
Definition: create.hpp:110
unsigned char bumpsAndWheelDrops
Definition: create.hpp:108
unsigned char cliffRightSignal[2]
Definition: create.hpp:152
unsigned char batteryCharge[2]
Definition: create.hpp:139
BaudRate
Definition: create.hpp:239
unsigned char cliffFrontLeftSignal[2]
Definition: create.hpp:150
Definition: create.hpp:133
timeval timestamp
Definition: create.hpp:89
int angle
Definition: create.hpp:92
Definition: create.hpp:222
unsigned char songPlaying
Definition: create.hpp:165
unsigned char chargingState
Definition: create.hpp:135
char velocity[2]
Definition: create.hpp:167
Definition: create.hpp:223
#define EXPORT_SYM
Definition: export.h:7
char batteryTemperature
Definition: create.hpp:138
void setDefaultBaudRate(const BaudRate defaultBaudRate)
Definition: create.hpp:428
Definition: create.hpp:106
unsigned char angle[2]
Definition: create.hpp:127
unsigned char virtualWall
Definition: create.hpp:114
unsigned char distance[2]
Definition: create.hpp:126
unsigned char cliffFrontRight
Definition: create.hpp:112
unsigned char wall
Definition: create.hpp:109
Definition: create.hpp:146
char current[2]
Definition: create.hpp:137
unsigned char songNumber
Definition: create.hpp:164
BaudRate defaultBaudRate() const
Definition: create.hpp:429
unsigned char wallSignal[2]
Definition: create.hpp:148
bool blockingRead(T &data, unsigned timeout=0)
Definition: create.hpp:311
Definition: create.hpp:101
BaudRate
Definition: create.h:408
Definition: create.hpp:224