00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039 00040 #include "jaus/mobility/list/reportelement.h" 00041 #include "jaus/mobility/drivers/setglobalwaypoint.h" 00042 00043 using namespace JAUS; 00044 00053 ReportElement::ReportElement(const Address& dest, const Address& src) : Message(REPORT_ELEMENT, dest, src) 00054 { 00055 } 00056 00057 00063 ReportElement::ReportElement(const ReportElement& message) : Message(REPORT_ELEMENT) 00064 { 00065 mElement.Clear(); 00066 *this = message; 00067 } 00068 00069 00075 ReportElement::~ReportElement() 00076 { 00077 } 00078 00079 00089 bool ReportElement::SetElement(const JAUS::Element &element) 00090 { 00091 mElement = element; 00092 return true; 00093 } 00094 00095 00107 int ReportElement::WriteMessageBody(Packet& packet) const 00108 { 00109 int expected = USHORT_SIZE * 4; 00110 int written = 0; 00111 00112 if(mElement.mpElement) 00113 { 00114 Packet* payload = ((Packet *)(&(mElement.mPayload))); 00115 payload->Clear(); 00116 payload->Write(mElement.mpElement->GetMessageCode()); 00117 mElement.mpElement->WriteMessageBody(*payload); 00118 expected += mElement.mPayload.Size(); 00119 00120 written += packet.Write(mElement.mID); 00121 written += packet.Write(mElement.mPrevID); 00122 written += packet.Write(mElement.mNextID); 00123 written += packet.Write((UShort)(mElement.mPayload.Size())); // Count field (USHORT). 00124 written += packet.Write(mElement.mPayload); 00125 } 00126 00127 return expected == written ? written : -1; 00128 } 00129 00130 00142 int ReportElement::ReadMessageBody(const Packet& packet) 00143 { 00144 int expected = USHORT_SIZE * 4; 00145 int read = 0; 00146 00147 UShort payloadSize = 0; 00148 00149 read += packet.Read(mElement.mID); 00150 read += packet.Read(mElement.mPrevID); 00151 read += packet.Read(mElement.mNextID); 00152 read += packet.Read(payloadSize); 00153 expected += payloadSize; 00154 read += packet.Read(mElement.mPayload, payloadSize); 00155 00156 return expected == read ? read : -1; 00157 } 00158 00159 00165 void ReportElement::ClearMessageBody() 00166 { 00167 mElement.Clear(); 00168 } 00169 00170 00176 bool ReportElement::IsLargeDataSet(const unsigned int maxPayloadSize) const 00177 { 00178 int expected = USHORT_SIZE * 4; 00179 00180 if(mElement.mpElement) 00181 { 00182 Packet* payload = ((Packet *)(&(mElement.mPayload))); 00183 payload->Clear(); 00184 payload->Write(mElement.mpElement->GetMessageCode()); 00185 mElement.mpElement->WriteMessageBody(*payload); 00186 expected += mElement.mPayload.Size(); 00187 } 00188 00189 return expected > (int)maxPayloadSize ? true : false; 00190 } 00191 00192 00200 int ReportElement::RunTestCase() const 00201 { 00202 int result = 0; 00203 00204 Packet packet; 00205 00206 ReportElement msg1, msg2; 00207 SetGlobalWaypoint msg3, msg4; 00208 00209 Element element; 00210 msg3.SetLatitude(12.4); 00211 msg3.SetLongitude(34.3); 00212 msg3.SetAltitude(45.2); 00213 element.mID = 12; 00214 element.mNextID = 13; 00215 element.mPrevID = 11; 00216 element.mpElement = (Message*) msg3.Clone(); 00217 00218 msg1.SetElement(element); 00219 00220 if((msg1.WriteMessageBody(packet) != -1) && 00221 (msg2.ReadMessageBody(packet) != -1)) 00222 { 00223 UShort msgcode; 00224 CxUtils::Packet packet; 00225 00226 msg2.GetElement().mPayload.Read(msgcode); 00227 msg2.GetElement().mPayload.Read(packet, msg2.GetElement().mPayload.Size() - USHORT_SIZE, USHORT_SIZE); 00228 00229 msg4.ReadMessageBody(packet); 00230 00231 if((msg3.GetLatitude() - msg4.GetLatitude() < 0.0001) && 00232 (msg3.GetLongitude() - msg4.GetLongitude() < 0.0001) && 00233 (msg3.GetAltitude() - msg4.GetAltitude() < 0.0001)) 00234 { 00235 result = 1; 00236 } 00237 } 00238 00239 return result; 00240 } 00241 00242 00248 ReportElement& ReportElement::operator=(const ReportElement& message) 00249 { 00250 if(this != &message) 00251 { 00252 CopyHeaderData(&message); 00253 mElement = message.mElement; 00254 } 00255 return *this; 00256 } 00257 00258 00259 /* End of File */