Subversion Repositories HomeAutomation

Rev

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
  {