00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "TeamMessage.h"
00012 #include "Platform/SystemCall.h"
00013
00014 bool TeamMessage::isActual() const
00015 {
00016 return SystemCall::getTimeSince(lastReceivedTimeStamp) < 2000;
00017 }
00018
00019 In& operator>>(In& stream,TeamMessage& teamMessage)
00020 {
00021 stream >> teamMessage.timeStamp >>
00022 teamMessage.lastReceivedTimeStamp >>
00023 teamMessage.incomingTimeStamp;
00024 char c;
00025 stream >> c;
00026 teamMessage.playerNumberOfSender = (Player::playerNumber)c;
00027
00028 char fieldsInMessage;
00029 stream >> fieldsInMessage;
00030 teamMessage.sendRobotPose = ((fieldsInMessage & 1) == 1);
00031 teamMessage.sendSeenBallPosition = ((fieldsInMessage & 2) == 2);
00032 teamMessage.sendBehaviorTeamMessage = ((fieldsInMessage & 4) == 4);
00033
00034
00035 if (teamMessage.sendRobotPose)
00036 {
00037 TeamMessage::read(stream,teamMessage.robotPose);
00038 stream >> c;
00039 teamMessage.robotPose.setValidity(c / 100.0);
00040 }
00041
00042 if (teamMessage.sendSeenBallPosition)
00043 {
00044 stream.read(&teamMessage.seenBallPosition,sizeof(SeenBallPosition));
00045 }
00046
00047 if (teamMessage.sendBehaviorTeamMessage)
00048 {
00049 stream >> teamMessage.behaviorTeamMessage;
00050 }
00051
00052 stream >> c;
00053 teamMessage.playerNumberOfSender = (Player::playerNumber)c;
00054
00055 return stream;
00056 }
00057
00058 Out& operator<<(Out& stream,const TeamMessage& teamMessage)
00059 {
00060 stream << teamMessage.timeStamp << teamMessage.lastReceivedTimeStamp
00061 << teamMessage.incomingTimeStamp;
00062 stream << (char)getPlayer().getPlayerNumber();
00063
00064
00065 char fieldsInMessage =
00066 teamMessage.sendRobotPose
00067 + (teamMessage.sendSeenBallPosition << 1)
00068 + (teamMessage.sendBehaviorTeamMessage << 2);
00069
00070 stream << fieldsInMessage;
00071
00072
00073 if (teamMessage.sendRobotPose) {
00074 TeamMessage::write(stream,teamMessage.robotPose);
00075 stream << char(teamMessage.robotPose.getValidity() * 100.0 + 0.5);
00076 }
00077
00078 if (teamMessage.sendBehaviorTeamMessage)
00079 {
00080 stream.write(&teamMessage.seenBallPosition, sizeof(SeenBallPosition));
00081 }
00082
00083
00084 if (teamMessage.sendBehaviorTeamMessage) {
00085 stream << teamMessage.behaviorTeamMessage;
00086 }
00087
00088
00089 stream << (char) getPlayer().getPlayerNumber();
00090 return stream;
00091 }
00092
00093 void TeamMessage::read(In& stream,Vector2<double>& v)
00094 {
00095 short x,y;
00096 stream >> x >> y;
00097 v.x = x;
00098 v.y = y;
00099 }
00100
00101 void TeamMessage::read(In& stream,Pose2D& p)
00102 {
00103 read(stream,p.translation);
00104 short rotation;
00105 stream >> rotation;
00106 p.rotation = rotation / 1000.0;
00107 }
00108
00109 void TeamMessage::write(Out& stream,const Vector2<double>& v)
00110 {
00111 stream << short(v.x + 0.5) << short(v.y + 0.5);
00112 }
00113
00114 void TeamMessage::write(Out& stream,const Pose2D& p)
00115 {
00116 write(stream,p.translation);
00117 stream << short(p.rotation * 1000 + 0.5);
00118 }
00119
00120 long TeamMessage::getTimeStampInOwnTime() const
00121 {
00122 return(timeStamp - timeOffset);
00123 }
00124
00125 long TeamMessage::getTimeInOwnTime(long time) const
00126 {
00127 return(time - timeOffset);
00128 }
00129
00130 long TeamMessage::getTimeInRemoteTime(long time) const
00131 {
00132 return(time + timeOffset);
00133 }
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207