Subversion Repositories HomeAutomation

Rev

Rev 1646 | Rev 1766 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1646 Rev 1689
Line 300... Line 300...
300
    return xml::Node::NodeList();
300
    return xml::Node::NodeList();
301
}
301
}
302
 
302
 
303
std::string Protocol::DecodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length)
303
std::string Protocol::DecodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length)
304
{
304
{
-
 
305
    bool sign = bitset.Get(start_bit) == 1;
-
 
306
   
305
    unsigned long raw_bit_value = bitset.Read(start_bit, bit_length);
307
    unsigned long raw_bit_value = bitset.Read(start_bit, bit_length);
306
    int raw_value = 0;
-
 
307
   
-
 
308
    memcpy(&raw_value, &raw_bit_value, sizeof(raw_value));
-
 
309
   
308
 
-
 
309
    int raw_value = raw_bit_value;
-
 
310
   
-
 
311
    if (sign)
-
 
312
    {
-
 
313
        long mask = 0;
-
 
314
       
-
 
315
        for (unsigned int n = 0; n < bit_length; n++)
-
 
316
        {
-
 
317
            mask += (1 << n);
-
 
318
        }
-
 
319
       
-
 
320
        raw_value = -((~raw_bit_value) & mask);
-
 
321
    }
-
 
322
 
310
    return boost::lexical_cast<std::string>(raw_value);
323
    return boost::lexical_cast<std::string>(raw_value);
311
}
324
}
312
 
325
 
313
void Protocol::EncodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
326
void Protocol::EncodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
314
{
327
{
315
    unsigned long raw_bit_value = 0;
328
    unsigned long raw_bit_value = 0;
316
    int raw_value = boost::lexical_cast<int>(value);
329
    int raw_value = boost::lexical_cast<int>(value);
317
   
330
   
318
    memcpy(&raw_bit_value, &raw_value, sizeof(raw_value));
331
    raw_bit_value = raw_bit_value;
319
   
332
   
-
 
333
    if (raw_value < 0)
-
 
334
    {
-
 
335
        long mask = 0;
-
 
336
       
-
 
337
        for (unsigned int n = 0; n < bit_length; n++)
-
 
338
        {
-
 
339
            mask += (1 << n);
-
 
340
        }
-
 
341
       
-
 
342
        raw_bit_value = (~(-raw_value)) & mask;
-
 
343
    }
-
 
344
   
320
    bitset.Write(start_bit, bit_length, raw_bit_value);
345
    bitset.Write(start_bit, bit_length, raw_bit_value);
321
}
346
}
322
 
347
 
323
std::string Protocol::DecodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length)
348
std::string Protocol::DecodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length)
324
{
349
{
325
    unsigned long raw_bit_value = bitset.Read(start_bit, bit_length);
350
    unsigned long raw_bit_value = bitset.Read(start_bit, bit_length);
326
   
351
   
327
    //LOG.Debug("DecodeUint: raw_bit_value=" + boost::lexical_cast<std::string>(raw_bit_value));
352
    //LOG.Debug("DecodeUint: raw_bit_value=" + boost::lexical_cast<std::string>(raw_bit_value));
328
   
353
   
329
    return boost::lexical_cast<std::string>((unsigned int)raw_bit_value);
354
    return boost::lexical_cast<std::string>((unsigned int)raw_bit_value);
330
}
355
}
331
 
356
 
332
void Protocol::EncodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
357
void Protocol::EncodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
333
{
358
{
Line 336... Line 361...
336
    bitset.Write(start_bit, bit_length, raw_bit_value);
361
    bitset.Write(start_bit, bit_length, raw_bit_value);
337
}
362
}
338
 
363
 
339
std::string Protocol::DecodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length)
364
std::string Protocol::DecodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length)
340
{
365
{
341
    float float_value = boost::lexical_cast<float>(this->DecodeInt(bitset, start_bit, bit_length)) / 64.0f;
366
    float float_value = boost::lexical_cast<float>(this->DecodeInt(bitset, start_bit, bit_length));
-
 
367
    LOG.Debug("DecodeFloat::float_value1=" + boost::lexical_cast<std::string>(float_value));
-
 
368
   
-
 
369
   
-
 
370
    float_value = float_value / 64.0f;
-
 
371
   
-
 
372
    LOG.Debug("DecodeFloat::float_value2=" + boost::lexical_cast<std::string>(float_value));
342
   
373
   
343
    return boost::lexical_cast<std::string>(float_value);
374
    return boost::lexical_cast<std::string>(float_value);
344
}
375
}
345
 
376
 
346
void Protocol::EncodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
377
void Protocol::EncodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)