Subversion Repositories HomeAutomation

Rev

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

Rev 1989 Rev 2066
Line 308... Line 308...
308
{
308
{
309
    bool sign = bitset.Get(start_bit) == 1;
309
    bool sign = bitset.Get(start_bit) == 1;
310
   
310
 
311
    unsigned long raw_bit_value = bitset.Read(start_bit, bit_length);
311
    unsigned long raw_bit_value = bitset.Read(start_bit, bit_length);
312
 
312
 
313
    int raw_value = raw_bit_value;
313
    long raw_value = raw_bit_value;
314
   
314
 
315
    if (sign)
315
    if (sign)
316
    {
316
    {
317
        long mask = 0;
317
        long mask = 0;
318
       
318
 
Line 328... Line 328...
328
}
328
}
329
 
329
 
330
void Protocol::EncodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
330
void Protocol::EncodeInt(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
331
{
331
{
332
    unsigned long raw_bit_value = 0;
332
    unsigned long raw_bit_value = 0;
333
    int raw_value = boost::lexical_cast<int>(value);
333
    long raw_value = boost::lexical_cast<long>(value);
334
    //LOG.Info("Float as int: " + raw_value);
334
    //LOG.Info("Float as int: " + raw_value);
335
 
335
 
336
    raw_bit_value = raw_value;
336
    raw_bit_value = raw_value;
337
   
337
 
338
    if (raw_value < 0)
338
    if (raw_value < 0)
Line 354... Line 354...
354
{
354
{
355
    unsigned long raw_bit_value = bitset.Read(start_bit, bit_length);
355
    unsigned long raw_bit_value = bitset.Read(start_bit, bit_length);
356
   
356
 
357
    //LOG.Debug("DecodeUint: raw_bit_value=" + boost::lexical_cast<std::string>(raw_bit_value));
357
    //LOG.Debug("DecodeUint: raw_bit_value=" + boost::lexical_cast<std::string>(raw_bit_value));
358
   
358
 
359
    return boost::lexical_cast<std::string>((unsigned int)raw_bit_value);
359
    return boost::lexical_cast<std::string>((unsigned long)raw_bit_value);
360
}
360
}
361
 
361
 
362
void Protocol::EncodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
362
void Protocol::EncodeUint(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
363
{
363
{
364
    unsigned long raw_bit_value = boost::lexical_cast<unsigned int>(value);
364
    unsigned long raw_bit_value = boost::lexical_cast<unsigned long>(value);
365
   
365
 
366
    bitset.Write(start_bit, bit_length, raw_bit_value);
366
    bitset.Write(start_bit, bit_length, raw_bit_value);
367
}
367
}
368
 
368
 
369
std::string Protocol::DecodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length)
369
std::string Protocol::DecodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length)
Line 379... Line 379...
379
    return boost::lexical_cast<std::string>(float_value);
379
    return boost::lexical_cast<std::string>(float_value);
380
}
380
}
381
 
381
 
382
void Protocol::EncodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
382
void Protocol::EncodeFloat(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
383
{
383
{
384
    int int_value = boost::lexical_cast<float>(value) * 64.0f;
384
    long int_value = boost::lexical_cast<float>(value) * 64.0f;
385
    //LOG.Info("Float: " + int_value);
385
    //LOG.Info("Float: " + int_value);
386
 
386
 
387
    this->EncodeInt(bitset, start_bit, bit_length, boost::lexical_cast<std::string>(int_value));
387
    this->EncodeInt(bitset, start_bit, bit_length, boost::lexical_cast<std::string>(int_value));
388
}
388
}
389
 
389
 
Line 439... Line 439...
439
    return value;
439
    return value;
440
}
440
}
441
 
441
 
442
void Protocol::EncodeHexstring(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
442
void Protocol::EncodeHexstring(common::Bitset& bitset, unsigned int start_bit, unsigned int bit_length, std::string value)
443
{
443
{
444
    int ascii_value;
444
    long ascii_value;
445
   
445
 
446
    for (unsigned int n = 0; n < bit_length; n += 4)
446
    for (unsigned int n = 0; n < bit_length; n += 4)
447
    {
447
    {
448
        ascii_value = boost::lexical_cast<int>((int)std::toupper(value[n / 4]));
448
        ascii_value = boost::lexical_cast<long>((long)std::toupper(value[n / 4]));
449
       
449
 
450
        if (48 <= ascii_value && ascii_value <= 57)
450
        if (48 <= ascii_value && ascii_value <= 57)
451
        {
451
        {
452
            bitset.Write(start_bit + n, 4, ascii_value - 48);
452
            bitset.Write(start_bit + n, 4, ascii_value - 48);
453
        }
453
        }