24#include <interfaces/JoystickInterface.h>
26#include <core/exceptions/software.h>
128JoystickInterface::JoystickInterface() : Interface()
130 data_size =
sizeof(JoystickInterface_data_t);
131 data_ptr = malloc(data_size);
132 data = (JoystickInterface_data_t *)data_ptr;
133 data_ts = (interface_data_ts_t *)data_ptr;
134 memset(data_ptr, 0, data_size);
135 enum_map_Direction[(int)DIRECTION_DOWN] =
"DIRECTION_DOWN";
136 enum_map_Direction[(int)DIRECTION_LEFT] =
"DIRECTION_LEFT";
137 enum_map_Direction[(int)DIRECTION_UP] =
"DIRECTION_UP";
138 enum_map_Direction[(int)DIRECTION_RIGHT] =
"DIRECTION_RIGHT";
139 add_fieldinfo(IFT_BYTE,
"num_axes", 1, &data->num_axes);
140 add_fieldinfo(IFT_BYTE,
"num_buttons", 1, &data->num_buttons);
141 add_fieldinfo(IFT_BYTE,
"supported_ff_effects", 1, &data->supported_ff_effects);
142 add_fieldinfo(IFT_UINT32,
"pressed_buttons", 1, &data->pressed_buttons);
143 add_fieldinfo(IFT_FLOAT,
"axis", 8, &data->axis);
144 add_fieldinfo(IFT_UINT8,
"ff_effects", 1, &data->ff_effects);
145 add_messageinfo(
"StartRumbleMessage");
146 add_messageinfo(
"StopRumbleMessage");
147 add_messageinfo(
"StopAllMessage");
148 unsigned char tmp_hash[] = {0xeb, 0x7c, 0xd1, 0x1c, 0xae, 0xa, 0x37, 0x45, 0x5c, 0xa, 0x5e, 0xda, 0x5e, 0x17, 0xdd, 0x42};
153JoystickInterface::~JoystickInterface()
162JoystickInterface::tostring_Direction(
Direction value)
const
165 case DIRECTION_DOWN:
return "DIRECTION_DOWN";
166 case DIRECTION_LEFT:
return "DIRECTION_LEFT";
167 case DIRECTION_UP:
return "DIRECTION_UP";
168 case DIRECTION_RIGHT:
return "DIRECTION_RIGHT";
169 default:
return "UNKNOWN";
180JoystickInterface::num_axes()
const
182 return data->num_axes;
190JoystickInterface::maxlenof_num_axes()
const
202JoystickInterface::set_num_axes(
const uint8_t new_num_axes)
204 set_field(data->num_axes, new_num_axes);
214JoystickInterface::num_buttons()
const
216 return data->num_buttons;
224JoystickInterface::maxlenof_num_buttons()
const
236JoystickInterface::set_num_buttons(
const uint8_t new_num_buttons)
238 set_field(data->num_buttons, new_num_buttons);
248JoystickInterface::supported_ff_effects()
const
250 return data->supported_ff_effects;
258JoystickInterface::maxlenof_supported_ff_effects()
const
270JoystickInterface::set_supported_ff_effects(
const uint8_t new_supported_ff_effects)
272 set_field(data->supported_ff_effects, new_supported_ff_effects);
284JoystickInterface::pressed_buttons()
const
286 return data->pressed_buttons;
294JoystickInterface::maxlenof_pressed_buttons()
const
308JoystickInterface::set_pressed_buttons(
const uint32_t new_pressed_buttons)
310 set_field(data->pressed_buttons, new_pressed_buttons);
318JoystickInterface::axis()
const
330JoystickInterface::axis(
unsigned int index)
const
333 throw Exception(
"Index value %u out of bounds (0..7)", index);
335 return data->axis[index];
343JoystickInterface::maxlenof_axis()
const
353JoystickInterface::set_axis(
const float * new_axis)
355 set_field(data->axis, new_axis);
364JoystickInterface::set_axis(
unsigned int index,
const float new_axis)
366 set_field(data->axis, index, new_axis);
376JoystickInterface::ff_effects()
const
378 return data->ff_effects;
386JoystickInterface::maxlenof_ff_effects()
const
399JoystickInterface::set_ff_effects(
const uint8_t new_ff_effects)
401 set_field(data->ff_effects, new_ff_effects);
406JoystickInterface::create_message(
const char *type)
const
408 if ( strncmp(
"StartRumbleMessage", type, INTERFACE_MESSAGE_TYPE_SIZE_ - 1) == 0 ) {
410 }
else if ( strncmp(
"StopRumbleMessage", type, INTERFACE_MESSAGE_TYPE_SIZE_ - 1) == 0 ) {
412 }
else if ( strncmp(
"StopAllMessage", type, INTERFACE_MESSAGE_TYPE_SIZE_ - 1) == 0 ) {
416 "message type for this interface type.", type);
430 type(), other->
type());
432 memcpy(data, oi->data,
sizeof(JoystickInterface_data_t));
436JoystickInterface::enum_tostring(
const char *enumtype,
int val)
const
438 if (strcmp(enumtype,
"Direction") == 0) {
439 return tostring_Direction((
Direction)val);
459JoystickInterface::StartRumbleMessage::StartRumbleMessage(
const uint16_t ini_length,
const uint16_t ini_delay,
const Direction ini_direction,
const uint16_t ini_strong_magnitude,
const uint16_t ini_weak_magnitude) :
Message(
"StartRumbleMessage")
461 data_size =
sizeof(StartRumbleMessage_data_t);
464 data = (StartRumbleMessage_data_t *)
data_ptr;
466 data->length = ini_length;
467 data->delay = ini_delay;
468 data->direction = ini_direction;
469 data->strong_magnitude = ini_strong_magnitude;
470 data->weak_magnitude = ini_weak_magnitude;
484 data_size =
sizeof(StartRumbleMessage_data_t);
487 data = (StartRumbleMessage_data_t *)
data_ptr;
514 data = (StartRumbleMessage_data_t *)
data_ptr;
610 set_field(data->direction, new_direction);
620 return data->strong_magnitude;
640 set_field(data->strong_magnitude, new_strong_magnitude);
650 return data->weak_magnitude;
670 set_field(data->weak_magnitude, new_weak_magnitude);
693 data_size =
sizeof(StopRumbleMessage_data_t);
696 data = (StopRumbleMessage_data_t *)
data_ptr;
718 data = (StopRumbleMessage_data_t *)
data_ptr;
743 data_size =
sizeof(StopAllMessage_data_t);
746 data = (StopAllMessage_data_t *)
data_ptr;
768 data = (StopAllMessage_data_t *)
data_ptr;
Base class for exceptions in Fawkes.
Base class for all Fawkes BlackBoard interfaces.
const char * type() const
Get type of interface.
void * data_ptr
Pointer to local memory storage.
void set_field(FieldT &field, DataT &data)
Set a field, set data_changed to true and update data_changed accordingly.
StartRumbleMessage Fawkes BlackBoard Interface Message.
size_t maxlenof_length() const
Get maximum length of length value.
uint16_t length() const
Get length value.
StartRumbleMessage()
Constructor.
size_t maxlenof_weak_magnitude() const
Get maximum length of weak_magnitude value.
uint16_t strong_magnitude() const
Get strong_magnitude value.
void set_delay(const uint16_t new_delay)
Set delay value.
uint16_t weak_magnitude() const
Get weak_magnitude value.
void set_direction(const Direction new_direction)
Set direction value.
void set_strong_magnitude(const uint16_t new_strong_magnitude)
Set strong_magnitude value.
void set_length(const uint16_t new_length)
Set length value.
size_t maxlenof_direction() const
Get maximum length of direction value.
size_t maxlenof_strong_magnitude() const
Get maximum length of strong_magnitude value.
~StartRumbleMessage()
Destructor.
uint16_t delay() const
Get delay value.
virtual Message * clone() const
Clone this message.
Direction direction() const
Get direction value.
size_t maxlenof_delay() const
Get maximum length of delay value.
void set_weak_magnitude(const uint16_t new_weak_magnitude)
Set weak_magnitude value.
StopAllMessage Fawkes BlackBoard Interface Message.
~StopAllMessage()
Destructor.
StopAllMessage()
Constructor.
virtual Message * clone() const
Clone this message.
StopRumbleMessage Fawkes BlackBoard Interface Message.
StopRumbleMessage()
Constructor.
virtual Message * clone() const
Clone this message.
~StopRumbleMessage()
Destructor.
JoystickInterface Fawkes BlackBoard Interface.
static const uint8_t JFF_SPRING
JFF_SPRING constant.
static const uint32_t BUTTON_15
BUTTON_15 constant.
static const uint8_t JFF_RUMBLE
JFF_RUMBLE constant.
static const uint32_t BUTTON_10
BUTTON_10 constant.
static const uint8_t JFF_INERTIA
JFF_INERTIA constant.
static const uint32_t BUTTON_12
BUTTON_12 constant.
static const uint32_t BUTTON_5
BUTTON_5 constant.
static const uint32_t BUTTON_27
BUTTON_27 constant.
static const uint32_t BUTTON_11
BUTTON_11 constant.
static const uint32_t BUTTON_22
BUTTON_22 constant.
static const uint32_t BUTTON_2
BUTTON_2 constant.
static const uint32_t BUTTON_7
BUTTON_7 constant.
static const uint32_t BUTTON_16
BUTTON_16 constant.
static const uint32_t BUTTON_6
BUTTON_6 constant.
static const uint8_t JFF_FRICTION
JFF_FRICTION constant.
static const uint32_t BUTTON_28
BUTTON_28 constant.
static const uint32_t BUTTON_8
BUTTON_8 constant.
static const uint32_t BUTTON_3
BUTTON_3 constant.
static const uint32_t BUTTON_24
BUTTON_24 constant.
static const uint32_t BUTTON_13
BUTTON_13 constant.
static const uint8_t JFF_DAMPER
JFF_DAMPER constant.
static const uint8_t JFF_RAMP
JFF_RAMP constant.
static const uint32_t BUTTON_20
BUTTON_20 constant.
static const uint32_t BUTTON_18
BUTTON_18 constant.
static const uint32_t BUTTON_26
BUTTON_26 constant.
static const uint32_t BUTTON_4
BUTTON_4 constant.
static const uint32_t BUTTON_30
BUTTON_30 constant.
static const uint32_t BUTTON_19
BUTTON_19 constant.
virtual bool message_valid(const Message *message) const
Check if message is valid and can be enqueued.
static const uint32_t BUTTON_1
BUTTON_1 constant.
Direction
Effect direction.
static const uint32_t BUTTON_25
BUTTON_25 constant.
static const uint32_t BUTTON_29
BUTTON_29 constant.
static const uint32_t BUTTON_31
BUTTON_31 constant.
static const uint32_t BUTTON_32
BUTTON_32 constant.
static const uint32_t BUTTON_14
BUTTON_14 constant.
static const uint32_t BUTTON_9
BUTTON_9 constant.
static const uint32_t BUTTON_23
BUTTON_23 constant.
static const uint32_t BUTTON_21
BUTTON_21 constant.
static const uint32_t BUTTON_17
BUTTON_17 constant.
static const uint8_t JFF_CONSTANT
JFF_CONSTANT constant.
static const uint8_t JFF_PERIODIC
JFF_PERIODIC constant.
Base class for all messages passed through interfaces in Fawkes BlackBoard.
void add_fieldinfo(interface_fieldtype_t type, const char *name, size_t length, void *value, const char *enumtype=0, const interface_enum_map_t *enum_map=0)
Add an entry to the info list.
void * data_ptr
Pointer to memory that contains local data.
message_data_ts_t * data_ts
data timestamp aliasing pointer
unsigned int data_size
Size of memory needed to hold all data.
Fawkes library namespace.
@ IFT_UINT16
16 bit unsigned integer field
@ IFT_ENUM
field with interface specific enum type
Timestamp data, must be present and first entries for each interface data structs!...