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;
101 namespace CreatePackets
174 namespace CreateSensors
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;
251 bool isConnected()
const;
253 void setPassiveMode();
262 bool write(
const unsigned char& c);
263 bool write(
const unsigned char *data,
const size_t& len);
279 int read(
unsigned char *data,
const size_t& len);
288 bool blockingRead(
unsigned char *data,
const size_t& size,
unsigned timeout = 25);
294 return blockingRead(reinterpret_cast<unsigned char *>(&data),
sizeof(T),
295 timeout ? timeout :
sizeof(T) * 7);
298 void setLeds(
const bool& advance,
const bool& play,
const unsigned char& color,
const unsigned char& brightness);
300 void drive(
const short& velocity,
const short& radius);
301 void driveDirect(
const short& left,
const short& right);
302 void driveStraight(
const short& speed);
311 void turn(
const short& angle,
const unsigned short& speed);
319 void move(
const short& millimeters,
const unsigned short& speed);
325 void spin(
const short& speed);
332 short angularVelocity()
const;
334 void spinClockwise(
const short& speed);
335 void spinCounterClockwise(
const short& speed);
337 bool setBaudRate(
const unsigned char& baudCode);
339 void setDistance(
const int distance);
340 void setAngle(
const int angle);
378 void setRefreshRate(
const unsigned short& refreshRate);
379 const unsigned short& refreshRate()
const;
386 static Create *instance();
398 pthread_mutex_lock(&m_mutex);
405 pthread_mutex_unlock(&m_mutex);
414 void setLocalBaudRate(
const speed_t& baudRate);
422 inline void lazyDelete(T *&ptr)
427 inline timeval timeOfDay()
const
431 GetSystemTimeAsFileTime(&ft);
432 unsigned long t = (ULONGLONG)ft.dwLowDateTime + ((ULONGLONG)(ft.dwHighDateTime) << 32);
435 tv.tv_usec = t % 1000L;
436 tv.tv_sec = (t - tv.tv_usec) / 1000L;
440 gettimeofday(&ret, NULL);
445 inline bool hasRequiredTimePassed(
const timeval& timestamp)
const
448 timeval current = timeOfDay();
450 timersub(¤t, ×tamp, &result);
451 const long msecs = result.tv_sec * 1000 + result.tv_usec / 1000;
452 return msecs > m_refreshRate;
458 inline double timevalToFloat(
const timeval& tv)
460 return ((
double)tv.tv_sec) + ((double)tv.tv_usec / 1000000.0);
463 inline float deg2rad(
const float& deg)
465 return deg / 180.0 *
PI;
470 void updateSensorPacket1();
471 void updateSensorPacket2(
bool forceUpdate =
false);
472 void updateSensorPacket3();
473 void updateSensorPacket4();
474 void updateSensorPacket5();
478 unsigned short m_refreshRate;
485 timeval timestamps[5];
492 mutable CreateSensors::PlayButton *m_playButton;
493 mutable CreateSensors::AdvanceButton *m_advanceButton;
495 mutable CreateSensors::Wall *m_wall;
496 mutable CreateSensors::CliffLeft *m_cliffLeft;
497 mutable CreateSensors::CliffFrontLeft *m_cliffFrontLeft;
498 mutable CreateSensors::CliffFrontRight *m_cliffFrontRight;
499 mutable CreateSensors::CliffRight *m_cliffRight;
500 mutable CreateSensors::VirtualWall *m_virtualWall;
502 mutable CreateSensors::WallSignal *m_wallSignal;
503 mutable CreateSensors::CliffLeftSignal *m_cliffLeftSignal;
504 mutable CreateSensors::CliffFrontLeftSignal *m_cliffFrontLeftSignal;
505 mutable CreateSensors::CliffFrontRightSignal *m_cliffFrontRightSignal;
506 mutable CreateSensors::CliffRightSignal *m_cliffRightSignal;
507 mutable CreateSensors::CargoBayAnalogSignal *m_cargoBayAnalogSignal;
508 mutable CreateSensors::CargoBayDigitalInputs *m_cargoBayDigitalInputs;
510 mutable CreateSensors::IR *m_ir;
512 mutable CreateSensors::ChargingState *m_chargingState;
513 mutable CreateSensors::BatteryTemperature *m_batteryTemperature;
514 mutable CreateSensors::BatteryCharge *m_batteryCharge;
515 mutable CreateSensors::BatteryCapacity *m_batteryCapacity;
517 mutable CreateSensors::Angle *m_angle;
518 mutable CreateSensors::Distance *m_distance;
520 mutable CreateSensors::BumpLeft *m_bumpLeft;
521 mutable CreateSensors::BumpRight *m_bumpRight;
523 mutable CreateSensors::WheelDropLeft *m_wheelDropLeft;
524 mutable CreateSensors::WheelDropRight *m_wheelDropRight;
525 mutable CreateSensors::WheelDropCaster *m_wheelDropCaster;
531 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:402
unsigned char cliffFrontLeft
Definition: create.hpp:111
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:395
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
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
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
unsigned char wallSignal[2]
Definition: create.hpp:148
bool blockingRead(T &data, unsigned timeout=0)
Definition: create.hpp:292
Definition: create.hpp:224