21 #ifndef _PLUGINS_ROBOTINO_DIRECT_COM_THREAD_H_
22 #define _PLUGINS_ROBOTINO_DIRECT_COM_THREAD_H_
24 #include "com_thread.h"
25 #include "direct_com_message.h"
27 #include <aspect/blackboard.h>
28 #include <aspect/configurable.h>
29 #include <core/threading/thread.h>
30 #include <utils/time/time.h>
32 #include <boost/asio.hpp>
33 #include <boost/thread/mutex.hpp>
42 class BatteryInterface;
43 class RobotinoSensorInterface;
67 virtual void get_odometry(
double &x,
double &y,
double &phi);
85 std::string find_device_udev();
86 bool find_controld3();
87 void open_device(
bool wait_replies);
90 void check_deadline();
92 void handle_request_data(
const boost::system::error_code &ec);
93 void handle_nodata(
const boost::system::error_code &ec);
94 void update_nodata_timer();
97 void handle_drive(
const boost::system::error_code &ec);
105 std::string cfg_device_;
106 bool cfg_enable_gyro_;
107 unsigned int cfg_sensor_update_cycle_time_;
108 bool cfg_gripper_enabled_;
110 unsigned int cfg_nodata_timeout_;
111 unsigned int cfg_drive_update_interval_;
112 unsigned int cfg_read_timeout_;
113 bool cfg_log_checksum_errors_;
114 unsigned int cfg_checksum_error_recover_;
115 unsigned int cfg_checksum_error_critical_;
118 unsigned int open_tries_;
120 unsigned int checksum_errors_;
122 uint8_t digital_outputs_;
124 boost::asio::io_service io_service_;
125 boost::asio::serial_port serial_;
126 boost::asio::io_service::work io_service_work_;
127 boost::asio::deadline_timer deadline_;
128 boost::asio::streambuf input_buffer_;
129 boost::mutex io_mutex_;
131 boost::asio::deadline_timer request_timer_;
132 boost::asio::deadline_timer nodata_timer_;
133 boost::asio::deadline_timer drive_timer_;