46 typedef unsigned int speed_t;
65 void append(
const unsigned char& byte);
66 void append(
const unsigned char *data,
const size_t& size);
69 void remove(
const size_t& i,
const size_t& len = 1);
71 const unsigned char *data()
const;
74 unsigned char byte(
const size_t& i);
79 std::vector<unsigned char> m_script;
99 namespace CreatePackets
172 namespace CreateSensors
178 class CliffFrontLeft;
179 class CliffFrontRight;
183 class CliffLeftSignal;
184 class CliffFrontLeftSignal;
185 class CliffFrontRightSignal;
186 class CliffRightSignal;
187 class CargoBayAnalogSignal;
188 class CargoBayDigitalInputs;
191 class BatteryTemperature;
193 class BatteryCapacity;
198 class WheelDropRight;
200 class WheelDropCaster;
249 bool isConnected()
const;
251 void setPassiveMode();
260 bool write(
const unsigned char& c);
261 bool write(
const unsigned char *data,
const size_t& len);
277 int read(
unsigned char *data,
const size_t& len);
286 bool blockingRead(
unsigned char *data,
const size_t& size,
unsigned timeout = 25);
290 inline bool blockingRead(T& data,
unsigned timeout = 0)
292 return blockingRead(reinterpret_cast<unsigned char *>(&data),
sizeof(T),
293 timeout ? timeout :
sizeof(T) * 7);
296 void setLeds(
const bool& advance,
const bool& play,
const unsigned char& color,
const unsigned char& brightness);
298 void drive(
const short& velocity,
const short& radius);
299 void driveDirect(
const short& left,
const short& right);
300 inline void driveStraight(
const short& speed) { driveDirect(speed, speed); }
313 void turn(
const short& angle,
const unsigned short& speed);
321 void move(
const short& millimeters,
const unsigned short& speed);
327 void spin(
const short& speed);
334 short angularVelocity()
const;
339 bool setBaudRate(
const unsigned char& baudCode);
341 void setDistance(
const int distance);
342 void setAngle(
const int angle);
380 void setRefreshRate(
const unsigned short& refreshRate);
381 const unsigned short& refreshRate()
const;
388 static Create *instance();
397 inline void beginAtomicOperation()
400 pthread_mutex_lock(&m_mutex);
404 inline void endAtomicOperation()
407 pthread_mutex_unlock(&m_mutex);
416 void setLocalBaudRate(
const speed_t& baudRate);
424 inline void lazyDelete(T *&ptr)
429 inline timeval timeOfDay()
const
432 gettimeofday(&ret, NULL);
436 inline bool hasRequiredTimePassed(
const timeval& timestamp)
const
439 timeval current = timeOfDay();
441 timersub(¤t, ×tamp, &result);
442 const long msecs = result.tv_sec * 1000 + result.tv_usec / 1000;
443 return msecs > m_refreshRate;
445 #warning Create library not yet implemented for Windows
449 inline double timevalToFloat(
const timeval& tv)
451 return ((
double)tv.tv_sec) + ((double)tv.tv_usec / 1000000.0);
454 inline float deg2rad(
const float& deg)
456 return deg / 180.0 *
PI;
461 void updateSensorPacket1();
462 void updateSensorPacket2(
bool forceUpdate =
false);
463 void updateSensorPacket3();
464 void updateSensorPacket4();
465 void updateSensorPacket5();
469 unsigned short m_refreshRate;
476 timeval timestamps[5];
483 mutable CreateSensors::PlayButton *m_playButton;
484 mutable CreateSensors::AdvanceButton *m_advanceButton;
486 mutable CreateSensors::Wall *m_wall;
487 mutable CreateSensors::CliffLeft *m_cliffLeft;
488 mutable CreateSensors::CliffFrontLeft *m_cliffFrontLeft;
489 mutable CreateSensors::CliffFrontRight *m_cliffFrontRight;
490 mutable CreateSensors::CliffRight *m_cliffRight;
491 mutable CreateSensors::VirtualWall *m_virtualWall;
493 mutable CreateSensors::WallSignal *m_wallSignal;
494 mutable CreateSensors::CliffLeftSignal *m_cliffLeftSignal;
495 mutable CreateSensors::CliffFrontLeftSignal *m_cliffFrontLeftSignal;
496 mutable CreateSensors::CliffFrontRightSignal *m_cliffFrontRightSignal;
497 mutable CreateSensors::CliffRightSignal *m_cliffRightSignal;
498 mutable CreateSensors::CargoBayAnalogSignal *m_cargoBayAnalogSignal;
499 mutable CreateSensors::CargoBayDigitalInputs *m_cargoBayDigitalInputs;
501 mutable CreateSensors::IR *m_ir;
503 mutable CreateSensors::ChargingState *m_chargingState;
504 mutable CreateSensors::BatteryTemperature *m_batteryTemperature;
505 mutable CreateSensors::BatteryCharge *m_batteryCharge;
506 mutable CreateSensors::BatteryCapacity *m_batteryCapacity;
508 mutable CreateSensors::Angle *m_angle;
509 mutable CreateSensors::Distance *m_distance;
511 mutable CreateSensors::BumpLeft *m_bumpLeft;
512 mutable CreateSensors::BumpRight *m_bumpRight;
514 mutable CreateSensors::WheelDropLeft *m_wheelDropLeft;
515 mutable CreateSensors::WheelDropRight *m_wheelDropRight;
516 mutable CreateSensors::WheelDropCaster *m_wheelDropCaster;
522 pthread_mutex_t m_mutex;