Rev 2090 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 2090 | Rev 2216 | ||
|---|---|---|---|
| Line 116... | Line 116... | ||
| 116 | } |
116 | } |
| 117 | } |
117 | } |
| 118 | 118 | ||
| 119 | void Network::SlotOnMessageHandler(broker::Message::Pointer message) |
119 | void Network::SlotOnMessageHandler(broker::Message::Pointer message) |
| 120 | { |
120 | { |
| - | 121 | if (message->GetType() == broker::Message::CAN_RAW_BYTES) |
|
| - | 122 | { |
|
| - | 123 | net::Manager::Instance()->SendTo(this->client_id_, message->GetRawData()); |
|
| - | 124 | } |
|
| 121 | if (message->GetType() == broker::Message::CAN_MESSAGE) |
125 | else if (message->GetType() == broker::Message::CAN_MESSAGE) |
| 122 | { |
126 | { |
| 123 | Message* payload = static_cast<Message*>(message->GetPayload().get()); |
127 | Message* payload = static_cast<Message*>(message->GetPayload().get()); |
| 124 | common::Byteset data(17); |
128 | common::Byteset data(17); |
| 125 | 129 | ||
| 126 | data[0] = PACKET_START; |
130 | data[0] = PACKET_START; |
| 127 | 131 | ||
| 128 | unsigned int class_id = Protocol::Instance()->ResolveClassId(payload->GetClassName()); |
132 | unsigned int class_id = Protocol::Instance()->ResolveClassId(payload->GetClassName()); |
| 129 | data[4] = class_id << 1; |
133 | data[4] = class_id << 1; |
| 130 | 134 | ||
| Line 135... | Line 139... | ||
| 135 | } |
139 | } |
| 136 | else |
140 | else |
| 137 | { |
141 | { |
| 138 | unsigned int direction_flag = Protocol::Instance()->ResolveDirectionFlag(payload->GetDirectionName()); |
142 | unsigned int direction_flag = Protocol::Instance()->ResolveDirectionFlag(payload->GetDirectionName()); |
| 139 | data[4] |= (direction_flag & 0x01); |
143 | data[4] |= (direction_flag & 0x01); |
| 140 | 144 | ||
| 141 | unsigned int module_id = Protocol::Instance()->ResolveModuleId(payload->GetModuleName()); |
145 | unsigned int module_id = Protocol::Instance()->ResolveModuleId(payload->GetModuleName()); |
| 142 | data[3] = module_id; |
146 | data[3] = module_id; |
| 143 | 147 | ||
| 144 | data[2] = payload->GetId(); |
148 | data[2] = payload->GetId(); |
| 145 | 149 | ||
| 146 | unsigned int command_id = Protocol::Instance()->ResolveCommandId(payload->GetCommandName(), payload->GetModuleName()); |
150 | unsigned int command_id = Protocol::Instance()->ResolveCommandId(payload->GetCommandName(), payload->GetModuleName()); |
| 147 | data[1] = command_id; |
151 | data[1] = command_id; |
| 148 | } |
152 | } |
| 149 | 153 | ||
| 150 | unsigned int highest_bit = 0; |
154 | unsigned int highest_bit = 0; |
| Line 185... | Line 189... | ||
| 185 | else if (type == "float") |
189 | else if (type == "float") |
| 186 | { |
190 | { |
| 187 | Protocol::Instance()->EncodeFloat(databits, start_bit, bit_length, value); |
191 | Protocol::Instance()->EncodeFloat(databits, start_bit, bit_length, value); |
| 188 | } |
192 | } |
| 189 | else if (type == "ascii") |
193 | else if (type == "ascii") |
| 190 | { |
194 | { |
| 191 | Protocol::Instance()->EncodeAscii(databits, start_bit, bit_length, value); |
195 | Protocol::Instance()->EncodeAscii(databits, start_bit, bit_length, value); |
| 192 | bit_length = value.length() * 8; |
196 | bit_length = value.length() * 8; |
| 193 | } |
197 | } |
| 194 | else if (type == "hexstring") |
198 | else if (type == "hexstring") |
| 195 | { |
199 | { |
| 196 | Protocol::Instance()->EncodeHexstring(databits, start_bit, bit_length, value); |
200 | Protocol::Instance()->EncodeHexstring(databits, start_bit, bit_length, value); |
| 197 | bit_length = value.length() * 4; |
201 | bit_length = value.length() * 4; |
| 198 | } |
202 | } |
| 199 | else if (type == "enum") |
203 | else if (type == "enum") |
| 200 | { |
204 | { |
| 201 | value = variable_nodes[n].SelectChild("name", value).GetAttributeValue("id"); |
205 | value = variable_nodes[n].SelectChild("name", value).GetAttributeValue("id"); |
| 202 | Protocol::Instance()->EncodeUint(databits, start_bit, bit_length, value); |
206 | Protocol::Instance()->EncodeUint(databits, start_bit, bit_length, value); |
| 203 | } |
207 | } |
| 204 | else// if (type == "uint") |
208 | else// if (type == "uint") |
| 205 | { |
209 | { |
| 206 | Protocol::Instance()->EncodeUint(databits, start_bit, bit_length, value); |
210 | Protocol::Instance()->EncodeUint(databits, start_bit, bit_length, value); |
| 207 | } |
211 | } |
| 208 | 212 | ||
| 209 | if (highest_bit < start_bit + bit_length) |
213 | if (highest_bit < start_bit + bit_length) |
| 210 | { |
214 | { |
| 211 | highest_bit = start_bit + bit_length; |
215 | highest_bit = start_bit + bit_length; |
| 212 | } |
216 | } |
| 213 | } |
217 | } |
| 214 | 218 | ||
| 215 | //LOG.Debug(databits.ToDebugString()); |
219 | //LOG.Debug(databits.ToDebugString()); |
| 216 | 220 | ||
| 217 | unsigned int length = std::min((int)ceil((float)highest_bit / 8.0f), 8); |
221 | unsigned int length = std::min((int)ceil((float)highest_bit / 8.0f), 8); |
| 218 | 222 | ||
| Line 253... | Line 257... | ||
| 253 | data[4] = common::FromHex(value); |
257 | data[4] = common::FromHex(value); |
| 254 | //LOG.Info("id1: " + value + " data: ");//+ data[1]); |
258 | //LOG.Info("id1: " + value + " data: ");//+ data[1]); |
| 255 | 259 | ||
| 256 | value = line.substr(6,2); |
260 | value = line.substr(6,2); |
| 257 | //LOG.Info("<"+ value + ">"); |
261 | //LOG.Info("<"+ value + ">"); |
| 258 | 262 | ||
| 259 | data[3] = common::FromHex(value); |
263 | data[3] = common::FromHex(value); |
| 260 | //LOG.Info("id2: " + value + " data: ");//+ data[2]); |
264 | //LOG.Info("id2: " + value + " data: ");//+ data[2]); |
| 261 | 265 | ||
| 262 | value = line.substr(8,2); |
266 | value = line.substr(8,2); |
| 263 | data[2] = common::FromHex(value); |
267 | data[2] = common::FromHex(value); |
| 264 | //LOG.Info("id3: " + value + " data: ");//+ data[3]); |
268 | //LOG.Info("id3: " + value + " data: ");//+ data[3]); |
| 265 | 269 | ||
| 266 | value = line.substr(10,2); |
270 | value = line.substr(10,2); |
| Line 268... | Line 272... | ||
| 268 | //LOG.Info("id4: " + value + " data: ");//+ data[4]); |
272 | //LOG.Info("id4: " + value + " data: ");//+ data[4]); |
| 269 | 273 | ||
| 270 | value = line.substr(13,1); |
274 | value = line.substr(13,1); |
| 271 | data[5] = common::FromHex(value); |
275 | data[5] = common::FromHex(value); |
| 272 | //LOG.Info("1: " + value + " data: ");//+ data[5]); |
276 | //LOG.Info("1: " + value + " data: ");//+ data[5]); |
| 273 | 277 | ||
| 274 | value = line.substr(15,1); |
278 | value = line.substr(15,1); |
| 275 | data[6] = common::FromHex(value); |
279 | data[6] = common::FromHex(value); |
| 276 | //LOG.Info("1: " + value + " data: ");//+ data[6]); |
280 | //LOG.Info("1: " + value + " data: ");//+ data[6]); |
| 277 | 281 | ||
| 278 | unsigned char length = 0; |
282 | unsigned char length = 0; |
| 279 | unsigned char index = 0; |
283 | unsigned char index = 0; |
| 280 | while (length < 8 && index + 16 < (unsigned char)line.length()) |
284 | while (length < 8 && index + 16 < (unsigned char)line.length()) |
| 281 | { |
285 | { |
| 282 | value = line.substr(index+17,2); |
286 | value = line.substr(index+17,2); |
| 283 | data[8+length] = common::FromHex(value); |
287 | data[8+length] = common::FromHex(value); |
| 284 | //LOG.Info("data: " + value + " data: ");//+ data[6]); |
288 | //LOG.Info("data: " + value + " data: ");//+ data[6]); |
| 285 | index += 3; |
289 | index += 3; |
| 286 | length++; |
290 | length++; |
| 287 | } |
291 | } |
| 288 | 292 | ||
| 289 | data[7] = length; |
293 | data[7] = length; |
| 290 | data[16] = PACKET_END; |
294 | data[16] = PACKET_END; |
| 291 | 295 | ||
| 292 | 296 | ||
| 293 | //LOG.Info("Bytes: " + data.ToDebugString()); |
297 | //LOG.Info("Bytes: " + data.ToDebugString()); |
| 294 | net::Manager::Instance()->SendTo(this->client_id_, data); |
298 | net::Manager::Instance()->SendTo(this->client_id_, data); |
| 295 | } |
299 | } |
| 296 | } |
300 | } |
| 297 | 301 | ||
| 298 | void Network::SlotOnNewDataHandler(net::SocketId client_id, common::Byteset data) |
302 | void Network::SlotOnNewDataHandler(net::SocketId client_id, common::Byteset data) |
| 299 | { |
303 | { |
| 300 | if (client_id != this->client_id_) |
304 | if (client_id != this->client_id_) |
| 301 | { |
305 | { |
| 302 | return; |
306 | return; |
| 303 | } |
307 | } |
| - | 308 | ||
| - | 309 | broker::Manager::Instance()->Post(broker::Message::Pointer(new broker::Message(broker::Message::CAN_RAW_BYTES, data, this))); |
|
| 304 | 310 | ||
| 305 | static bool have_start = false; |
311 | static bool have_start = false; |
| 306 | 312 | ||
| 307 | for (unsigned int n = 0; n < data.size(); n++) |
313 | for (unsigned int n = 0; n < data.size(); n++) |
| 308 | { |
314 | { |