24 #include <interfaces/RobotinoSensorInterface.h>
26 #include <core/exceptions/software.h>
42 RobotinoSensorInterface::RobotinoSensorInterface() : Interface()
44 data_size =
sizeof(RobotinoSensorInterface_data_t);
45 data_ptr = malloc(data_size);
46 data = (RobotinoSensorInterface_data_t *)data_ptr;
47 data_ts = (interface_data_ts_t *)data_ptr;
48 memset(data_ptr, 0, data_size);
49 add_fieldinfo(IFT_FLOAT,
"mot_velocity", 3, &data->mot_velocity);
50 add_fieldinfo(IFT_INT32,
"mot_position", 3, &data->mot_position);
51 add_fieldinfo(IFT_FLOAT,
"mot_current", 3, &data->mot_current);
52 add_fieldinfo(IFT_BOOL,
"bumper", 1, &data->bumper);
53 add_fieldinfo(IFT_FLOAT,
"distance", 9, &data->distance);
54 add_fieldinfo(IFT_BOOL,
"digital_in", 8, &data->digital_in);
55 add_fieldinfo(IFT_FLOAT,
"analog_in", 8, &data->analog_in);
56 add_fieldinfo(IFT_BOOL,
"gyro_available", 1, &data->gyro_available);
57 add_fieldinfo(IFT_FLOAT,
"gyro_angle", 1, &data->gyro_angle);
58 add_fieldinfo(IFT_FLOAT,
"gyro_rate", 1, &data->gyro_rate);
59 unsigned char tmp_hash[] = {0xfe, 0x8a, 0xcf, 0x8f, 0xe8, 0xb9, 0xf, 0x3b, 0x35, 0x3b, 0x1a, 0xea, 0xe7, 0x59, 0xab, 0xc8};
64 RobotinoSensorInterface::~RobotinoSensorInterface()
74 RobotinoSensorInterface::mot_velocity()
const
76 return data->mot_velocity;
86 RobotinoSensorInterface::mot_velocity(
unsigned int index)
const
89 throw Exception(
"Index value %u out of bounds (0..3)", index);
91 return data->mot_velocity[index];
99 RobotinoSensorInterface::maxlenof_mot_velocity()
const
109 RobotinoSensorInterface::set_mot_velocity(
const float * new_mot_velocity)
111 memcpy(data->mot_velocity, new_mot_velocity,
sizeof(
float) * 3);
121 RobotinoSensorInterface::set_mot_velocity(
unsigned int index,
const float new_mot_velocity)
124 throw Exception(
"Index value %u out of bounds (0..3)", index);
126 data->mot_velocity[index] = new_mot_velocity;
134 RobotinoSensorInterface::mot_position()
const
136 return data->mot_position;
146 RobotinoSensorInterface::mot_position(
unsigned int index)
const
149 throw Exception(
"Index value %u out of bounds (0..3)", index);
151 return data->mot_position[index];
159 RobotinoSensorInterface::maxlenof_mot_position()
const
169 RobotinoSensorInterface::set_mot_position(
const int32_t * new_mot_position)
171 memcpy(data->mot_position, new_mot_position,
sizeof(int32_t) * 3);
181 RobotinoSensorInterface::set_mot_position(
unsigned int index,
const int32_t new_mot_position)
184 throw Exception(
"Index value %u out of bounds (0..3)", index);
186 data->mot_position[index] = new_mot_position;
194 RobotinoSensorInterface::mot_current()
const
196 return data->mot_current;
206 RobotinoSensorInterface::mot_current(
unsigned int index)
const
209 throw Exception(
"Index value %u out of bounds (0..3)", index);
211 return data->mot_current[index];
219 RobotinoSensorInterface::maxlenof_mot_current()
const
229 RobotinoSensorInterface::set_mot_current(
const float * new_mot_current)
231 memcpy(data->mot_current, new_mot_current,
sizeof(
float) * 3);
241 RobotinoSensorInterface::set_mot_current(
unsigned int index,
const float new_mot_current)
244 throw Exception(
"Index value %u out of bounds (0..3)", index);
246 data->mot_current[index] = new_mot_current;
254 RobotinoSensorInterface::is_bumper()
const
264 RobotinoSensorInterface::maxlenof_bumper()
const
274 RobotinoSensorInterface::set_bumper(
const bool new_bumper)
276 data->bumper = new_bumper;
285 RobotinoSensorInterface::distance()
const
287 return data->distance;
297 RobotinoSensorInterface::distance(
unsigned int index)
const
300 throw Exception(
"Index value %u out of bounds (0..9)", index);
302 return data->distance[index];
310 RobotinoSensorInterface::maxlenof_distance()
const
320 RobotinoSensorInterface::set_distance(
const float * new_distance)
322 memcpy(data->distance, new_distance,
sizeof(
float) * 9);
332 RobotinoSensorInterface::set_distance(
unsigned int index,
const float new_distance)
335 throw Exception(
"Index value %u out of bounds (0..9)", index);
337 data->distance[index] = new_distance;
345 RobotinoSensorInterface::is_digital_in()
const
347 return data->digital_in;
357 RobotinoSensorInterface::is_digital_in(
unsigned int index)
const
360 throw Exception(
"Index value %u out of bounds (0..8)", index);
362 return data->digital_in[index];
370 RobotinoSensorInterface::maxlenof_digital_in()
const
380 RobotinoSensorInterface::set_digital_in(
const bool * new_digital_in)
382 memcpy(data->digital_in, new_digital_in,
sizeof(
bool) * 8);
392 RobotinoSensorInterface::set_digital_in(
unsigned int index,
const bool new_digital_in)
395 throw Exception(
"Index value %u out of bounds (0..8)", index);
397 data->digital_in[index] = new_digital_in;
405 RobotinoSensorInterface::analog_in()
const
407 return data->analog_in;
417 RobotinoSensorInterface::analog_in(
unsigned int index)
const
420 throw Exception(
"Index value %u out of bounds (0..8)", index);
422 return data->analog_in[index];
430 RobotinoSensorInterface::maxlenof_analog_in()
const
440 RobotinoSensorInterface::set_analog_in(
const float * new_analog_in)
442 memcpy(data->analog_in, new_analog_in,
sizeof(
float) * 8);
452 RobotinoSensorInterface::set_analog_in(
unsigned int index,
const float new_analog_in)
455 throw Exception(
"Index value %u out of bounds (0..8)", index);
457 data->analog_in[index] = new_analog_in;
465 RobotinoSensorInterface::is_gyro_available()
const
467 return data->gyro_available;
475 RobotinoSensorInterface::maxlenof_gyro_available()
const
485 RobotinoSensorInterface::set_gyro_available(
const bool new_gyro_available)
487 data->gyro_available = new_gyro_available;
496 RobotinoSensorInterface::gyro_angle()
const
498 return data->gyro_angle;
506 RobotinoSensorInterface::maxlenof_gyro_angle()
const
516 RobotinoSensorInterface::set_gyro_angle(
const float new_gyro_angle)
518 data->gyro_angle = new_gyro_angle;
527 RobotinoSensorInterface::gyro_rate()
const
529 return data->gyro_rate;
537 RobotinoSensorInterface::maxlenof_gyro_rate()
const
547 RobotinoSensorInterface::set_gyro_rate(
const float new_gyro_rate)
549 data->gyro_rate = new_gyro_rate;
555 RobotinoSensorInterface::create_message(
const char *type)
const
558 "message type for this interface type.", type);
566 RobotinoSensorInterface::copy_values(
const Interface *other)
571 type(), other->
type());
573 memcpy(data, oi->data,
sizeof(RobotinoSensorInterface_data_t));
577 RobotinoSensorInterface::enum_tostring(
const char *enumtype,
int val)
const
588 RobotinoSensorInterface::message_valid(
const Message *message)
const