24 #include <interfaces/GameStateInterface.h>
26 #include <core/exceptions/software.h>
78 GameStateInterface::GameStateInterface() : Interface()
80 data_size =
sizeof(GameStateInterface_data_t);
81 data_ptr = malloc(data_size);
82 data = (GameStateInterface_data_t *)data_ptr;
83 data_ts = (interface_data_ts_t *)data_ptr;
84 memset(data_ptr, 0, data_size);
85 enum_map_if_gamestate_team_t[(int)TEAM_NONE] =
"TEAM_NONE";
86 enum_map_if_gamestate_team_t[(int)TEAM_CYAN] =
"TEAM_CYAN";
87 enum_map_if_gamestate_team_t[(int)TEAM_MAGENTA] =
"TEAM_MAGENTA";
88 enum_map_if_gamestate_team_t[(int)TEAM_BOTH] =
"TEAM_BOTH";
89 enum_map_if_gamestate_goalcolor_t[(int)GOAL_BLUE] =
"GOAL_BLUE";
90 enum_map_if_gamestate_goalcolor_t[(int)GOAL_YELLOW] =
"GOAL_YELLOW";
91 enum_map_if_gamestate_half_t[(int)HALF_FIRST] =
"HALF_FIRST";
92 enum_map_if_gamestate_half_t[(int)HALF_SECOND] =
"HALF_SECOND";
93 enum_map_if_gamestate_role_t[(int)ROLE_GOALIE] =
"ROLE_GOALIE";
94 enum_map_if_gamestate_role_t[(int)ROLE_DEFENDER] =
"ROLE_DEFENDER";
95 enum_map_if_gamestate_role_t[(int)ROLE_MID_LEFT] =
"ROLE_MID_LEFT";
96 enum_map_if_gamestate_role_t[(int)ROLE_MID_RIGHT] =
"ROLE_MID_RIGHT";
97 enum_map_if_gamestate_role_t[(int)ROLE_ATTACKER] =
"ROLE_ATTACKER";
98 add_fieldinfo(IFT_UINT32,
"game_state", 1, &data->game_state);
99 add_fieldinfo(IFT_ENUM,
"state_team", 1, &data->state_team,
"if_gamestate_team_t", &enum_map_if_gamestate_team_t);
100 add_fieldinfo(IFT_ENUM,
"our_team", 1, &data->our_team,
"if_gamestate_team_t", &enum_map_if_gamestate_team_t);
101 add_fieldinfo(IFT_ENUM,
"our_goal_color", 1, &data->our_goal_color,
"if_gamestate_goalcolor_t", &enum_map_if_gamestate_goalcolor_t);
102 add_fieldinfo(IFT_ENUM,
"half", 1, &data->half,
"if_gamestate_half_t", &enum_map_if_gamestate_half_t);
103 add_fieldinfo(IFT_BOOL,
"kickoff", 1, &data->kickoff);
104 add_fieldinfo(IFT_ENUM,
"role", 1, &data->role,
"if_gamestate_role_t", &enum_map_if_gamestate_role_t);
105 add_fieldinfo(IFT_UINT32,
"score_cyan", 1, &data->score_cyan);
106 add_fieldinfo(IFT_UINT32,
"score_magenta", 1, &data->score_magenta);
107 add_messageinfo(
"SetTeamColorMessage");
108 add_messageinfo(
"SetKickoffMessage");
109 add_messageinfo(
"SetStateTeamMessage");
110 unsigned char tmp_hash[] = {0xf5, 0x19, 0x26, 0x77, 0x6, 0x54, 0x44, 0xb4, 0xe1, 0x61, 0x40, 0x2a, 0x65, 0xfc, 0xaf, 0xa1};
115 GameStateInterface::~GameStateInterface()
131 default:
return "UNKNOWN";
144 default:
return "UNKNOWN";
157 default:
return "UNKNOWN";
168 case ROLE_GOALIE:
return "ROLE_GOALIE";
169 case ROLE_DEFENDER:
return "ROLE_DEFENDER";
170 case ROLE_MID_LEFT:
return "ROLE_MID_LEFT";
171 case ROLE_MID_RIGHT:
return "ROLE_MID_RIGHT";
172 case ROLE_ATTACKER:
return "ROLE_ATTACKER";
173 default:
return "UNKNOWN";
182 GameStateInterface::game_state()
const
184 return data->game_state;
192 GameStateInterface::maxlenof_game_state()
const
202 GameStateInterface::set_game_state(
const uint32_t new_game_state)
204 set_field(data->game_state, new_game_state);
212 GameStateInterface::state_team()
const
222 GameStateInterface::maxlenof_state_team()
const
234 set_field(data->state_team, new_state_team);
242 GameStateInterface::our_team()
const
252 GameStateInterface::maxlenof_our_team()
const
264 set_field(data->our_team, new_our_team);
272 GameStateInterface::our_goal_color()
const
282 GameStateInterface::maxlenof_our_goal_color()
const
294 set_field(data->our_goal_color, new_our_goal_color);
302 GameStateInterface::half()
const
312 GameStateInterface::maxlenof_half()
const
324 set_field(data->half, new_half);
332 GameStateInterface::is_kickoff()
const
334 return data->kickoff;
342 GameStateInterface::maxlenof_kickoff()
const
352 GameStateInterface::set_kickoff(
const bool new_kickoff)
354 set_field(data->kickoff, new_kickoff);
362 GameStateInterface::role()
const
372 GameStateInterface::maxlenof_role()
const
384 set_field(data->role, new_role);
392 GameStateInterface::score_cyan()
const
394 return data->score_cyan;
402 GameStateInterface::maxlenof_score_cyan()
const
412 GameStateInterface::set_score_cyan(
const uint32_t new_score_cyan)
414 set_field(data->score_cyan, new_score_cyan);
422 GameStateInterface::score_magenta()
const
424 return data->score_magenta;
432 GameStateInterface::maxlenof_score_magenta()
const
442 GameStateInterface::set_score_magenta(
const uint32_t new_score_magenta)
444 set_field(data->score_magenta, new_score_magenta);
449 GameStateInterface::create_message(
const char *type)
const
451 if ( strncmp(
"SetTeamColorMessage", type, INTERFACE_MESSAGE_TYPE_SIZE_ - 1) == 0 ) {
453 }
else if ( strncmp(
"SetKickoffMessage", type, INTERFACE_MESSAGE_TYPE_SIZE_ - 1) == 0 ) {
455 }
else if ( strncmp(
"SetStateTeamMessage", type, INTERFACE_MESSAGE_TYPE_SIZE_ - 1) == 0 ) {
459 "message type for this interface type.", type);
473 type(), other->
type());
475 memcpy(data, oi->data,
sizeof(GameStateInterface_data_t));
479 GameStateInterface::enum_tostring(
const char *enumtype,
int val)
const
481 if (strcmp(enumtype,
"if_gamestate_team_t") == 0) {
484 if (strcmp(enumtype,
"if_gamestate_goalcolor_t") == 0) {
487 if (strcmp(enumtype,
"if_gamestate_half_t") == 0) {
490 if (strcmp(enumtype,
"if_gamestate_role_t") == 0) {
509 data_size =
sizeof(SetTeamColorMessage_data_t);
512 data = (SetTeamColorMessage_data_t *)
data_ptr;
514 data->our_team = ini_our_team;
515 enum_map_if_gamestate_team_t[(int)
TEAM_NONE] =
"TEAM_NONE";
516 enum_map_if_gamestate_team_t[(int)
TEAM_CYAN] =
"TEAM_CYAN";
517 enum_map_if_gamestate_team_t[(int)
TEAM_MAGENTA] =
"TEAM_MAGENTA";
518 enum_map_if_gamestate_team_t[(int)
TEAM_BOTH] =
"TEAM_BOTH";
519 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_BLUE] =
"GOAL_BLUE";
520 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_YELLOW] =
"GOAL_YELLOW";
521 enum_map_if_gamestate_half_t[(int)
HALF_FIRST] =
"HALF_FIRST";
522 enum_map_if_gamestate_half_t[(int)
HALF_SECOND] =
"HALF_SECOND";
523 enum_map_if_gamestate_role_t[(int)
ROLE_GOALIE] =
"ROLE_GOALIE";
524 enum_map_if_gamestate_role_t[(int)
ROLE_DEFENDER] =
"ROLE_DEFENDER";
525 enum_map_if_gamestate_role_t[(int)
ROLE_MID_LEFT] =
"ROLE_MID_LEFT";
526 enum_map_if_gamestate_role_t[(int)
ROLE_MID_RIGHT] =
"ROLE_MID_RIGHT";
527 enum_map_if_gamestate_role_t[(int)
ROLE_ATTACKER] =
"ROLE_ATTACKER";
528 add_fieldinfo(
IFT_ENUM,
"our_team", 1, &data->our_team,
"if_gamestate_team_t", &enum_map_if_gamestate_team_t);
533 data_size =
sizeof(SetTeamColorMessage_data_t);
536 data = (SetTeamColorMessage_data_t *)
data_ptr;
538 enum_map_if_gamestate_team_t[(int)
TEAM_NONE] =
"TEAM_NONE";
539 enum_map_if_gamestate_team_t[(int)
TEAM_CYAN] =
"TEAM_CYAN";
540 enum_map_if_gamestate_team_t[(int)
TEAM_MAGENTA] =
"TEAM_MAGENTA";
541 enum_map_if_gamestate_team_t[(int)
TEAM_BOTH] =
"TEAM_BOTH";
542 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_BLUE] =
"GOAL_BLUE";
543 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_YELLOW] =
"GOAL_YELLOW";
544 enum_map_if_gamestate_half_t[(int)
HALF_FIRST] =
"HALF_FIRST";
545 enum_map_if_gamestate_half_t[(int)
HALF_SECOND] =
"HALF_SECOND";
546 enum_map_if_gamestate_role_t[(int)
ROLE_GOALIE] =
"ROLE_GOALIE";
547 enum_map_if_gamestate_role_t[(int)
ROLE_DEFENDER] =
"ROLE_DEFENDER";
548 enum_map_if_gamestate_role_t[(int)
ROLE_MID_LEFT] =
"ROLE_MID_LEFT";
549 enum_map_if_gamestate_role_t[(int)
ROLE_MID_RIGHT] =
"ROLE_MID_RIGHT";
550 enum_map_if_gamestate_role_t[(int)
ROLE_ATTACKER] =
"ROLE_ATTACKER";
551 add_fieldinfo(
IFT_ENUM,
"our_team", 1, &data->our_team,
"if_gamestate_team_t", &enum_map_if_gamestate_team_t);
568 data = (SetTeamColorMessage_data_t *)
data_ptr;
625 data_size =
sizeof(SetKickoffMessage_data_t);
628 data = (SetKickoffMessage_data_t *)
data_ptr;
630 data->kickoff = ini_kickoff;
631 enum_map_if_gamestate_team_t[(int)
TEAM_NONE] =
"TEAM_NONE";
632 enum_map_if_gamestate_team_t[(int)
TEAM_CYAN] =
"TEAM_CYAN";
633 enum_map_if_gamestate_team_t[(int)
TEAM_MAGENTA] =
"TEAM_MAGENTA";
634 enum_map_if_gamestate_team_t[(int)
TEAM_BOTH] =
"TEAM_BOTH";
635 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_BLUE] =
"GOAL_BLUE";
636 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_YELLOW] =
"GOAL_YELLOW";
637 enum_map_if_gamestate_half_t[(int)
HALF_FIRST] =
"HALF_FIRST";
638 enum_map_if_gamestate_half_t[(int)
HALF_SECOND] =
"HALF_SECOND";
639 enum_map_if_gamestate_role_t[(int)
ROLE_GOALIE] =
"ROLE_GOALIE";
640 enum_map_if_gamestate_role_t[(int)
ROLE_DEFENDER] =
"ROLE_DEFENDER";
641 enum_map_if_gamestate_role_t[(int)
ROLE_MID_LEFT] =
"ROLE_MID_LEFT";
642 enum_map_if_gamestate_role_t[(int)
ROLE_MID_RIGHT] =
"ROLE_MID_RIGHT";
643 enum_map_if_gamestate_role_t[(int)
ROLE_ATTACKER] =
"ROLE_ATTACKER";
649 data_size =
sizeof(SetKickoffMessage_data_t);
652 data = (SetKickoffMessage_data_t *)
data_ptr;
654 enum_map_if_gamestate_team_t[(int)
TEAM_NONE] =
"TEAM_NONE";
655 enum_map_if_gamestate_team_t[(int)
TEAM_CYAN] =
"TEAM_CYAN";
656 enum_map_if_gamestate_team_t[(int)
TEAM_MAGENTA] =
"TEAM_MAGENTA";
657 enum_map_if_gamestate_team_t[(int)
TEAM_BOTH] =
"TEAM_BOTH";
658 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_BLUE] =
"GOAL_BLUE";
659 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_YELLOW] =
"GOAL_YELLOW";
660 enum_map_if_gamestate_half_t[(int)
HALF_FIRST] =
"HALF_FIRST";
661 enum_map_if_gamestate_half_t[(int)
HALF_SECOND] =
"HALF_SECOND";
662 enum_map_if_gamestate_role_t[(int)
ROLE_GOALIE] =
"ROLE_GOALIE";
663 enum_map_if_gamestate_role_t[(int)
ROLE_DEFENDER] =
"ROLE_DEFENDER";
664 enum_map_if_gamestate_role_t[(int)
ROLE_MID_LEFT] =
"ROLE_MID_LEFT";
665 enum_map_if_gamestate_role_t[(int)
ROLE_MID_RIGHT] =
"ROLE_MID_RIGHT";
666 enum_map_if_gamestate_role_t[(int)
ROLE_ATTACKER] =
"ROLE_ATTACKER";
684 data = (SetKickoffMessage_data_t *)
data_ptr;
696 return data->kickoff;
741 data_size =
sizeof(SetStateTeamMessage_data_t);
744 data = (SetStateTeamMessage_data_t *)
data_ptr;
746 data->state_team = ini_state_team;
747 enum_map_if_gamestate_team_t[(int)
TEAM_NONE] =
"TEAM_NONE";
748 enum_map_if_gamestate_team_t[(int)
TEAM_CYAN] =
"TEAM_CYAN";
749 enum_map_if_gamestate_team_t[(int)
TEAM_MAGENTA] =
"TEAM_MAGENTA";
750 enum_map_if_gamestate_team_t[(int)
TEAM_BOTH] =
"TEAM_BOTH";
751 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_BLUE] =
"GOAL_BLUE";
752 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_YELLOW] =
"GOAL_YELLOW";
753 enum_map_if_gamestate_half_t[(int)
HALF_FIRST] =
"HALF_FIRST";
754 enum_map_if_gamestate_half_t[(int)
HALF_SECOND] =
"HALF_SECOND";
755 enum_map_if_gamestate_role_t[(int)
ROLE_GOALIE] =
"ROLE_GOALIE";
756 enum_map_if_gamestate_role_t[(int)
ROLE_DEFENDER] =
"ROLE_DEFENDER";
757 enum_map_if_gamestate_role_t[(int)
ROLE_MID_LEFT] =
"ROLE_MID_LEFT";
758 enum_map_if_gamestate_role_t[(int)
ROLE_MID_RIGHT] =
"ROLE_MID_RIGHT";
759 enum_map_if_gamestate_role_t[(int)
ROLE_ATTACKER] =
"ROLE_ATTACKER";
760 add_fieldinfo(
IFT_ENUM,
"state_team", 1, &data->state_team,
"if_gamestate_team_t", &enum_map_if_gamestate_team_t);
765 data_size =
sizeof(SetStateTeamMessage_data_t);
768 data = (SetStateTeamMessage_data_t *)
data_ptr;
770 enum_map_if_gamestate_team_t[(int)
TEAM_NONE] =
"TEAM_NONE";
771 enum_map_if_gamestate_team_t[(int)
TEAM_CYAN] =
"TEAM_CYAN";
772 enum_map_if_gamestate_team_t[(int)
TEAM_MAGENTA] =
"TEAM_MAGENTA";
773 enum_map_if_gamestate_team_t[(int)
TEAM_BOTH] =
"TEAM_BOTH";
774 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_BLUE] =
"GOAL_BLUE";
775 enum_map_if_gamestate_goalcolor_t[(int)
GOAL_YELLOW] =
"GOAL_YELLOW";
776 enum_map_if_gamestate_half_t[(int)
HALF_FIRST] =
"HALF_FIRST";
777 enum_map_if_gamestate_half_t[(int)
HALF_SECOND] =
"HALF_SECOND";
778 enum_map_if_gamestate_role_t[(int)
ROLE_GOALIE] =
"ROLE_GOALIE";
779 enum_map_if_gamestate_role_t[(int)
ROLE_DEFENDER] =
"ROLE_DEFENDER";
780 enum_map_if_gamestate_role_t[(int)
ROLE_MID_LEFT] =
"ROLE_MID_LEFT";
781 enum_map_if_gamestate_role_t[(int)
ROLE_MID_RIGHT] =
"ROLE_MID_RIGHT";
782 enum_map_if_gamestate_role_t[(int)
ROLE_ATTACKER] =
"ROLE_ATTACKER";
783 add_fieldinfo(
IFT_ENUM,
"state_team", 1, &data->state_team,
"if_gamestate_team_t", &enum_map_if_gamestate_team_t);
800 data = (SetStateTeamMessage_data_t *)
data_ptr;
832 set_field(data->state_team, new_state_team);
SetKickoffMessage Fawkes BlackBoard Interface Message.
bool is_kickoff() const
Get kickoff value.
virtual Message * clone() const
Clone this message.
size_t maxlenof_kickoff() const
Get maximum length of kickoff value.
void set_kickoff(const bool new_kickoff)
Set kickoff value.
~SetKickoffMessage()
Destructor.
SetKickoffMessage()
Constructor.
SetStateTeamMessage Fawkes BlackBoard Interface Message.
void set_state_team(const if_gamestate_team_t new_state_team)
Set state_team value.
size_t maxlenof_state_team() const
Get maximum length of state_team value.
if_gamestate_team_t state_team() const
Get state_team value.
virtual Message * clone() const
Clone this message.
~SetStateTeamMessage()
Destructor.
SetStateTeamMessage()
Constructor.
SetTeamColorMessage Fawkes BlackBoard Interface Message.
if_gamestate_team_t our_team() const
Get our_team value.
virtual Message * clone() const
Clone this message.
SetTeamColorMessage()
Constructor.
size_t maxlenof_our_team() const
Get maximum length of our_team value.
~SetTeamColorMessage()
Destructor.
void set_our_team(const if_gamestate_team_t new_our_team)
Set our_team value.
GameStateInterface Fawkes BlackBoard Interface.
if_gamestate_team_t
Enumeration defining the different teams.
@ TEAM_MAGENTA
Magenta team.
@ TEAM_NONE
No team, not team-specific.
static const uint32_t GS_SPL_FINISHED
GS_SPL_FINISHED constant.
static const uint32_t GS_FREE_KICK
GS_FREE_KICK constant.
static const uint32_t GS_SPL_READY
GS_SPL_READY constant.
if_gamestate_goalcolor_t
Enumeration defining the different teams.
@ GOAL_YELLOW
Yellow goal.
virtual bool message_valid(const Message *message) const
Check if message is valid and can be enqueued.
static const uint32_t GS_CORNER_KICK
GS_CORNER_KICK constant.
if_gamestate_half_t
Enumeration defining the different teams.
@ HALF_SECOND
Second half.
static const uint32_t GS_THROW_IN
GS_THROW_IN constant.
static const uint32_t GS_HALF_TIME
GS_HALF_TIME constant.
static const uint32_t GS_FROZEN
GS_FROZEN constant.
static const uint32_t GS_KICK_OFF
GS_KICK_OFF constant.
static const uint32_t GS_DROP_BALL
GS_DROP_BALL constant.
static const uint32_t GS_SPL_INITIAL
GS_SPL_INITIAL constant.
static const uint32_t GS_SPL_SET
GS_SPL_SET constant.
static const uint32_t GS_GOAL_KICK
GS_GOAL_KICK constant.
static const uint32_t GS_SPL_PLAY
GS_SPL_PLAY constant.
if_gamestate_role_t
Enumeration defining the different robot roles.
@ ROLE_MID_RIGHT
Midfield right.
@ ROLE_MID_LEFT
Midfield left.
static const uint32_t GS_PLAY
GS_PLAY constant.
static const uint32_t GS_PENALTY
GS_PENALTY constant.
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.
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.
@ GOAL_YELLOW
Yellow goal.
@ IFT_ENUM
field with interface specific enum type
@ HALF_SECOND
Second half.
@ TEAM_MAGENTA
Magenta team.
@ TEAM_NONE
No team, not team-specific.
Timestamp data, must be present and first entries for each interface data structs!...