24 #ifndef __PLUGINS_PANTILT_ROBOTIS_RX28_H_
25 #define __PLUGINS_PANTILT_ROBOTIS_RX28_H_
27 #include <core/exception.h>
29 #ifdef USE_TIMETRACKER
30 # warning Visca time tracker enabled
31 # include <utils/timetracker.h>
39 #define RX28_CONTROL_TABLE_LENGTH 0x32
40 #define RX28_MAX_NUM_SERVOS 254
48 RobotisRX28(
const char *device_file,
unsigned int default_timeout_ms = 30);
54 bool ping(
unsigned char id,
unsigned int timeout_ms = 100);
59 unsigned int value,
bool double_byte =
false);
61 unsigned char *values,
unsigned int num_values);
64 unsigned char addr,
unsigned char read_length);
71 unsigned int get_model(
unsigned char id,
bool refresh =
false);
72 unsigned int get_position(
unsigned char id,
bool refresh =
false);
74 unsigned char get_baudrate(
unsigned char id,
bool refresh =
false);
75 unsigned char get_delay_time(
unsigned char id,
bool refresh =
false);
77 unsigned int &cw_limit,
unsigned int &ccw_limit,
78 bool refresh =
false);
81 unsigned char &low,
unsigned char &high,
82 bool refresh =
false);
83 unsigned int get_max_torque(
unsigned char id,
bool refresh =
false);
85 unsigned char get_alarm_led(
unsigned char id,
bool refresh =
false);
88 unsigned int &down_calib,
unsigned int &up_calib,
89 bool refresh =
false);
93 unsigned char &cw_margin,
unsigned char &cw_slope,
94 unsigned char &ccw_margin,
unsigned char &ccw_slope,
95 bool refresh =
false);
97 unsigned int get_goal_speed(
unsigned char id,
bool refresh =
false);
100 unsigned int get_speed(
unsigned char id,
bool refresh =
false);
101 unsigned int get_load(
unsigned char id,
bool refresh =
false);
102 unsigned char get_voltage(
unsigned char id,
bool refresh =
false);
104 bool is_moving(
unsigned char id,
bool refresh =
false);
105 bool is_locked(
unsigned char id,
bool refresh =
false);
106 unsigned int get_punch(
unsigned char id,
bool refresh =
false);
108 void set_id(
unsigned char id,
unsigned char new_id);
109 void set_baudrate(
unsigned char id,
unsigned char baudrate);
112 unsigned int cw_limit,
unsigned int ccw_limit);
117 void set_alarm_led(
unsigned char id,
unsigned char alarm_led);
123 unsigned char cw_margin,
unsigned char cw_slope,
124 unsigned char ccw_margin,
unsigned char ccw_slope);
129 void set_punch(
unsigned char id,
unsigned int punch);
153 static const unsigned char P_ID;
204 static const unsigned char INST_PING;
205 static const unsigned char INST_READ;
206 static const unsigned char INST_WRITE;
207 static const unsigned char INST_REG_WRITE;
208 static const unsigned char INST_ACTION;
209 static const unsigned char INST_RESET;
210 static const unsigned char INST_DIGITAL_RESET;
211 static const unsigned char INST_SYSTEM_READ;
212 static const unsigned char INST_SYSTEM_WRITE;
213 static const unsigned char INST_SYNC_WRITE;
214 static const unsigned char INST_SYNC_REG_WRITE;
217 static const unsigned char PACKET_OFFSET_ID;
218 static const unsigned char PACKET_OFFSET_LENGTH;
219 static const unsigned char PACKET_OFFSET_INST;
220 static const unsigned char PACKET_OFFSET_PARAM;
221 static const unsigned char PACKET_OFFSET_ERROR;
224 unsigned char calc_checksum(
const unsigned char id,
const unsigned char instruction,
225 const unsigned char *params,
const unsigned char plength);
226 void send(
const unsigned char id,
const unsigned char instruction,
227 const unsigned char *params,
const unsigned char plength);
228 void recv(
const unsigned char exp_length,
unsigned int timeout_ms = 0xFFFFFFFF);
229 void assert_valid_id(
unsigned char id);
230 unsigned int merge_twobyte_value(
unsigned int id,
231 unsigned char ind_l,
unsigned char ind_h);
232 unsigned int get_value(
unsigned int id,
bool refresh,
233 unsigned int ind_l,
unsigned int ind_h = 0xFFFFFFFF);
234 bool inline responds_read(
unsigned int id)
241 bool inline responds_all(
unsigned int id)
248 unsigned int __default_timeout_ms;
250 unsigned char __obuffer[260];
251 unsigned char __ibuffer[260];
253 int __obuffer_length;
254 int __ibuffer_length;
256 char __control_table[RX28_MAX_NUM_SERVOS][RX28_CONTROL_TABLE_LENGTH];
258 #ifdef TIMETRACKER_VISCA
260 std::ofstream track_file;
261 unsigned int ttcls_pantilt_get_send;
262 unsigned int ttcls_pantilt_get_read;
263 unsigned int ttcls_pantilt_get_handle;
264 unsigned int ttcls_pantilt_get_interpret;