Fawkes API  Fawkes Development Version
GameStateInterface.cpp
1 
2 /***************************************************************************
3  * GameStateInterface.cpp - Fawkes BlackBoard Interface - GameStateInterface
4  *
5  * Templated created: Thu Oct 12 10:49:19 2006
6  * Copyright 2008 Tim Niemueller
7  *
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version. A runtime exception applies to
14  * this software (see LICENSE.GPL_WRE file mentioned below for details).
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Library General Public License for more details.
20  *
21  * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22  */
23 
24 #include <interfaces/GameStateInterface.h>
25 
26 #include <core/exceptions/software.h>
27 
28 #include <cstring>
29 #include <cstdlib>
30 
31 namespace fawkes {
32 
33 /** @class GameStateInterface <interfaces/GameStateInterface.h>
34  * GameStateInterface Fawkes BlackBoard Interface.
35  *
36  This interface provides access to the current game state. It is closely related to
37  the WorldInfo network protocol.
38  @see WorldInfoTransceiver
39 
40  * @ingroup FawkesInterfaces
41  */
42 
43 
44 /** GS_FROZEN constant */
45 const uint32_t GameStateInterface::GS_FROZEN = 0u;
46 /** GS_PLAY constant */
47 const uint32_t GameStateInterface::GS_PLAY = 1u;
48 /** GS_KICK_OFF constant */
49 const uint32_t GameStateInterface::GS_KICK_OFF = 2u;
50 /** GS_DROP_BALL constant */
51 const uint32_t GameStateInterface::GS_DROP_BALL = 3u;
52 /** GS_PENALTY constant */
53 const uint32_t GameStateInterface::GS_PENALTY = 4u;
54 /** GS_CORNER_KICK constant */
55 const uint32_t GameStateInterface::GS_CORNER_KICK = 5u;
56 /** GS_THROW_IN constant */
57 const uint32_t GameStateInterface::GS_THROW_IN = 6u;
58 /** GS_FREE_KICK constant */
59 const uint32_t GameStateInterface::GS_FREE_KICK = 7u;
60 /** GS_GOAL_KICK constant */
61 const uint32_t GameStateInterface::GS_GOAL_KICK = 8u;
62 /** GS_HALF_TIME constant */
63 const uint32_t GameStateInterface::GS_HALF_TIME = 9u;
64 /** GS_SPL_INITIAL constant */
65 const uint32_t GameStateInterface::GS_SPL_INITIAL = 0u;
66 /** GS_SPL_READY constant */
67 const uint32_t GameStateInterface::GS_SPL_READY = 1u;
68 /** GS_SPL_SET constant */
69 const uint32_t GameStateInterface::GS_SPL_SET = 2u;
70 /** GS_SPL_PLAY constant */
71 const uint32_t GameStateInterface::GS_SPL_PLAY = 3u;
72 /** GS_SPL_FINISHED constant */
73 const uint32_t GameStateInterface::GS_SPL_FINISHED = 4u;
74 
75 /** Constructor */
76 GameStateInterface::GameStateInterface() : Interface()
77 {
78  data_size = sizeof(GameStateInterface_data_t);
79  data_ptr = malloc(data_size);
80  data = (GameStateInterface_data_t *)data_ptr;
81  data_ts = (interface_data_ts_t *)data_ptr;
82  memset(data_ptr, 0, data_size);
83  add_fieldinfo(IFT_UINT32, "game_state", 1, &data->game_state);
84  add_fieldinfo(IFT_ENUM, "state_team", 1, &data->state_team, "");
85  add_fieldinfo(IFT_ENUM, "our_team", 1, &data->our_team, "");
86  add_fieldinfo(IFT_ENUM, "our_goal_color", 1, &data->our_goal_color, "");
87  add_fieldinfo(IFT_ENUM, "half", 1, &data->half, "");
88  add_fieldinfo(IFT_BOOL, "kickoff", 1, &data->kickoff);
89  add_fieldinfo(IFT_ENUM, "role", 1, &data->role, "");
90  add_fieldinfo(IFT_UINT32, "score_cyan", 1, &data->score_cyan);
91  add_fieldinfo(IFT_UINT32, "score_magenta", 1, &data->score_magenta);
92  add_messageinfo("SetTeamColorMessage");
93  add_messageinfo("SetKickoffMessage");
94  add_messageinfo("SetStateTeamMessage");
95  unsigned char tmp_hash[] = {0xf5, 0x19, 0x26, 0x77, 0x6, 0x54, 0x44, 0xb4, 0xe1, 0x61, 0x40, 0x2a, 0x65, 0xfc, 0xaf, 0xa1};
96  set_hash(tmp_hash);
97 }
98 
99 /** Destructor */
100 GameStateInterface::~GameStateInterface()
101 {
102  free(data_ptr);
103 }
104 /** Convert if_gamestate_team_t constant to string.
105  * @param value value to convert to string
106  * @return constant value as string.
107  */
108 const char *
110 {
111  switch (value) {
112  case TEAM_NONE: return "TEAM_NONE";
113  case TEAM_CYAN: return "TEAM_CYAN";
114  case TEAM_MAGENTA: return "TEAM_MAGENTA";
115  case TEAM_BOTH: return "TEAM_BOTH";
116  default: return "UNKNOWN";
117  }
118 }
119 /** Convert if_gamestate_goalcolor_t constant to string.
120  * @param value value to convert to string
121  * @return constant value as string.
122  */
123 const char *
125 {
126  switch (value) {
127  case GOAL_BLUE: return "GOAL_BLUE";
128  case GOAL_YELLOW: return "GOAL_YELLOW";
129  default: return "UNKNOWN";
130  }
131 }
132 /** Convert if_gamestate_half_t constant to string.
133  * @param value value to convert to string
134  * @return constant value as string.
135  */
136 const char *
138 {
139  switch (value) {
140  case HALF_FIRST: return "HALF_FIRST";
141  case HALF_SECOND: return "HALF_SECOND";
142  default: return "UNKNOWN";
143  }
144 }
145 /** Convert if_gamestate_role_t constant to string.
146  * @param value value to convert to string
147  * @return constant value as string.
148  */
149 const char *
151 {
152  switch (value) {
153  case ROLE_GOALIE: return "ROLE_GOALIE";
154  case ROLE_DEFENDER: return "ROLE_DEFENDER";
155  case ROLE_MID_LEFT: return "ROLE_MID_LEFT";
156  case ROLE_MID_RIGHT: return "ROLE_MID_RIGHT";
157  case ROLE_ATTACKER: return "ROLE_ATTACKER";
158  default: return "UNKNOWN";
159  }
160 }
161 /* Methods */
162 /** Get game_state value.
163  * Current game state
164  * @return game_state value
165  */
166 uint32_t
168 {
169  return data->game_state;
170 }
171 
172 /** Get maximum length of game_state value.
173  * @return length of game_state value, can be length of the array or number of
174  * maximum number of characters for a string
175  */
176 size_t
178 {
179  return 1;
180 }
181 
182 /** Set game_state value.
183  * Current game state
184  * @param new_game_state new game_state value
185  */
186 void
187 GameStateInterface::set_game_state(const uint32_t new_game_state)
188 {
189  data->game_state = new_game_state;
190  data_changed = true;
191 }
192 
193 /** Get state_team value.
194  * Team referred to by game state
195  * @return state_team value
196  */
199 {
200  return (GameStateInterface::if_gamestate_team_t)data->state_team;
201 }
202 
203 /** Get maximum length of state_team value.
204  * @return length of state_team value, can be length of the array or number of
205  * maximum number of characters for a string
206  */
207 size_t
209 {
210  return 1;
211 }
212 
213 /** Set state_team value.
214  * Team referred to by game state
215  * @param new_state_team new state_team value
216  */
217 void
219 {
220  data->state_team = new_state_team;
221  data_changed = true;
222 }
223 
224 /** Get our_team value.
225  * Our team color
226  * @return our_team value
227  */
230 {
231  return (GameStateInterface::if_gamestate_team_t)data->our_team;
232 }
233 
234 /** Get maximum length of our_team value.
235  * @return length of our_team value, can be length of the array or number of
236  * maximum number of characters for a string
237  */
238 size_t
240 {
241  return 1;
242 }
243 
244 /** Set our_team value.
245  * Our team color
246  * @param new_our_team new our_team value
247  */
248 void
250 {
251  data->our_team = new_our_team;
252  data_changed = true;
253 }
254 
255 /** Get our_goal_color value.
256  * Our own goal color
257  * @return our_goal_color value
258  */
261 {
262  return (GameStateInterface::if_gamestate_goalcolor_t)data->our_goal_color;
263 }
264 
265 /** Get maximum length of our_goal_color value.
266  * @return length of our_goal_color value, can be length of the array or number of
267  * maximum number of characters for a string
268  */
269 size_t
271 {
272  return 1;
273 }
274 
275 /** Set our_goal_color value.
276  * Our own goal color
277  * @param new_our_goal_color new our_goal_color value
278  */
279 void
281 {
282  data->our_goal_color = new_our_goal_color;
283  data_changed = true;
284 }
285 
286 /** Get half value.
287  * Current game half
288  * @return half value
289  */
292 {
293  return (GameStateInterface::if_gamestate_half_t)data->half;
294 }
295 
296 /** Get maximum length of half value.
297  * @return length of half value, can be length of the array or number of
298  * maximum number of characters for a string
299  */
300 size_t
302 {
303  return 1;
304 }
305 
306 /** Set half value.
307  * Current game half
308  * @param new_half new half value
309  */
310 void
312 {
313  data->half = new_half;
314  data_changed = true;
315 }
316 
317 /** Get kickoff value.
318  * Whether we have kickoff
319  * @return kickoff value
320  */
321 bool
323 {
324  return data->kickoff;
325 }
326 
327 /** Get maximum length of kickoff value.
328  * @return length of kickoff value, can be length of the array or number of
329  * maximum number of characters for a string
330  */
331 size_t
333 {
334  return 1;
335 }
336 
337 /** Set kickoff value.
338  * Whether we have kickoff
339  * @param new_kickoff new kickoff value
340  */
341 void
342 GameStateInterface::set_kickoff(const bool new_kickoff)
343 {
344  data->kickoff = new_kickoff;
345  data_changed = true;
346 }
347 
348 /** Get role value.
349  * Current role of this robot
350  * @return role value
351  */
354 {
355  return (GameStateInterface::if_gamestate_role_t)data->role;
356 }
357 
358 /** Get maximum length of role value.
359  * @return length of role value, can be length of the array or number of
360  * maximum number of characters for a string
361  */
362 size_t
364 {
365  return 1;
366 }
367 
368 /** Set role value.
369  * Current role of this robot
370  * @param new_role new role value
371  */
372 void
374 {
375  data->role = new_role;
376  data_changed = true;
377 }
378 
379 /** Get score_cyan value.
380  * Score of team cyan
381  * @return score_cyan value
382  */
383 uint32_t
385 {
386  return data->score_cyan;
387 }
388 
389 /** Get maximum length of score_cyan value.
390  * @return length of score_cyan value, can be length of the array or number of
391  * maximum number of characters for a string
392  */
393 size_t
395 {
396  return 1;
397 }
398 
399 /** Set score_cyan value.
400  * Score of team cyan
401  * @param new_score_cyan new score_cyan value
402  */
403 void
404 GameStateInterface::set_score_cyan(const uint32_t new_score_cyan)
405 {
406  data->score_cyan = new_score_cyan;
407  data_changed = true;
408 }
409 
410 /** Get score_magenta value.
411  * Score of team magenta
412  * @return score_magenta value
413  */
414 uint32_t
416 {
417  return data->score_magenta;
418 }
419 
420 /** Get maximum length of score_magenta value.
421  * @return length of score_magenta value, can be length of the array or number of
422  * maximum number of characters for a string
423  */
424 size_t
426 {
427  return 1;
428 }
429 
430 /** Set score_magenta value.
431  * Score of team magenta
432  * @param new_score_magenta new score_magenta value
433  */
434 void
435 GameStateInterface::set_score_magenta(const uint32_t new_score_magenta)
436 {
437  data->score_magenta = new_score_magenta;
438  data_changed = true;
439 }
440 
441 /* =========== message create =========== */
442 Message *
444 {
445  if ( strncmp("SetTeamColorMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
446  return new SetTeamColorMessage();
447  } else if ( strncmp("SetKickoffMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
448  return new SetKickoffMessage();
449  } else if ( strncmp("SetStateTeamMessage", type, __INTERFACE_MESSAGE_TYPE_SIZE) == 0 ) {
450  return new SetStateTeamMessage();
451  } else {
452  throw UnknownTypeException("The given type '%s' does not match any known "
453  "message type for this interface type.", type);
454  }
455 }
456 
457 
458 /** Copy values from other interface.
459  * @param other other interface to copy values from
460  */
461 void
463 {
464  const GameStateInterface *oi = dynamic_cast<const GameStateInterface *>(other);
465  if (oi == NULL) {
466  throw TypeMismatchException("Can only copy values from interface of same type (%s vs. %s)",
467  type(), other->type());
468  }
469  memcpy(data, oi->data, sizeof(GameStateInterface_data_t));
470 }
471 
472 const char *
473 GameStateInterface::enum_tostring(const char *enumtype, int val) const
474 {
475  if (strcmp(enumtype, "if_gamestate_team_t") == 0) {
476  return tostring_if_gamestate_team_t((if_gamestate_team_t)val);
477  }
478  if (strcmp(enumtype, "if_gamestate_goalcolor_t") == 0) {
479  return tostring_if_gamestate_goalcolor_t((if_gamestate_goalcolor_t)val);
480  }
481  if (strcmp(enumtype, "if_gamestate_half_t") == 0) {
482  return tostring_if_gamestate_half_t((if_gamestate_half_t)val);
483  }
484  if (strcmp(enumtype, "if_gamestate_role_t") == 0) {
485  return tostring_if_gamestate_role_t((if_gamestate_role_t)val);
486  }
487  throw UnknownTypeException("Unknown enum type %s", enumtype);
488 }
489 
490 /* =========== messages =========== */
491 /** @class GameStateInterface::SetTeamColorMessage <interfaces/GameStateInterface.h>
492  * SetTeamColorMessage Fawkes BlackBoard Interface Message.
493  *
494 
495  */
496 
497 
498 /** Constructor with initial values.
499  * @param ini_our_team initial value for our_team
500  */
502 {
503  data_size = sizeof(SetTeamColorMessage_data_t);
504  data_ptr = malloc(data_size);
505  memset(data_ptr, 0, data_size);
506  data = (SetTeamColorMessage_data_t *)data_ptr;
508  data->our_team = ini_our_team;
509  add_fieldinfo(IFT_ENUM, "our_team", 1, &data->our_team, "À0ß); } /** Constructor */ GameStateInterface::SetTeamColorMessage::SetTeamColorMessage() : Message("SetTeamColorMessage") { data_size = sizeof(SetTeamColorMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetTeamColorMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; add_fieldinfo(IFT_ENUM, "our_team", 1, &data->our_team, "À0ß"); } /** Destructor */ GameStateInterface::SetTeamColorMessage::~SetTeamColorMessage() { free(data_ptr); } /** Copy constructor. * @param m message to copy from */ GameStateInterface::SetTeamColorMessage::SetTeamColorMessage(const SetTeamColorMessage *m) : Message("SetTeamColorMessage") { data_size = m->data_size; data_ptr = malloc(data_size); memcpy(data_ptr, m->data_ptr, data_size); data = (SetTeamColorMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; } /* Methods */ /** Get our_team value. * Our team color * @return our_team value */ GameStateInterface::if_gamestate_team_t GameStateInterface::SetTeamColorMessage::our_team() const { return (GameStateInterface::if_gamestate_team_t)data->our_team; } /** Get maximum length of our_team value. * @return length of our_team value, can be length of the array or number of * maximum number of characters for a string */ size_t GameStateInterface::SetTeamColorMessage::maxlenof_our_team() const { return 1; } /** Set our_team value. * Our team color * @param new_our_team new our_team value */ void GameStateInterface::SetTeamColorMessage::set_our_team(const if_gamestate_team_t new_our_team) { data->our_team = new_our_team; } /** Clone this message. * Produces a message of the same type as this message and copies the * data to the new message. * @return clone of this message */ Message * GameStateInterface::SetTeamColorMessage::clone() const { return new GameStateInterface::SetTeamColorMessage(this); } /** @class GameStateInterface::SetKickoffMessage <interfaces/GameStateInterface.h> * SetKickoffMessage Fawkes BlackBoard Interface Message. * */ /** Constructor with initial values. * @param ini_kickoff initial value for kickoff */ GameStateInterface::SetKickoffMessage::SetKickoffMessage(const bool ini_kickoff) : Message("SetKickoffMessage") { data_size = sizeof(SetKickoffMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetKickoffMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; data->kickoff = ini_kickoff; add_fieldinfo(IFT_BOOL, "kickoff", 1, &data->kickoff); } /** Constructor */ GameStateInterface::SetKickoffMessage::SetKickoffMessage() : Message("SetKickoffMessage") { data_size = sizeof(SetKickoffMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetKickoffMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; add_fieldinfo(IFT_BOOL, "kickoff", 1, &data->kickoff); } /** Destructor */ GameStateInterface::SetKickoffMessage::~SetKickoffMessage() { free(data_ptr); } /** Copy constructor. * @param m message to copy from */ GameStateInterface::SetKickoffMessage::SetKickoffMessage(const SetKickoffMessage *m) : Message("SetKickoffMessage") { data_size = m->data_size; data_ptr = malloc(data_size); memcpy(data_ptr, m->data_ptr, data_size); data = (SetKickoffMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; } /* Methods */ /** Get kickoff value. * Whether we have kickoff * @return kickoff value */ bool GameStateInterface::SetKickoffMessage::is_kickoff() const { return data->kickoff; } /** Get maximum length of kickoff value. * @return length of kickoff value, can be length of the array or number of * maximum number of characters for a string */ size_t GameStateInterface::SetKickoffMessage::maxlenof_kickoff() const { return 1; } /** Set kickoff value. * Whether we have kickoff * @param new_kickoff new kickoff value */ void GameStateInterface::SetKickoffMessage::set_kickoff(const bool new_kickoff) { data->kickoff = new_kickoff; } /** Clone this message. * Produces a message of the same type as this message and copies the * data to the new message. * @return clone of this message */ Message * GameStateInterface::SetKickoffMessage::clone() const { return new GameStateInterface::SetKickoffMessage(this); } /** @class GameStateInterface::SetStateTeamMessage <interfaces/GameStateInterface.h> * SetStateTeamMessage Fawkes BlackBoard Interface Message. * */ /** Constructor with initial values. * @param ini_state_team initial value for state_team */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage(const if_gamestate_team_t ini_state_team) : Message("SetStateTeamMessage") { data_size = sizeof(SetStateTeamMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; data->state_team = ini_state_team; add_fieldinfo(IFT_ENUM, "state_team", 1, &data->state_team, "À0ß"); } /** Constructor */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage() : Message("SetStateTeamMessage") { data_size = sizeof(SetStateTeamMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; add_fieldinfo(IFT_ENUM, "state_team", 1, &data->state_team, "À0ß"); } /** Destructor */ GameStateInterface::SetStateTeamMessage::~SetStateTeamMessage() { free(data_ptr); } /** Copy constructor. * @param m message to copy from */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage(const SetStateTeamMessage *m) : Message("SetStateTeamMessage") { data_size = m->data_size; data_ptr = malloc(data_size); memcpy(data_ptr, m->data_ptr, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; } /* Methods */ /** Get state_team value. * Team referred to by game state * @return state_team value */ GameStateInterface::if_gamestate_team_t GameStateInterface::SetStateTeamMessage::state_team() const { return (GameStateInterface::if_gamestate_team_t)data->state_team; } /** Get maximum length of state_team value. * @return length of state_team value, can be length of the array or number of * maximum number of characters for a string */ size_t GameStateInterface::SetStateTeamMessage::maxlenof_state_team() const { return 1; } /** Set state_team value. * Team referred to by game state * @param new_state_team new state_team value */ void GameStateInterface::SetStateTeamMessage::set_state_team(const if_gamestate_team_t new_state_team) { data->state_team = new_state_team; } /** Clone this message. * Produces a message of the same type as this message and copies the * data to the new message. * @return clone of this message */ Message * GameStateInterface::SetStateTeamMessage::clone() const { return new GameStateInterface::SetStateTeamMessage(this); } /** Check if message is valid and can be enqueued. * @param message Message to check * @return true if the message is valid, false otherwise. */ bool GameStateInterface::message_valid(const Message *message) const { const SetTeamColorMessage *m0 = dynamic_cast<const SetTeamColorMessage *>(message); if ( m0 != NULL ) { return true; } const SetKickoffMessage *m1 = dynamic_cast<const SetKickoffMessage *>(message); if ( m1 != NULL ) { return true; } const SetStateTeamMessage *m2 = dynamic_cast<const SetStateTeamMessage *>(message); if ( m2 != NULL ) { return true; } return false; } /// @cond INTERNALS EXPORT_INTERFACE(GameStateInterface) /// @endcond } // end namespace fawkes ");
510 }
511 /** Constructor */
513 {
514  data_size = sizeof(SetTeamColorMessage_data_t);
515  data_ptr = malloc(data_size);
516  memset(data_ptr, 0, data_size);
517  data = (SetTeamColorMessage_data_t *)data_ptr;
519  add_fieldinfo(IFT_ENUM, "our_team", 1, &data->our_team, "À0ß); } /** Destructor */ GameStateInterface::SetTeamColorMessage::~SetTeamColorMessage() { free(data_ptr); } /** Copy constructor. * @param m message to copy from */ GameStateInterface::SetTeamColorMessage::SetTeamColorMessage(const SetTeamColorMessage *m) : Message("SetTeamColorMessage") { data_size = m->data_size; data_ptr = malloc(data_size); memcpy(data_ptr, m->data_ptr, data_size); data = (SetTeamColorMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; } /* Methods */ /** Get our_team value. * Our team color * @return our_team value */ GameStateInterface::if_gamestate_team_t GameStateInterface::SetTeamColorMessage::our_team() const { return (GameStateInterface::if_gamestate_team_t)data->our_team; } /** Get maximum length of our_team value. * @return length of our_team value, can be length of the array or number of * maximum number of characters for a string */ size_t GameStateInterface::SetTeamColorMessage::maxlenof_our_team() const { return 1; } /** Set our_team value. * Our team color * @param new_our_team new our_team value */ void GameStateInterface::SetTeamColorMessage::set_our_team(const if_gamestate_team_t new_our_team) { data->our_team = new_our_team; } /** Clone this message. * Produces a message of the same type as this message and copies the * data to the new message. * @return clone of this message */ Message * GameStateInterface::SetTeamColorMessage::clone() const { return new GameStateInterface::SetTeamColorMessage(this); } /** @class GameStateInterface::SetKickoffMessage <interfaces/GameStateInterface.h> * SetKickoffMessage Fawkes BlackBoard Interface Message. * */ /** Constructor with initial values. * @param ini_kickoff initial value for kickoff */ GameStateInterface::SetKickoffMessage::SetKickoffMessage(const bool ini_kickoff) : Message("SetKickoffMessage") { data_size = sizeof(SetKickoffMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetKickoffMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; data->kickoff = ini_kickoff; add_fieldinfo(IFT_BOOL, "kickoff", 1, &data->kickoff); } /** Constructor */ GameStateInterface::SetKickoffMessage::SetKickoffMessage() : Message("SetKickoffMessage") { data_size = sizeof(SetKickoffMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetKickoffMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; add_fieldinfo(IFT_BOOL, "kickoff", 1, &data->kickoff); } /** Destructor */ GameStateInterface::SetKickoffMessage::~SetKickoffMessage() { free(data_ptr); } /** Copy constructor. * @param m message to copy from */ GameStateInterface::SetKickoffMessage::SetKickoffMessage(const SetKickoffMessage *m) : Message("SetKickoffMessage") { data_size = m->data_size; data_ptr = malloc(data_size); memcpy(data_ptr, m->data_ptr, data_size); data = (SetKickoffMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; } /* Methods */ /** Get kickoff value. * Whether we have kickoff * @return kickoff value */ bool GameStateInterface::SetKickoffMessage::is_kickoff() const { return data->kickoff; } /** Get maximum length of kickoff value. * @return length of kickoff value, can be length of the array or number of * maximum number of characters for a string */ size_t GameStateInterface::SetKickoffMessage::maxlenof_kickoff() const { return 1; } /** Set kickoff value. * Whether we have kickoff * @param new_kickoff new kickoff value */ void GameStateInterface::SetKickoffMessage::set_kickoff(const bool new_kickoff) { data->kickoff = new_kickoff; } /** Clone this message. * Produces a message of the same type as this message and copies the * data to the new message. * @return clone of this message */ Message * GameStateInterface::SetKickoffMessage::clone() const { return new GameStateInterface::SetKickoffMessage(this); } /** @class GameStateInterface::SetStateTeamMessage <interfaces/GameStateInterface.h> * SetStateTeamMessage Fawkes BlackBoard Interface Message. * */ /** Constructor with initial values. * @param ini_state_team initial value for state_team */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage(const if_gamestate_team_t ini_state_team) : Message("SetStateTeamMessage") { data_size = sizeof(SetStateTeamMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; data->state_team = ini_state_team; add_fieldinfo(IFT_ENUM, "state_team", 1, &data->state_team, "À0ß"); } /** Constructor */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage() : Message("SetStateTeamMessage") { data_size = sizeof(SetStateTeamMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; add_fieldinfo(IFT_ENUM, "state_team", 1, &data->state_team, "À0ß"); } /** Destructor */ GameStateInterface::SetStateTeamMessage::~SetStateTeamMessage() { free(data_ptr); } /** Copy constructor. * @param m message to copy from */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage(const SetStateTeamMessage *m) : Message("SetStateTeamMessage") { data_size = m->data_size; data_ptr = malloc(data_size); memcpy(data_ptr, m->data_ptr, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; } /* Methods */ /** Get state_team value. * Team referred to by game state * @return state_team value */ GameStateInterface::if_gamestate_team_t GameStateInterface::SetStateTeamMessage::state_team() const { return (GameStateInterface::if_gamestate_team_t)data->state_team; } /** Get maximum length of state_team value. * @return length of state_team value, can be length of the array or number of * maximum number of characters for a string */ size_t GameStateInterface::SetStateTeamMessage::maxlenof_state_team() const { return 1; } /** Set state_team value. * Team referred to by game state * @param new_state_team new state_team value */ void GameStateInterface::SetStateTeamMessage::set_state_team(const if_gamestate_team_t new_state_team) { data->state_team = new_state_team; } /** Clone this message. * Produces a message of the same type as this message and copies the * data to the new message. * @return clone of this message */ Message * GameStateInterface::SetStateTeamMessage::clone() const { return new GameStateInterface::SetStateTeamMessage(this); } /** Check if message is valid and can be enqueued. * @param message Message to check * @return true if the message is valid, false otherwise. */ bool GameStateInterface::message_valid(const Message *message) const { const SetTeamColorMessage *m0 = dynamic_cast<const SetTeamColorMessage *>(message); if ( m0 != NULL ) { return true; } const SetKickoffMessage *m1 = dynamic_cast<const SetKickoffMessage *>(message); if ( m1 != NULL ) { return true; } const SetStateTeamMessage *m2 = dynamic_cast<const SetStateTeamMessage *>(message); if ( m2 != NULL ) { return true; } return false; } /// @cond INTERNALS EXPORT_INTERFACE(GameStateInterface) /// @endcond } // end namespace fawkes ");
520 }
521 
522 /** Destructor */
524 {
525  free(data_ptr);
526 }
527 
528 /** Copy constructor.
529  * @param m message to copy from
530  */
532 {
533  data_size = m->data_size;
534  data_ptr = malloc(data_size);
535  memcpy(data_ptr, m->data_ptr, data_size);
536  data = (SetTeamColorMessage_data_t *)data_ptr;
538 }
539 
540 /* Methods */
541 /** Get our_team value.
542  * Our team color
543  * @return our_team value
544  */
547 {
548  return (GameStateInterface::if_gamestate_team_t)data->our_team;
549 }
550 
551 /** Get maximum length of our_team value.
552  * @return length of our_team value, can be length of the array or number of
553  * maximum number of characters for a string
554  */
555 size_t
557 {
558  return 1;
559 }
560 
561 /** Set our_team value.
562  * Our team color
563  * @param new_our_team new our_team value
564  */
565 void
567 {
568  data->our_team = new_our_team;
569 }
570 
571 /** Clone this message.
572  * Produces a message of the same type as this message and copies the
573  * data to the new message.
574  * @return clone of this message
575  */
576 Message *
578 {
580 }
581 /** @class GameStateInterface::SetKickoffMessage <interfaces/GameStateInterface.h>
582  * SetKickoffMessage Fawkes BlackBoard Interface Message.
583  *
584 
585  */
586 
587 
588 /** Constructor with initial values.
589  * @param ini_kickoff initial value for kickoff
590  */
591 GameStateInterface::SetKickoffMessage::SetKickoffMessage(const bool ini_kickoff) : Message("SetKickoffMessage")
592 {
593  data_size = sizeof(SetKickoffMessage_data_t);
594  data_ptr = malloc(data_size);
595  memset(data_ptr, 0, data_size);
596  data = (SetKickoffMessage_data_t *)data_ptr;
598  data->kickoff = ini_kickoff;
599  add_fieldinfo(IFT_BOOL, "kickoff", 1, &data->kickoff);
600 }
601 /** Constructor */
603 {
604  data_size = sizeof(SetKickoffMessage_data_t);
605  data_ptr = malloc(data_size);
606  memset(data_ptr, 0, data_size);
607  data = (SetKickoffMessage_data_t *)data_ptr;
609  add_fieldinfo(IFT_BOOL, "kickoff", 1, &data->kickoff);
610 }
611 
612 /** Destructor */
614 {
615  free(data_ptr);
616 }
617 
618 /** Copy constructor.
619  * @param m message to copy from
620  */
622 {
623  data_size = m->data_size;
624  data_ptr = malloc(data_size);
625  memcpy(data_ptr, m->data_ptr, data_size);
626  data = (SetKickoffMessage_data_t *)data_ptr;
628 }
629 
630 /* Methods */
631 /** Get kickoff value.
632  * Whether we have kickoff
633  * @return kickoff value
634  */
635 bool
637 {
638  return data->kickoff;
639 }
640 
641 /** Get maximum length of kickoff value.
642  * @return length of kickoff value, can be length of the array or number of
643  * maximum number of characters for a string
644  */
645 size_t
647 {
648  return 1;
649 }
650 
651 /** Set kickoff value.
652  * Whether we have kickoff
653  * @param new_kickoff new kickoff value
654  */
655 void
657 {
658  data->kickoff = new_kickoff;
659 }
660 
661 /** Clone this message.
662  * Produces a message of the same type as this message and copies the
663  * data to the new message.
664  * @return clone of this message
665  */
666 Message *
668 {
669  return new GameStateInterface::SetKickoffMessage(this);
670 }
671 /** @class GameStateInterface::SetStateTeamMessage <interfaces/GameStateInterface.h>
672  * SetStateTeamMessage Fawkes BlackBoard Interface Message.
673  *
674 
675  */
676 
677 
678 /** Constructor with initial values.
679  * @param ini_state_team initial value for state_team
680  */
682 {
683  data_size = sizeof(SetStateTeamMessage_data_t);
684  data_ptr = malloc(data_size);
685  memset(data_ptr, 0, data_size);
686  data = (SetStateTeamMessage_data_t *)data_ptr;
688  data->state_team = ini_state_team;
689  add_fieldinfo(IFT_ENUM, "state_team", 1, &data->state_team, "À0ß); } /** Constructor */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage() : Message("SetStateTeamMessage") { data_size = sizeof(SetStateTeamMessage_data_t); data_ptr = malloc(data_size); memset(data_ptr, 0, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; add_fieldinfo(IFT_ENUM, "state_team", 1, &data->state_team, "À0ß"); } /** Destructor */ GameStateInterface::SetStateTeamMessage::~SetStateTeamMessage() { free(data_ptr); } /** Copy constructor. * @param m message to copy from */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage(const SetStateTeamMessage *m) : Message("SetStateTeamMessage") { data_size = m->data_size; data_ptr = malloc(data_size); memcpy(data_ptr, m->data_ptr, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; } /* Methods */ /** Get state_team value. * Team referred to by game state * @return state_team value */ GameStateInterface::if_gamestate_team_t GameStateInterface::SetStateTeamMessage::state_team() const { return (GameStateInterface::if_gamestate_team_t)data->state_team; } /** Get maximum length of state_team value. * @return length of state_team value, can be length of the array or number of * maximum number of characters for a string */ size_t GameStateInterface::SetStateTeamMessage::maxlenof_state_team() const { return 1; } /** Set state_team value. * Team referred to by game state * @param new_state_team new state_team value */ void GameStateInterface::SetStateTeamMessage::set_state_team(const if_gamestate_team_t new_state_team) { data->state_team = new_state_team; } /** Clone this message. * Produces a message of the same type as this message and copies the * data to the new message. * @return clone of this message */ Message * GameStateInterface::SetStateTeamMessage::clone() const { return new GameStateInterface::SetStateTeamMessage(this); } /** Check if message is valid and can be enqueued. * @param message Message to check * @return true if the message is valid, false otherwise. */ bool GameStateInterface::message_valid(const Message *message) const { const SetTeamColorMessage *m0 = dynamic_cast<const SetTeamColorMessage *>(message); if ( m0 != NULL ) { return true; } const SetKickoffMessage *m1 = dynamic_cast<const SetKickoffMessage *>(message); if ( m1 != NULL ) { return true; } const SetStateTeamMessage *m2 = dynamic_cast<const SetStateTeamMessage *>(message); if ( m2 != NULL ) { return true; } return false; } /// @cond INTERNALS EXPORT_INTERFACE(GameStateInterface) /// @endcond } // end namespace fawkes ");
690 }
691 /** Constructor */
693 {
694  data_size = sizeof(SetStateTeamMessage_data_t);
695  data_ptr = malloc(data_size);
696  memset(data_ptr, 0, data_size);
697  data = (SetStateTeamMessage_data_t *)data_ptr;
699  add_fieldinfo(IFT_ENUM, "state_team", 1, &data->state_team, "À0ß); } /** Destructor */ GameStateInterface::SetStateTeamMessage::~SetStateTeamMessage() { free(data_ptr); } /** Copy constructor. * @param m message to copy from */ GameStateInterface::SetStateTeamMessage::SetStateTeamMessage(const SetStateTeamMessage *m) : Message("SetStateTeamMessage") { data_size = m->data_size; data_ptr = malloc(data_size); memcpy(data_ptr, m->data_ptr, data_size); data = (SetStateTeamMessage_data_t *)data_ptr; data_ts = (message_data_ts_t *)data_ptr; } /* Methods */ /** Get state_team value. * Team referred to by game state * @return state_team value */ GameStateInterface::if_gamestate_team_t GameStateInterface::SetStateTeamMessage::state_team() const { return (GameStateInterface::if_gamestate_team_t)data->state_team; } /** Get maximum length of state_team value. * @return length of state_team value, can be length of the array or number of * maximum number of characters for a string */ size_t GameStateInterface::SetStateTeamMessage::maxlenof_state_team() const { return 1; } /** Set state_team value. * Team referred to by game state * @param new_state_team new state_team value */ void GameStateInterface::SetStateTeamMessage::set_state_team(const if_gamestate_team_t new_state_team) { data->state_team = new_state_team; } /** Clone this message. * Produces a message of the same type as this message and copies the * data to the new message. * @return clone of this message */ Message * GameStateInterface::SetStateTeamMessage::clone() const { return new GameStateInterface::SetStateTeamMessage(this); } /** Check if message is valid and can be enqueued. * @param message Message to check * @return true if the message is valid, false otherwise. */ bool GameStateInterface::message_valid(const Message *message) const { const SetTeamColorMessage *m0 = dynamic_cast<const SetTeamColorMessage *>(message); if ( m0 != NULL ) { return true; } const SetKickoffMessage *m1 = dynamic_cast<const SetKickoffMessage *>(message); if ( m1 != NULL ) { return true; } const SetStateTeamMessage *m2 = dynamic_cast<const SetStateTeamMessage *>(message); if ( m2 != NULL ) { return true; } return false; } /// @cond INTERNALS EXPORT_INTERFACE(GameStateInterface) /// @endcond } // end namespace fawkes ");
700 }
701 
702 /** Destructor */
704 {
705  free(data_ptr);
706 }
707 
708 /** Copy constructor.
709  * @param m message to copy from
710  */
712 {
713  data_size = m->data_size;
714  data_ptr = malloc(data_size);
715  memcpy(data_ptr, m->data_ptr, data_size);
716  data = (SetStateTeamMessage_data_t *)data_ptr;
718 }
719 
720 /* Methods */
721 /** Get state_team value.
722  * Team referred to by game state
723  * @return state_team value
724  */
727 {
728  return (GameStateInterface::if_gamestate_team_t)data->state_team;
729 }
730 
731 /** Get maximum length of state_team value.
732  * @return length of state_team value, can be length of the array or number of
733  * maximum number of characters for a string
734  */
735 size_t
737 {
738  return 1;
739 }
740 
741 /** Set state_team value.
742  * Team referred to by game state
743  * @param new_state_team new state_team value
744  */
745 void
747 {
748  data->state_team = new_state_team;
749 }
750 
751 /** Clone this message.
752  * Produces a message of the same type as this message and copies the
753  * data to the new message.
754  * @return clone of this message
755  */
756 Message *
758 {
760 }
761 /** Check if message is valid and can be enqueued.
762  * @param message Message to check
763  * @return true if the message is valid, false otherwise.
764  */
765 bool
767 {
768  const SetTeamColorMessage *m0 = dynamic_cast<const SetTeamColorMessage *>(message);
769  if ( m0 != NULL ) {
770  return true;
771  }
772  const SetKickoffMessage *m1 = dynamic_cast<const SetKickoffMessage *>(message);
773  if ( m1 != NULL ) {
774  return true;
775  }
776  const SetStateTeamMessage *m2 = dynamic_cast<const SetStateTeamMessage *>(message);
777  if ( m2 != NULL ) {
778  return true;
779  }
780  return false;
781 }
782 
783 /// @cond INTERNALS
784 EXPORT_INTERFACE(GameStateInterface)
785 /// @endcond
786 
787 
788 } // end namespace fawkes
const char * tostring_if_gamestate_goalcolor_t(if_gamestate_goalcolor_t value) const
Convert if_gamestate_goalcolor_t constant to string.
void set_state_team(const if_gamestate_team_t new_state_team)
Set state_team value.
void * data_ptr
Pointer to memory that contains local data.
Definition: message.h:114
Blue goal.
Definition: enums.h:64
static const uint32_t GS_FROZEN
GS_FROZEN constant.
size_t maxlenof_kickoff() const
Get maximum length of kickoff value.
Base class for all messages passed through interfaces in Fawkes BlackBoard.
Definition: message.h:43
if_gamestate_role_t role() const
Get role value.
void set_game_state(const uint32_t new_game_state)
Set game_state value.
void set_score_cyan(const uint32_t new_score_cyan)
Set score_cyan value.
static const uint32_t GS_DROP_BALL
GS_DROP_BALL constant.
size_t maxlenof_role() const
Get maximum length of role value.
size_t maxlenof_our_goal_color() const
Get maximum length of our_goal_color value.
void set_hash(unsigned char *ihash)
Set hash.
Definition: interface.cpp:312
if_gamestate_team_t state_team() const
Get state_team value.
void set_our_goal_color(const if_gamestate_goalcolor_t new_our_goal_color)
Set our_goal_color value.
No team, not team-specific.
Definition: enums.h:55
static const uint32_t GS_THROW_IN
GS_THROW_IN constant.
size_t maxlenof_our_team() const
Get maximum length of our_team value.
Fawkes library namespace.
void set_state_team(const if_gamestate_team_t new_state_team)
Set state_team value.
Timestamp data, must be present and first entries for each interface data structs! This leans on time...
Definition: message.h:119
void set_our_team(const if_gamestate_team_t new_our_team)
Set our_team value.
const char * tostring_if_gamestate_half_t(if_gamestate_half_t value) const
Convert if_gamestate_half_t constant to string.
Yellow goal.
Definition: enums.h:65
Base class for all Fawkes BlackBoard interfaces.
Definition: interface.h:80
const char * tostring_if_gamestate_team_t(if_gamestate_team_t value) const
Convert if_gamestate_team_t constant to string.
void set_role(const if_gamestate_role_t new_role)
Set role value.
if_gamestate_goalcolor_t our_goal_color() const
Get our_goal_color value.
Magenta team.
Definition: enums.h:57
void set_kickoff(const bool new_kickoff)
Set kickoff value.
bool is_kickoff() const
Get kickoff value.
if_gamestate_role_t
Enumeration defining the different robot roles.
message_data_ts_t * data_ts
data timestamp aliasing pointer
Definition: message.h:123
First half.
Definition: enums.h:71
unsigned int data_size
Size of memory needed to hold all data.
Definition: message.h:115
static const uint32_t GS_SPL_READY
GS_SPL_READY constant.
void add_messageinfo(const char *name)
Add an entry to the message info list.
Definition: interface.cpp:368
size_t maxlenof_state_team() const
Get maximum length of state_team value.
bool data_changed
Indicator if data has changed.
Definition: interface.h:208
size_t maxlenof_half() const
Get maximum length of half value.
if_gamestate_team_t our_team() const
Get our_team value.
virtual Message * clone() const
Clone this message.
void * data_ptr
Pointer to local memory storage.
Definition: interface.h:206
virtual bool message_valid(const Message *message) const
Check if message is valid and can be enqueued.
static const uint32_t GS_SPL_PLAY
GS_SPL_PLAY constant.
SetTeamColorMessage Fawkes BlackBoard Interface Message.
static const uint32_t GS_FREE_KICK
GS_FREE_KICK constant.
Both teams.
Definition: enums.h:58
size_t maxlenof_state_team() const
Get maximum length of state_team value.
size_t maxlenof_kickoff() const
Get maximum length of kickoff value.
if_gamestate_half_t
Enumeration defining the different teams.
static const uint32_t GS_SPL_FINISHED
GS_SPL_FINISHED constant.
if_gamestate_team_t our_team() const
Get our_team value.
if_gamestate_goalcolor_t
Enumeration defining the different teams.
size_t maxlenof_game_state() const
Get maximum length of game_state value.
static const uint32_t GS_KICK_OFF
GS_KICK_OFF constant.
Second half.
Definition: enums.h:72
SetKickoffMessage Fawkes BlackBoard Interface Message.
static const uint32_t GS_PLAY
GS_PLAY constant.
virtual Message * clone() const
Clone this message.
static const uint32_t GS_HALF_TIME
GS_HALF_TIME constant.
SetStateTeamMessage Fawkes BlackBoard Interface Message.
virtual void copy_values(const Interface *other)
Copy values from other interface.
Cyan team.
Definition: enums.h:56
const char * tostring_if_gamestate_role_t(if_gamestate_role_t value) const
Convert if_gamestate_role_t constant to string.
if_gamestate_team_t state_team() const
Get state_team value.
virtual Message * clone() const
Clone this message.
size_t maxlenof_score_cyan() const
Get maximum length of score_cyan value.
static const uint32_t GS_CORNER_KICK
GS_CORNER_KICK constant.
virtual Message * create_message(const char *type) const
Create message based on type name.
GameStateInterface Fawkes BlackBoard Interface.
uint32_t game_state() const
Get game_state value.
static const uint32_t GS_GOAL_KICK
GS_GOAL_KICK constant.
void add_fieldinfo(interface_fieldtype_t type, const char *name, size_t length, void *value, const char *enumtype=0)
Add an entry to the info list.
Definition: message.cpp:435
size_t maxlenof_score_magenta() const
Get maximum length of score_magenta value.
virtual const char * enum_tostring(const char *enumtype, int val) const
Convert arbitrary enum value to string.
void set_score_magenta(const uint32_t new_score_magenta)
Set score_magenta value.
if_gamestate_team_t
Enumeration defining the different teams.
boolean field
Definition: types.h:34
if_gamestate_half_t half() const
Get half value.
uint32_t score_cyan() const
Get score_cyan value.
const char * type() const
Get type of interface.
Definition: interface.cpp:635
static const uint32_t GS_SPL_SET
GS_SPL_SET constant.
static const uint32_t GS_SPL_INITIAL
GS_SPL_INITIAL constant.
32 bit unsigned integer field
Definition: types.h:40
field with interface specific enum type
Definition: types.h:47
uint32_t score_magenta() const
Get score_magenta value.
size_t maxlenof_our_team() const
Get maximum length of our_team value.
void set_kickoff(const bool new_kickoff)
Set kickoff value.
static const uint32_t GS_PENALTY
GS_PENALTY constant.
void set_half(const if_gamestate_half_t new_half)
Set half value.
void set_our_team(const if_gamestate_team_t new_our_team)
Set our_team value.